From 05095075c728055844ca00b9efbb66796b0199f2 Mon Sep 17 00:00:00 2001 From: Javi G Date: Tue, 21 May 2019 22:57:23 +0200 Subject: [PATCH 001/556] Add time parameters with substepping for structural --- .../Common/xml/TimeParametersWithSubstepping.spd | 11 +++++++++++ .../apps/Structural/xml/SolutionStrategy.spd | 7 +------ kratos.gid/images/time1.png | Bin 0 -> 617 bytes 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd create mode 100644 kratos.gid/images/time1.png diff --git a/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd b/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd new file mode 100644 index 000000000..eeaa00656 --- /dev/null +++ b/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/kratos.gid/apps/Structural/xml/SolutionStrategy.spd b/kratos.gid/apps/Structural/xml/SolutionStrategy.spd index e5409e525..a34a9f98a 100644 --- a/kratos.gid/apps/Structural/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/Structural/xml/SolutionStrategy.spd @@ -1,11 +1,6 @@ - - - - - - + diff --git a/kratos.gid/images/time1.png b/kratos.gid/images/time1.png new file mode 100644 index 0000000000000000000000000000000000000000..26b6c46004127bfc8b080fe1e1637194301e8362 GIT binary patch literal 617 zcmV-v0+#)WP){^@ zFJ=4gcARo9om0lW1Ft?>|7T?|`=EypclpK$UbpVoM2Yfg^lN(f+?_Xah2Zu5ZodDl z7$Mk$|BEP*gbfmtpfo@9gg!T_O4)fZA-J>HS_E{tmSl=`Pv2zm>3%67@*m2#(F!Hl z+Ad+$-HPAYPhiXrv84mz_A=PYi>ex=Nr+MP30mBe^Ext{Dw>X7M%SBtQ5ZV2b^;`5IQC~6j({%5BYNyj&N5jrsf|I(zj zokjNj*#(V&!&vdY(^x-z2tSjvNUdmaxr literal 0 HcmV?d00001 From f0cab6312e9d78e1140c2e352156d8cee52f56b9 Mon Sep 17 00:00:00 2001 From: Javi G Date: Tue, 21 May 2019 23:31:14 +0200 Subject: [PATCH 002/556] Write time stepping with intervals --- .../write/writeProjectParameters.tcl | 19 ++++++++++----- .../Writing/WriteProjectParameters.tcl | 24 +++++++++++++++++++ kratos.gid/scripts/Writing/Writing.tcl | 4 ++-- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl index 7ef523ec2..b4d498663 100644 --- a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl @@ -9,14 +9,24 @@ proc Structural::write::getOldParametersDict { } { set problemDataDict [write::GetDefaultProblemDataDict $Structural::app_id] set solutiontype [write::getValue STSoluType] + # Time Parameters + set timeSteppingDict [dict create] if {$solutiontype eq "Static" || $solutiontype eq "eigen_value"} { set time_step "1.1" dict set problemDataDict start_time "0.0" dict set problemDataDict end_time "1.0" + + # Time stepping settings for static + dict set timeSteppingDict "time_step" $time_step + } { - set time_step [write::getValue STTimeParameters DeltaTime] + set time_step_intervals [write::GetTimeStepIntervals] + + # Time stepping settings for dynamic + dict set timeSteppingDict "time_step_intervals" $time_step_intervals } + # Add section to document dict set projectParametersDict problem_data $problemDataDict @@ -49,6 +59,8 @@ proc Structural::write::getOldParametersDict { } { # TODO: Use default # Solution strategy set solverSettingsDict [dict create] + # Time stepping + dict set solverSettingsDict time_stepping $timeSteppingDict set currentStrategyId [write::getValue STSolStrat] # set strategy_write_name [[::Model::GetSolutionStrategy $currentStrategyId] getAttribute "n"] set solver_type_name $solutiontype @@ -75,11 +87,6 @@ proc Structural::write::getOldParametersDict { } { dict set materialsDict materials_filename [GetAttribute materials_file] dict set solverSettingsDict material_import_settings $materialsDict - # Time stepping settings - set timeSteppingDict [dict create] - dict set timeSteppingDict "time_step" $time_step - dict set solverSettingsDict time_stepping $timeSteppingDict - # Solution strategy parameters and Solvers set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict STSolStrat STScheme STStratParams] ] set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict Structural] ] diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index f0b2274eb..b4aa7a994 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -611,3 +611,27 @@ proc write::GetDefaultRestartDict { } { dict set restartDict Restart_Step 0 return $restartDict } + +proc write::GetTimeStepIntervals { {time_parameters_un ""} } { + if {$time_parameters_un eq ""} {set time_parameters_un [GetConfigurationAttribute time_parameters_un]} + set root [customlib::GetBaseRoot] + + set xp "[spdAux::getRoute $time_parameters_un]/container\[@n = 'TimeStep'\]/blockdata" + set time_step_interval_nodes [$root selectNodes $xp] + + # If the app is still working on fixed Delta time + if {[llength $time_step_interval_nodes] eq 0} {return [write::getValue $time_parameters_un DeltaTime]} + + # If it works with interval delta time + set time_step_intervals_dict [dict create] + foreach time_step_interval_node $time_step_interval_nodes { + set time_step_interval_name [get_domnode_attribute $time_step_interval_node name] + set time_step_interval_delta_time [write::getValueByNode [$time_step_interval_node find n DeltaTime]] + set time_step_interval_interval_name [write::getValueByNode [$time_step_interval_node find n Interval]] + lassign [write::getInterval $time_step_interval_interval_name] ini end + set params [dict create interval [list $ini $end] time_step $time_step_interval_delta_time] + dict set time_step_intervals_dict $time_step_interval_name $params + } + + return $time_step_intervals_dict +} \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 671b0da3a..fa8ea6ee2 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -468,10 +468,10 @@ proc write::getValueByNode { node } { } return [getFormattedValue [get_domnode_attribute $node v]] } -proc write::getValue { name { it "" } {what noforce} } { +proc write::getValue { un { it "" } {what noforce} } { set root [customlib::GetBaseRoot] - set xp [spdAux::getRoute $name] + set xp [spdAux::getRoute $un] set node [$root selectNodes $xp] if {$node ne ""} { if {$it ne ""} {set node [$node find n $it]} From 8d1d9657afb42a27adb543979a1e13a4481cebbd Mon Sep 17 00:00:00 2001 From: Javi G Date: Tue, 21 May 2019 23:45:02 +0200 Subject: [PATCH 003/556] Fixed examples --- .../apps/Structural/examples/HighRiseBuilding.tcl | 14 ++++---------- .../apps/Structural/examples/TrussCantilever.tcl | 3 ++- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl index c3f83f61d..2ab17963f 100644 --- a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl @@ -120,16 +120,10 @@ proc Structural::examples::TreeAssignationHighRiseBuilding2D {args} { } # Structure domain time parameters - set change_list [list EndTime 25.0 DeltaTime 0.05] - set xpath [spdAux::getRoute STTimeParameters] - foreach {name value} $change_list { - set node [$root selectNodes "$xpath/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check Truss example script" - } - } + set change_list [list EndTime 25.0] + [$root selectNodes "[spdAux::getRoute STTimeParameters]/value\[@n = 'EndTime'\]"] setAttribute v 25.0 + [$root selectNodes "[spdAux::getRoute STTimeParameters]/container\[@n = 'TimeStep'\]/blockdata\[1\]/value\[@n = 'DeltaTime'\]"] setAttribute v 0.05 + spdAux::RequestRefresh } diff --git a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl index 0e9906956..b3ace9985 100644 --- a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl +++ b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl @@ -160,7 +160,8 @@ proc Structural::examples::TreeAssignationTrussCantilever {args} { } # Structure domain time parameters - set change_list [list EndTime 25.0 DeltaTime 0.1] + #set change_list [list EndTime 25.0 DeltaTime 0.1]; # Commented delta time since the case is static + set change_list [list EndTime 25.0] set xpath [spdAux::getRoute STTimeParameters] foreach {name value} $change_list { set node [$root selectNodes "$xpath/value\[@n = '$name'\]"] From 373797d0df172ce70714280aa740f992d2c2a639 Mon Sep 17 00:00:00 2001 From: Javi G Date: Tue, 21 May 2019 23:45:17 +0200 Subject: [PATCH 004/556] typo --- kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl index 2ab17963f..01e8e5e79 100644 --- a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl @@ -120,7 +120,6 @@ proc Structural::examples::TreeAssignationHighRiseBuilding2D {args} { } # Structure domain time parameters - set change_list [list EndTime 25.0] [$root selectNodes "[spdAux::getRoute STTimeParameters]/value\[@n = 'EndTime'\]"] setAttribute v 25.0 [$root selectNodes "[spdAux::getRoute STTimeParameters]/container\[@n = 'TimeStep'\]/blockdata\[1\]/value\[@n = 'DeltaTime'\]"] setAttribute v 0.05 From 684dafa32bdf6421c63f9f491330f78d01420747 Mon Sep 17 00:00:00 2001 From: Javi G Date: Thu, 27 Feb 2020 18:33:57 +0100 Subject: [PATCH 005/556] split by - instead of / --- kratos.gid/scripts/Writing/Writing.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 9966bb4e5..89df01e14 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -251,7 +251,7 @@ proc write::transformGroupName {groupid} { lappend new_parts [string map [list $bad $good] $part] } } - return [join $new_parts /] + return [join $new_parts -] } # Warning! Indentation must be set before calling here! From 5001382d0573ace6518c35a2cb701094469760d6 Mon Sep 17 00:00:00 2001 From: Javi G Date: Mon, 2 Mar 2020 12:23:25 +0100 Subject: [PATCH 006/556] Replace frequency by output_interval --- kratos.gid/apps/Dam/write/writeProjectParameters.tcl | 2 +- kratos.gid/apps/Pfem/write/write.tcl | 2 +- kratos.gid/apps/PfemFluid/write/ProjectParameters.json | 2 +- kratos.gid/apps/Solid/write/write.tcl | 2 +- kratos.gid/scripts/Writing/WriteProcess.tcl | 2 +- kratos.gid/scripts/Writing/WriteProjectParameters.tcl | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl index 59ff089ca..e5b6ffbeb 100644 --- a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl @@ -439,7 +439,7 @@ proc Dam::write::GetOutputDict { {appid ""} } { set frequency [write::getValue Results OutputDeltaTime_w] } - dict set resultDict output_frequency $frequency + dict set resultDict output_interval $frequency dict set resultDict start_output_results [write::getValue Results StartOutputResults] dict set resultDict body_output [write::getValue Results BodyOutput] diff --git a/kratos.gid/apps/Pfem/write/write.tcl b/kratos.gid/apps/Pfem/write/write.tcl index 153663741..99901d142 100644 --- a/kratos.gid/apps/Pfem/write/write.tcl +++ b/kratos.gid/apps/Pfem/write/write.tcl @@ -181,7 +181,7 @@ proc Pfem::write::GetDefaultOutputDict { {appid ""} } { set outputCT [write::getValue $results_UN OutputControlType] dict set resultDict output_control_type $outputCT if {$outputCT eq "time"} {set frequency [write::getValue $results_UN OutputDeltaTime]} {set frequency [write::getValue $results_UN OutputDeltaStep]} - dict set resultDict output_frequency $frequency + dict set resultDict output_interval $frequency dict set resultDict node_output [write::getValue $results_UN NodeOutput] diff --git a/kratos.gid/apps/PfemFluid/write/ProjectParameters.json b/kratos.gid/apps/PfemFluid/write/ProjectParameters.json index 3030467c0..3dba31f75 100644 --- a/kratos.gid/apps/PfemFluid/write/ProjectParameters.json +++ b/kratos.gid/apps/PfemFluid/write/ProjectParameters.json @@ -156,7 +156,7 @@ }, "file_label" : "step", "output_control_type" : "step", - "output_frequency" : 1.0, + "output_interval" : 1.0, "body_output" : true, "node_output" : false, "skin_output" : false, diff --git a/kratos.gid/apps/Solid/write/write.tcl b/kratos.gid/apps/Solid/write/write.tcl index fc2f7bbec..6c87fb3b6 100644 --- a/kratos.gid/apps/Solid/write/write.tcl +++ b/kratos.gid/apps/Solid/write/write.tcl @@ -360,7 +360,7 @@ proc Solid::write::GetDefaultOutputDict { {appid ""} } { set outputCT [write::getValue $results_UN OutputControlType] dict set resultDict output_control_type $outputCT if {$outputCT eq "time"} {set frequency [write::getValue $results_UN OutputDeltaTime]} {set frequency [write::getValue $results_UN OutputDeltaStep]} - dict set resultDict output_frequency $frequency + dict set resultDict output_interval $frequency dict set resultDict node_output [write::getValue $results_UN NodeOutput] diff --git a/kratos.gid/scripts/Writing/WriteProcess.tcl b/kratos.gid/scripts/Writing/WriteProcess.tcl index 80c235b8e..8d8c5a905 100644 --- a/kratos.gid/scripts/Writing/WriteProcess.tcl +++ b/kratos.gid/scripts/Writing/WriteProcess.tcl @@ -24,7 +24,7 @@ proc write::GetRestartProcess { {un ""} {name "" } } { dict set params "restart_file_label" $file_label set output_control [getValue $un RestartControlType] dict set params "output_control_type" $output_control - if {$output_control eq "time"} {dict set params "output_frequency" [getValue $un RestartDeltaTime]} {dict set params "output_frequency" [getValue $un RestartDeltaStep]} + if {$output_control eq "time"} {dict set params "output_interval" [getValue $un RestartDeltaTime]} {dict set params "output_interval" [getValue $un RestartDeltaStep]} set jsonoutput [write::getStringBinaryValue $un json_output] dict set params "json_output" $jsonoutput diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index 35e3e6674..c22842aeb 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -452,7 +452,7 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set outputCT [getValueByXPath $gid_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT if {$outputCT eq "time"} {set frequency [getValueByXPath $gid_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $gid_options_xpath OutputDeltaStep]} - dict set resultDict output_frequency $frequency + dict set resultDict output_interval $frequency dict set resultDict body_output [getValueByXPath $gid_options_xpath BodyOutput] dict set resultDict node_output [getValueByXPath $gid_options_xpath NodeOutput] @@ -498,7 +498,7 @@ proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { 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 resultDict output_frequency $frequency + dict set resultDict output_interval $frequency dict set resultDict file_format [getValueByXPath $vtk_options_xpath VtkFileFormat] dict set resultDict output_precision 7 dict set resultDict output_sub_model_parts "false" From 783e8aef181c8c3dcb85a67581d0a41b58a92c91 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 30 Mar 2020 18:40:17 +0200 Subject: [PATCH 007/556] Adding qsvmsDEM element, MonolithicDEM strategy and a process to assign an exact value to a variable --- kratos.gid/apps/FluidDEM/xml/Conditions.xml | 17 ++++++ kratos.gid/apps/FluidDEM/xml/Coupling.spd | 20 +++---- kratos.gid/apps/FluidDEM/xml/Elements.xml | 45 ++++++++++++++++ kratos.gid/apps/FluidDEM/xml/Processes.xml | 21 +++++++- kratos.gid/apps/FluidDEM/xml/Procs.spd | 6 ++- kratos.gid/apps/FluidDEM/xml/Strategies.xml | 52 +++++++++++++++++++ .../apps/FluidDEM/xml/XmlController.tcl | 14 ++--- 7 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 kratos.gid/apps/FluidDEM/xml/Strategies.xml diff --git a/kratos.gid/apps/FluidDEM/xml/Conditions.xml b/kratos.gid/apps/FluidDEM/xml/Conditions.xml index 0988cdfd4..eeadd833a 100644 --- a/kratos.gid/apps/FluidDEM/xml/Conditions.xml +++ b/kratos.gid/apps/FluidDEM/xml/Conditions.xml @@ -17,4 +17,21 @@ + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/FluidDEM/xml/Coupling.spd b/kratos.gid/apps/FluidDEM/xml/Coupling.spd index b04b7a5dc..3028447ed 100644 --- a/kratos.gid/apps/FluidDEM/xml/Coupling.spd +++ b/kratos.gid/apps/FluidDEM/xml/Coupling.spd @@ -1,19 +1,19 @@ - + - - - - - - - - - + + + + + + + + + diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 71fad0611..677ebc2ee 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -15,4 +15,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/FluidDEM/xml/Processes.xml b/kratos.gid/apps/FluidDEM/xml/Processes.xml index 7c7cc95bb..dafc630b3 100644 --- a/kratos.gid/apps/FluidDEM/xml/Processes.xml +++ b/kratos.gid/apps/FluidDEM/xml/Processes.xml @@ -9,6 +9,25 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file + } --> diff --git a/kratos.gid/apps/FluidDEM/xml/Procs.spd b/kratos.gid/apps/FluidDEM/xml/Procs.spd index e1df4f914..79989eea3 100644 --- a/kratos.gid/apps/FluidDEM/xml/Procs.spd +++ b/kratos.gid/apps/FluidDEM/xml/Procs.spd @@ -51,5 +51,9 @@ return [DEM::xml::ProcGetStateBoundingBoxParams $domNode $args] ]]> - + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Strategies.xml b/kratos.gid/apps/FluidDEM/xml/Strategies.xml new file mode 100644 index 000000000..858c72121 --- /dev/null +++ b/kratos.gid/apps/FluidDEM/xml/Strategies.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl index 4b0a0d813..c66e57866 100644 --- a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl @@ -12,6 +12,7 @@ proc FluidDEM::xml::Init { } { Model::getElements Elements.xml Model::getProcesses Processes.xml Model::getConditions Conditions.xml + Model::getSolutionStrategies Strategies.xml # Get the inlet condition set inlet_cnd [Model::getCondition "Inlet"] @@ -24,9 +25,9 @@ proc FluidDEM::xml::Init { } { # Change the inlet injector element type set inlet_element_type_param [$inlet_process getInputPn InletElementType] if {$inlet_element_type_param ne ""} { - $inlet_element_type_param setValues "SphericSwimmingParticle3D" - $inlet_element_type_param setPValues "Spheres" - $inlet_element_type_param setDv "SphericSwimmingParticle3D" + $inlet_element_type_param setValues "SphericSwimmingParticle3D" + $inlet_element_type_param setPValues "Spheres" + $inlet_element_type_param setDv "SphericSwimmingParticle3D" } @@ -66,7 +67,8 @@ proc FluidDEM::xml::CustomTree { args } { # spdAux::SetValueOnTreeItem state hidden DEMResults GiDOptions # spdAux::SetValueOnTreeItem state hidden DEMResults PartElem - + spdAux::SetValueOnTreeItem state normal FLParts Element + spdAux::SetValueOnTreeItem dict {[GetElements ElementType "Fluid"]} FLParts Element # Remove Fluid things to move them to Common set result_node [$root selectNodes "[spdAux::getRoute FLSolutionParameters]/container\[@n = 'ParallelType'\]"] @@ -78,7 +80,7 @@ proc FluidDEM::xml::CustomTree { args } { # set result_node [$root selectNodes "[spdAux::getRoute FLResults]/container\[@n = 'GiDOptions'\]"] # if { $result_node ne "" } {$result_node delete} - spdAux::SetValueOnTreeItem state disabled FLSolStrat + spdAux::SetValueOnTreeItem state enabled FLSolStrat spdAux::SetValueOnTreeItem state disabled FLScheme spdAux::SetValueOnTreeItem state hidden FLResults FileLabel spdAux::SetValueOnTreeItem state hidden FLResults OutputControlType @@ -95,7 +97,7 @@ proc FluidDEM::xml::ProcGetHydrodynamicLaws {domNode args} { set names [list ] set dem_hydrodynamic_law_nodes [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "DEMFluidHydrodynamicLaw"]/blockdata"] foreach hydro_law $dem_hydrodynamic_law_nodes { - lappend names [$hydro_law @name] + lappend names [$hydro_law @name] } set values [join $names ","] From 088278653cf0a1dff25a0769e3d86db3a3f7244d Mon Sep 17 00:00:00 2001 From: Javi G Date: Fri, 3 Apr 2020 18:00:24 +0200 Subject: [PATCH 008/556] get element write name --- .../apps/FluidDEM/write/writeProjectParameters.tcl | 13 +++++++++++++ kratos.gid/apps/FluidDEM/xml/Elements.xml | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl index 800f53e43..d066d5b09 100644 --- a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl @@ -230,11 +230,24 @@ proc ::FluidDEM::write::getParametersDict { } { dict set project_parameters_dict dem_parameters $FluidDEM::write::dem_project_parameters dict set project_parameters_dict dem_parameters "solver_settings" "strategy" "swimming_sphere_strategy" dict set project_parameters_dict fluid_parameters $FluidDEM::write::fluid_project_parameters + + # Update the fluid element + set element_name [FluidDEM::write::GetCurrentFluidElementName] + dict set project_parameters_dict fluid_parameters calculation element qsvmsDEM + # set FluidDEM::write::general_project_parameters [getParametersDict] # dict set project_parameters_dict $FluidDEM::write::general_project_parameters return $project_parameters_dict } +proc FluidDEM::write::GetCurrentFluidElementName { } { + set element [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "FLParts"]/group"] + set element [Model::getElement [$element @n]] + set element_name [$element getAttribute WriteName] + if {$element_name eq ""} {set element_name "vms"} + return $element_name +} + proc FluidDEM::write::GetHydrodynamicLawsDict { } { set laws [dict create ] set dem_hydrodynamic_law_nodes [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "DEMFluidHydrodynamicLaw"]/blockdata"] diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 677ebc2ee..655ee8350 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -16,7 +16,7 @@ - + From ae19c492fe8bc4f4ece26506bcb53cdbf00c6aa9 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 16 Apr 2020 09:53:39 +0200 Subject: [PATCH 009/556] Changes to write the required element in ProjectParameters --- kratos.gid/apps/FluidDEM/write/write.tcl | 2 +- .../apps/FluidDEM/write/writeProjectParameters.tcl | 9 +++++---- kratos.gid/apps/FluidDEM/xml/Elements.xml | 11 +++++------ kratos.gid/apps/FluidDEM/xml/ExactConditions.spd | 3 +++ kratos.gid/apps/FluidDEM/xml/Main.spd | 1 + kratos.gid/apps/FluidDEM/xml/Processes.xml | 13 ++++++------- 6 files changed, 21 insertions(+), 18 deletions(-) create mode 100644 kratos.gid/apps/FluidDEM/xml/ExactConditions.spd diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index aad82bc61..db3d6200d 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -32,7 +32,7 @@ proc FluidDEM::write::writeModelPartEvent { } { } proc FluidDEM::write::writeCustomFilesEvent { } { - Fluid::write::WriteMaterialsFile False + Fluid::write::WriteMaterialsFile True SetAttribute main_script_file "MainKratos.py" set orig_name [GetAttribute main_script_file] write::CopyFileIntoModel [file join "python" $orig_name ] diff --git a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl index d066d5b09..00d7592a3 100644 --- a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl @@ -233,7 +233,7 @@ proc ::FluidDEM::write::getParametersDict { } { # Update the fluid element set element_name [FluidDEM::write::GetCurrentFluidElementName] - dict set project_parameters_dict fluid_parameters calculation element qsvmsDEM + dict set project_parameters_dict fluid_parameters solver_settings formulation "element_type" {*}[FluidDEM::write::GetCurrentFluidElementName] # set FluidDEM::write::general_project_parameters [getParametersDict] # dict set project_parameters_dict $FluidDEM::write::general_project_parameters @@ -241,9 +241,10 @@ proc ::FluidDEM::write::getParametersDict { } { } proc FluidDEM::write::GetCurrentFluidElementName { } { - set element [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "FLParts"]/group"] - set element [Model::getElement [$element @n]] - set element_name [$element getAttribute WriteName] + set gnode [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "FLParts"]/group"] + set element [write::getValueByNode [$gnode selectNodes "./value\[@n = 'Element'\]"]] + set element [::Model::getElement $element] + set element_name [$element getAttribute "WriteName"] if {$element_name eq ""} {set element_name "vms"} return $element_name } diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 655ee8350..55355771e 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -2,7 +2,7 @@ - + @@ -16,11 +16,11 @@ - + - + @@ -36,12 +36,11 @@ - + - - + diff --git a/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd b/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd new file mode 100644 index 000000000..e2b6440af --- /dev/null +++ b/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Main.spd b/kratos.gid/apps/FluidDEM/xml/Main.spd index 3226dbed1..cae8a7119 100644 --- a/kratos.gid/apps/FluidDEM/xml/Main.spd +++ b/kratos.gid/apps/FluidDEM/xml/Main.spd @@ -5,6 +5,7 @@ + diff --git a/kratos.gid/apps/FluidDEM/xml/Processes.xml b/kratos.gid/apps/FluidDEM/xml/Processes.xml index dafc630b3..72cbb44e5 100644 --- a/kratos.gid/apps/FluidDEM/xml/Processes.xml +++ b/kratos.gid/apps/FluidDEM/xml/Processes.xml @@ -13,13 +13,12 @@ - - - - - - - + + + + + + From 254597d085be8f86cfb243acc1f8b7fc0817fd36 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Apr 2020 17:28:11 +0200 Subject: [PATCH 010/556] Select the coupling strategy when the coupling element is chosen and being able to change the drag law --- kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl | 7 +++++-- kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl index 00d7592a3..56bb1db20 100644 --- a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl @@ -232,8 +232,11 @@ proc ::FluidDEM::write::getParametersDict { } { dict set project_parameters_dict fluid_parameters $FluidDEM::write::fluid_project_parameters # Update the fluid element - set element_name [FluidDEM::write::GetCurrentFluidElementName] - dict set project_parameters_dict fluid_parameters solver_settings formulation "element_type" {*}[FluidDEM::write::GetCurrentFluidElementName] + set element_name {*}[FluidDEM::write::GetCurrentFluidElementName] + dict set project_parameters_dict fluid_parameters solver_settings formulation element_type $element_name + if { $element_name eq "qsvmsDEM" } { + dict set project_parameters_dict fluid_parameters solver_settings solver_type "MonolithicDEM" + } # set FluidDEM::write::general_project_parameters [getParametersDict] # dict set project_parameters_dict $FluidDEM::write::general_project_parameters diff --git a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd index d44d3cca9..99908556d 100644 --- a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd +++ b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd @@ -27,7 +27,7 @@ - + From a337afed8047b5a67c0a08a9c0368328b6f9fbdb Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 17 Apr 2020 17:37:45 +0200 Subject: [PATCH 011/556] Minor --- kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd index 99908556d..fb1011f8f 100644 --- a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd +++ b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd @@ -27,7 +27,7 @@ - + From b8793853e624a9c939d675b1c63acae132a109bd Mon Sep 17 00:00:00 2001 From: Franci Date: Mon, 4 May 2020 13:20:30 +0200 Subject: [PATCH 012/556] PfemFLuid bugFix --- kratos.gid/apps/PfemFluid/xml/Elements.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/Elements.xml b/kratos.gid/apps/PfemFluid/xml/Elements.xml index 8d3a2ad49..4c0044f66 100644 --- a/kratos.gid/apps/PfemFluid/xml/Elements.xml +++ b/kratos.gid/apps/PfemFluid/xml/Elements.xml @@ -300,7 +300,7 @@ - + @@ -330,7 +330,7 @@ - + From 33541e2823ff5f24a9376c891dcb896bd72204b9 Mon Sep 17 00:00:00 2001 From: rubenzorrilla Date: Tue, 5 May 2020 19:40:32 +0200 Subject: [PATCH 013/556] Add monolithic time scheme selection --- .../Fluid/write/writeProjectParameters.tcl | 5 +++++ kratos.gid/apps/Fluid/xml/AnalysisType.spd | 2 +- kratos.gid/apps/Fluid/xml/Strategies.xml | 19 ++++++++++++------- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 471faaac9..012f791d2 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -191,6 +191,11 @@ proc Fluid::write::getSolverSettingsDict { } { # No skin parts dict set solverSettingsDict no_skin_parts [getNoSkinConditionMeshId] + # Time scheme settings + if {$currentStrategyId eq "Monolithic"} { + dict set solverSettingsDict time_scheme [write::getValue FLScheme] + } + # Time stepping settings set timeSteppingDict [dict create] set automaticDeltaTime [write::getValue FLTimeParameters AutomaticDeltaTime] diff --git a/kratos.gid/apps/Fluid/xml/AnalysisType.spd b/kratos.gid/apps/Fluid/xml/AnalysisType.spd index 8d1acb277..e6964a993 100644 --- a/kratos.gid/apps/Fluid/xml/AnalysisType.spd +++ b/kratos.gid/apps/Fluid/xml/AnalysisType.spd @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/xml/Strategies.xml b/kratos.gid/apps/Fluid/xml/Strategies.xml index 90c81075e..fa9de9e63 100644 --- a/kratos.gid/apps/Fluid/xml/Strategies.xml +++ b/kratos.gid/apps/Fluid/xml/Strategies.xml @@ -40,13 +40,18 @@ - - - - - - - + + + + + + + + + + + + From 87ebf5be378aa7c33449d23c7b1489e41b0c7100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Wed, 6 May 2020 18:52:36 +0200 Subject: [PATCH 014/556] Update kratos.gid/apps/Fluid/xml/AnalysisType.spd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Javi Gárate --- kratos.gid/apps/Fluid/xml/AnalysisType.spd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Fluid/xml/AnalysisType.spd b/kratos.gid/apps/Fluid/xml/AnalysisType.spd index e6964a993..9fc90a8ef 100644 --- a/kratos.gid/apps/Fluid/xml/AnalysisType.spd +++ b/kratos.gid/apps/Fluid/xml/AnalysisType.spd @@ -2,6 +2,7 @@ - + + - \ No newline at end of file + From 633163a79378585116a255b8ed7a2b080b2c70c9 Mon Sep 17 00:00:00 2001 From: escolano Date: Tue, 19 May 2020 11:42:58 +0200 Subject: [PATCH 015/556] do not save preferences or logs starting with flag gid.exe -c (that specify read only an alternative file) update use of deprecated command GiveGidDefaultsFile -> GiD_GetUserSettingsFilename -create_folders --- kratos.gid/scripts/Logs.tcl | 11 ++++++++--- kratos.gid/scripts/Utils.tcl | 30 +++++++++++++++++------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 0fb8be7e9..9adda8a0e 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -5,7 +5,8 @@ proc Kratos::GetLogFilePath { } { variable kratos_private - set dir_name [file dirname [GiveGidDefaultsFile]] + set gid_defaults [GiD_GetUserSettingsFilename -create_folders] + set dir_name [file dirname $gid_defaults] set file_name $kratos_private(LogFilename) if {$file_name eq ""} {} if { $::tcl_platform(platform) == "windows" } { @@ -63,5 +64,9 @@ proc Kratos::FlushLog { } { } -Kratos::InitLog -Kratos::FlushLog +#do not save preferences starting with flag gid.exe -c (that specify read only an alternative file) +if { [GiD_Set SaveGidDefaults] } { + Kratos::InitLog + Kratos::FlushLog +} + diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index e763abe46..8e8a53f85 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -117,7 +117,8 @@ proc Kratos::LoadProblemtypeLibraries {} { proc Kratos::GiveKratosDefaultsFile {} { variable kratos_private - set dir_name [file dirname [GiveGidDefaultsFile]] + set gid_defaults [GiD_GetUserSettingsFilename -create_folders] + set dir_name [file dirname $gid_defaults] set file_name $kratos_private(Name)$kratos_private(Version).ini if { $::tcl_platform(platform) == "windows" } { return [file join $dir_name $file_name] @@ -146,19 +147,22 @@ proc Kratos::GetPreferencesFilePath { } { } proc Kratos::RegisterEnvironment { } { - variable kratos_private - set vars_to_save [list DevMode echo_level mdpa_format] - set preferences [dict create] - foreach v $vars_to_save { - if {[info exists kratos_private($v)]} { - dict set preferences $v $kratos_private($v) + #do not save preferences starting with flag gid.exe -c (that specify read only an alternative file) + if { [GiD_Set SaveGidDefaults] } { + variable kratos_private + set vars_to_save [list DevMode echo_level mdpa_format] + set preferences [dict create] + foreach v $vars_to_save { + if {[info exists kratos_private($v)]} { + dict set preferences $v $kratos_private($v) + } + } + + if {[llength [dict keys $preferences]] > 0} { + set fp [open [Kratos::GetPreferencesFilePath] w] + if {[catch {set data [puts $fp [write::tcl2json $preferences]]} ]} {W "Problems saving user prefecences"; W $data} + close $fp } - } - - if {[llength [dict keys $preferences]] > 0} { - set fp [open [Kratos::GetPreferencesFilePath] w] - if {[catch {set data [puts $fp [write::tcl2json $preferences]]} ]} {W "Problems saving user prefecences"; W $data} - close $fp } } From e9d0c4a8180262fcfae32bb59921d9ac8a8fdbe9 Mon Sep 17 00:00:00 2001 From: Javi G Date: Thu, 21 May 2020 18:10:14 +0200 Subject: [PATCH 016/556] We'll keep 14.1.2d as min required version --- kratos.gid/apps/Dam/examples/examples.tcl | 2 +- kratos.gid/kratos.tcl | 2 +- kratos.gid/scripts/Deprecated.tcl | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Dam/examples/examples.tcl b/kratos.gid/apps/Dam/examples/examples.tcl index 5e4859822..7f9e4ac53 100644 --- a/kratos.gid/apps/Dam/examples/examples.tcl +++ b/kratos.gid/apps/Dam/examples/examples.tcl @@ -11,7 +11,7 @@ proc Dam::examples::Init { } { } proc ::Dam::examples::ThermoMechaDam { } { - W $::Model::SpatialDimension + #W $::Model::SpatialDimension if {$::Model::SpatialDimension eq "2D"} { ::Dam::examples::ThermoMechaDam2D } { diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 6709fcfd5..b5bfe45e5 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -171,7 +171,7 @@ proc Kratos::LoadCommonScripts { } { uplevel #0 [list source [file join $kratos_private(Path) scripts Writing $filename]] } # Common scripts - foreach filename {Utils.tcl Logs.tcl Applications.tcl spdAuxiliar.tcl Menus.tcl Deprecated.tcl} { + foreach filename {Utils.tcl Applications.tcl spdAuxiliar.tcl Menus.tcl Deprecated.tcl Logs.tcl} { uplevel #0 [list source [file join $kratos_private(Path) scripts $filename]] } # Common controllers diff --git a/kratos.gid/scripts/Deprecated.tcl b/kratos.gid/scripts/Deprecated.tcl index 802cb7bfe..d342e72f3 100644 --- a/kratos.gid/scripts/Deprecated.tcl +++ b/kratos.gid/scripts/Deprecated.tcl @@ -102,4 +102,16 @@ if {[GidUtils::VersionCmp "14.1.4d"] <0} { } } } +} + + +# Deprecation date: 21/05/2020 +# Estimated deletion version: next release +# Message: Use of deprecated gid call +if {[GidUtils::VersionCmp "14.1.4d"] <0} { + + proc GiD_GetUserSettingsFilename {args} { + return [GiveGidDefaultsFile] + } + } \ No newline at end of file From 6700692e09c1a8a7f3a6a9ae7e5dc5f4dd86d6d5 Mon Sep 17 00:00:00 2001 From: AFranci Date: Tue, 9 Jun 2020 16:38:21 +0200 Subject: [PATCH 017/556] new interface setting for FSI problem --- .../apps/PfemFluid/examples/DamBreakFSI.tcl | 12 ++-- kratos.gid/apps/PfemFluid/xml/Bodies.spd | 1 + kratos.gid/apps/PfemFluid/xml/Elements.xml | 58 +++++++++++++++++++ .../apps/PfemFluid/xml/XmlController.tcl | 14 +++-- 4 files changed, 75 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl index e7cda944a..f93a85d7b 100644 --- a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl +++ b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl @@ -75,7 +75,7 @@ proc PfemFluid::examples::AssignGroupsDamBreakFSIGeometry2D {args} { GiD_EntitiesGroups assign Fluid surfaces 1 GiD_Groups create Solid - GiD_Groups edit color Solid "#26d1a8ff" + GiD_Groups edit color Solid "#3b3b3bff" GiD_EntitiesGroups assign Solid surfaces 2 GiD_Groups create Interface @@ -83,7 +83,7 @@ proc PfemFluid::examples::AssignGroupsDamBreakFSIGeometry2D {args} { GiD_EntitiesGroups assign Interface lines {5 6 7} GiD_Groups create Rigid_Walls - GiD_Groups edit color Rigid_Walls "#e0210fff" + GiD_Groups edit color Rigid_Walls "#42eb71ff" GiD_EntitiesGroups assign Rigid_Walls lines {1 4 9 10 11 12 13} } @@ -109,7 +109,7 @@ proc PfemFluid::examples::TreeAssignationDamBreakFSI2D {args} { gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name SolidBody} gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name RigidInterfaceBody} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name InterfaceBody} gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[5\]" {name RigidWallsBody} @@ -132,9 +132,9 @@ proc PfemFluid::examples::TreeAssignationDamBreakFSI2D {args} { spdAux::SetValuesOnBaseNode $solidNode $props # Rigid Parts - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidInterfaceBody'\]/value\[@n='BodyType'\]" {v Rigid} - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidInterfaceBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} - set interface_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidInterfaceBody'\]/condition\[@n='Parts'\]" + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='BodyType'\]" {v Interface} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set interface_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/condition\[@n='Parts'\]" set interfaceNode [customlib::AddConditionGroupOnXPath $interface_part_xpath Interface] $interfaceNode setAttribute ov line diff --git a/kratos.gid/apps/PfemFluid/xml/Bodies.spd b/kratos.gid/apps/PfemFluid/xml/Bodies.spd index 2424d7b2f..e2aeb4361 100644 --- a/kratos.gid/apps/PfemFluid/xml/Bodies.spd +++ b/kratos.gid/apps/PfemFluid/xml/Bodies.spd @@ -3,6 +3,7 @@ + diff --git a/kratos.gid/apps/PfemFluid/xml/Elements.xml b/kratos.gid/apps/PfemFluid/xml/Elements.xml index 4c0044f66..4b2f27090 100644 --- a/kratos.gid/apps/PfemFluid/xml/Elements.xml +++ b/kratos.gid/apps/PfemFluid/xml/Elements.xml @@ -457,5 +457,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index 9965351aa..cb0216beb 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -264,8 +264,8 @@ proc PfemFluid::xml::ProcGetBodyTypeValues {domNode args} { if {$domain_type_value eq "Fluids"} { set values "Fluid,Rigid" } - if {$domain_type_value eq "Coupled"} { - set values "Solid,Fluid,Rigid" + if {$domain_type_value eq "FSI"} { + set values "Fluid,Solid,Rigid,Interface" } if {$domain_type_value eq "Solids"} { set values "Solid,Rigid" @@ -284,7 +284,7 @@ proc PfemFluid::xml::ProcGetSolutionStrategiesPFEM {domNode args} { set filter [list Solid Pfem] if {$domainType eq "Solids"} {set filter "Solid"} if {$domainType eq "Fluids"} {set filter "Pfem"} - if {$domainType eq "Coupled"} {set filter "Pfem"} + if {$domainType eq "FSI"} {set filter "Pfem"} foreach ss $Sols { if {[$ss getAttribute "App"] in $filter} { @@ -335,6 +335,12 @@ proc PfemFluid::xml::ProcPartsOverWhat {domNode args} { } else { return "line,surface" } + } elseif { $BodyType eq "Interface"} { + if {$::Model::SpatialDimension eq "3D"} { + return "surface" + } else { + return "line" + } } else { return "point,line,surface,volume" } @@ -369,7 +375,7 @@ proc PfemFluid::xml::ProcGetRigidBodiesValues {domNode args} { foreach body_node [$root selectNodes $xp1] { foreach subnode [$body_node childNodes] { if { [$subnode getAttribute n] eq "BodyType" } { - if { [$subnode getAttribute v] eq "Rigid" } { + if { [$subnode getAttribute v] eq "Rigid" || [$subnode getAttribute v] eq "Interface"} { lappend bodies [$body_node @name] break } From 2c3f66299fcb59f637ec2d649ce1d460333a6764 Mon Sep 17 00:00:00 2001 From: AFranci Date: Wed, 10 Jun 2020 09:59:53 +0200 Subject: [PATCH 018/556] New names and temperature-dependent laws hidden --- .../apps/PfemFluid/xml/ConstitutiveLaws.xml | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml index 379e3aff1..6dd164488 100644 --- a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -78,8 +78,8 @@ - - + - + @@ -136,7 +136,7 @@ - + @@ -146,8 +146,8 @@ - - + From 0581edac546499dfa5015bca6266552403f89b7b Mon Sep 17 00:00:00 2001 From: AFranci Date: Wed, 10 Jun 2020 13:52:14 +0200 Subject: [PATCH 019/556] Frictional element --- .../apps/PfemFluid/xml/ConstitutiveLaws.xml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml index 6dd164488..1ab7b8193 100644 --- a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml @@ -48,6 +48,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From 217fe6babbfe8406d76075c5750d6c678f8e1a46 Mon Sep 17 00:00:00 2001 From: Javi G Date: Mon, 15 Jun 2020 21:56:34 +0200 Subject: [PATCH 020/556] Save files on save event --- kratos.gid/kratos.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index b5bfe45e5..f38669ab2 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -473,6 +473,7 @@ proc Kratos::Event_SaveModelSPD { filespd } { # User files (in file selectors) copied into the model (if required) FileSelector::CopyFilesIntoModel [file dirname $filespd] + } proc Kratos::Event_ChangedLanguage { newlan } { From da4270dc957ddb26fc8bc716ecf7b76dd079836b Mon Sep 17 00:00:00 2001 From: Salva Latorre Date: Tue, 16 Jun 2020 16:09:59 +0200 Subject: [PATCH 021/556] Bugfix. Some parameters were missing both in the tree and the mdpa --- .../apps/CDEM/write/writeMDPA_Parts.tcl | 4 ++- .../apps/CDEM/xml/ConstitutiveLawsC.xml | 32 ++++++++++--------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index c82581f89..79f6ce226 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -146,7 +146,9 @@ proc CDEM::write::writeMaterialsParts { } { SHEAR_ENERGY_COEF \ LOOSE_MATERIAL_YOUNG_MODULUS \ FRACTURE_ENERGY \ - INTERNAL_FRICTION_ANGLE] + INTERNAL_FRICTION_ANGLE \ + ROTATIONAL_MOMENT_COEFFICIENT \ + PARTICLE_COHESION] foreach group [dict keys $partsProperties] { write::WriteString "Begin Properties [dict get $partsProperties $group MID]" diff --git a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml index d6641b6f3..f5f1d3f85 100644 --- a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml +++ b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml @@ -1,10 +1,10 @@ - + - - + + @@ -12,8 +12,8 @@ - - + + @@ -21,21 +21,21 @@ - + - + - + @@ -43,7 +43,7 @@ - + @@ -51,8 +51,8 @@ - - + + @@ -61,14 +61,16 @@ - + - - + + + + @@ -83,4 +85,4 @@ --> - \ No newline at end of file + From 5911abe01d6309453bb0821fa4ab0b2ee5f2995d Mon Sep 17 00:00:00 2001 From: Miguel Angel Celigueta Date: Tue, 16 Jun 2020 19:12:39 +0200 Subject: [PATCH 022/556] Change 3D name also --- kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml index f5f1d3f85..c83d59a50 100644 --- a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml +++ b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml @@ -49,7 +49,7 @@ - + From ff3e5d3685636c69e2e648629514df278f5543ff Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 30 Jun 2020 14:52:00 +0200 Subject: [PATCH 023/556] Including framework for benchmark processes --- kratos.gid/apps/FluidDEM/xml/Conditions.xml | 14 ++++++++------ kratos.gid/apps/FluidDEM/xml/ExactConditions.spd | 3 --- kratos.gid/apps/FluidDEM/xml/Main.spd | 2 +- .../apps/FluidDEM/xml/ManufacturedConditions.spd | 4 ++++ kratos.gid/apps/FluidDEM/xml/Processes.xml | 1 - 5 files changed, 13 insertions(+), 11 deletions(-) delete mode 100644 kratos.gid/apps/FluidDEM/xml/ExactConditions.spd create mode 100644 kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd diff --git a/kratos.gid/apps/FluidDEM/xml/Conditions.xml b/kratos.gid/apps/FluidDEM/xml/Conditions.xml index eeadd833a..be52e9eca 100644 --- a/kratos.gid/apps/FluidDEM/xml/Conditions.xml +++ b/kratos.gid/apps/FluidDEM/xml/Conditions.xml @@ -17,14 +17,16 @@ + - + - - - - - + + + + + + diff --git a/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd b/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd deleted file mode 100644 index e2b6440af..000000000 --- a/kratos.gid/apps/FluidDEM/xml/ExactConditions.spd +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Main.spd b/kratos.gid/apps/FluidDEM/xml/Main.spd index cae8a7119..2395027aa 100644 --- a/kratos.gid/apps/FluidDEM/xml/Main.spd +++ b/kratos.gid/apps/FluidDEM/xml/Main.spd @@ -5,7 +5,7 @@ - + diff --git a/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd new file mode 100644 index 000000000..048ff6e73 --- /dev/null +++ b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Processes.xml b/kratos.gid/apps/FluidDEM/xml/Processes.xml index 72cbb44e5..58f55fd9a 100644 --- a/kratos.gid/apps/FluidDEM/xml/Processes.xml +++ b/kratos.gid/apps/FluidDEM/xml/Processes.xml @@ -13,7 +13,6 @@ - From 0ab26bef463ad5b4e39844858143933172cd0116 Mon Sep 17 00:00:00 2001 From: Guillermo Casas Date: Wed, 1 Jul 2020 09:07:10 +0200 Subject: [PATCH 024/556] IS_GHOST value from "true"/"false" to 1/0 --- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index c56640089..8dc802cdb 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -405,7 +405,11 @@ proc DEM::write::writeWallConditionMeshes { } { #Hardcoded set is_ghost [write::getValueByNode [$group_node selectNodes "./value\[@n='IsGhost'\]"]] - write::WriteString " IS_GHOST $is_ghost" + if {$is_ghost == "true"} { + write::WriteString " IS_GHOST 1" + } else { + write::WriteString " IS_GHOST 0" + } write::WriteString " IDENTIFIER [write::transformGroupName $group]" DefineFEMExtraConditions $group_node From 2cf9a33a87d415e210c009cf32e7371ade083d16 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 1 Jul 2020 19:03:33 +0200 Subject: [PATCH 025/556] more events called --- kratos.gid/kratos.tcl | 93 ++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 6709fcfd5..dde6112ed 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -5,7 +5,7 @@ namespace eval Kratos { variable kratos_private - + variable must_write_calc_data variable must_exist_calc_data } @@ -16,12 +16,12 @@ if {[GidUtils::VersionCmp "14.0.1"] >=0 } { # GiD Developer versions proc GiD_Event_InitProblemtype { dir } { Kratos::Event_InitProblemtype $dir - } + } } { # GiD Official versions proc InitGIDProject { dir } { Kratos::Event_InitProblemtype $dir - } + } } } { # GiD versions previous to 14 are no longer allowed @@ -46,56 +46,57 @@ proc Kratos::Events { } { proc Kratos::RegisterGiDEvents { } { # Unregister previous events GiD_UnRegisterEvents PROBLEMTYPE Kratos - + # Init / Load # After new gid project #GiD_RegisterEvent GiD_Event_InitProblemtype Kratos::Event_InitProblemtype PROBLEMTYPE Kratos GiD_RegisterEvent GiD_Event_LoadModelSPD Kratos::Event_LoadModelSPD PROBLEMTYPE Kratos - + # Groups / Layers GiD_RegisterEvent GiD_Event_AfterRenameGroup Kratos::Event_AfterRenameGroup PROBLEMTYPE Kratos - + # Mesh GiD_RegisterEvent GiD_Event_BeforeMeshGeneration Kratos::Event_BeforeMeshGeneration PROBLEMTYPE Kratos + GiD_RegisterEvent GiD_Event_MeshProgress Kratos::Event_MeshProgress PROBLEMTYPE Kratos GiD_RegisterEvent GiD_Event_AfterMeshGeneration Kratos::Event_AfterMeshGeneration PROBLEMTYPE Kratos - + # Write - Calculation GiD_RegisterEvent GiD_Event_AfterWriteCalculationFile Kratos::Event_AfterWriteCalculationFile PROBLEMTYPE Kratos GiD_RegisterEvent GiD_Event_BeforeRunCalculation Kratos::Event_BeforeRunCalculation PROBLEMTYPE Kratos - + # Postprocess GiD_RegisterEvent GiD_Event_InitGIDPostProcess Kratos::Event_InitGIDPostProcess PROBLEMTYPE Kratos GiD_RegisterEvent GiD_Event_EndGIDPostProcess Kratos::Event_EndGIDPostProcess PROBLEMTYPE Kratos - + # Save GiD_RegisterEvent GiD_Event_BeforeSaveGIDProject Kratos::Event_BeforeSaveGIDProject PROBLEMTYPE Kratos GiD_RegisterEvent GiD_Event_SaveModelSPD Kratos::Event_SaveModelSPD PROBLEMTYPE Kratos - + # Extra GiD_RegisterEvent GiD_Event_ChangedLanguage Kratos::Event_ChangedLanguage PROBLEMTYPE Kratos - + # End GiD_RegisterEvent GiD_Event_EndProblemtype Kratos::Event_EndProblemtype PROBLEMTYPE Kratos - + # Preferences window - GiD_RegisterPluginPreferencesProc Kratos::Event_ModifyPreferencesWindow + GiD_RegisterPluginPreferencesProc Kratos::Event_ModifyPreferencesWindow } proc Kratos::Event_InitProblemtype { dir } { variable kratos_private - + # Init Kratos problemtype global vars with default values Kratos::InitGlobalVariables $dir # Load all common tcl files (not the app ones) Kratos::LoadCommonScripts - + # GiD Versions earlier than recommended get a message Kratos::WarnAboutMinimumRecommendedGiDVersion # Register the rest of events Kratos::Events - + # Start the log and register the initial information Kratos::LogInitialData @@ -107,7 +108,7 @@ proc Kratos::Event_InitProblemtype { dir } { # Customize GiD menus to add the Kratos entry Kratos::UpdateMenus - + # Start the spd as new project. Mandatory even if we are opening an old case, because this loads the default spd for the future transform spdAux::StartAsNewProject @@ -121,17 +122,17 @@ proc Kratos::Event_InitProblemtype { dir } { proc Kratos::InitGlobalVariables {dir} { variable kratos_private - + # clean and start private variables array unset -nocomplain kratos_private set kratos_private(Path) $dir - + # This variables allows us to Write only and to run only variable must_write_calc_data set must_write_calc_data 1 variable must_exist_calc_data set must_exist_calc_data 1 - + # User environment (stored for future sessions) # DevMode in preferences window set kratos_private(DevMode) "release" ; #can be dev or release @@ -158,12 +159,12 @@ proc Kratos::InitGlobalVariables {dir} { proc Kratos::LoadCommonScripts { } { variable kratos_private - + # append to auto_path only folders that must include tcl packages (loaded on demand with package require mechanism) if { [lsearch -exact $::auto_path [file join $kratos_private(Path) scripts]] == -1 } { lappend ::auto_path [file join $kratos_private(Path) scripts] } - + # Writing common scripts foreach filename {Writing.tcl WriteHeadings.tcl WriteMaterials.tcl WriteNodes.tcl WriteElements.tcl WriteConditions.tcl WriteConditionsByGiDId.tcl WriteConditionsByUniqueId.tcl @@ -200,10 +201,10 @@ proc Kratos::Event_LoadModelSPD { filespd } { # Need this check for old gid compatibility. Sometimes this event was called by mistake. Kratos::CheckProjectIsNew $filespd - + # If the spd file does not exist, sorry if { ![file exists $filespd] } { WarnWin "Could not find the spd file\n$filespd" ;return } - + #### TRANSFORM SECTION #### # Need transform? Define concepts: Model spd = old version || Problemtype spd = new version || Result of transform == Valid spd # Get PT version @@ -213,11 +214,11 @@ proc Kratos::Event_LoadModelSPD { filespd } { set old_doc [gid_groups_conds::open_XML_file_gzip $filespd] set old_root [$old_doc documentElement] set old_versionData [$old_root @version] - + # Compare the version number if { [package vcompare $versionPT $old_versionData] != 0 } { # If the spd versions are different, transform (no matter which is greater) - + # Do the transform after idle [list Kratos::TransformProblemtype $old_root ${filespd}] @@ -229,7 +230,7 @@ proc Kratos::Event_LoadModelSPD { filespd } { # Refresh the cache customlib::UpdateDocument - + # Load default files (if any) (file selection values store the filepaths in the spd) spdAux::LoadModelFiles @@ -239,6 +240,8 @@ proc Kratos::Event_LoadModelSPD { filespd } { # Reactive the previous app spdAux::reactiveApp + apps::ExecuteOnCurrentApp LoadModelEvent $filespd + # Open the tree spdAux::OpenTree } @@ -276,7 +279,7 @@ proc Kratos::Event_EndProblemtype { } { proc Kratos::RestoreVariables { } { variable kratos_private - + # Restore GiD variables that kratos modified (maybe the mesher...) if {[info exists kratos_private(RestoreVars)]} { foreach {k v} $kratos_private(RestoreVars) { @@ -291,7 +294,7 @@ proc Kratos::AddRestoreVar {varName} { # Add a variable (and value) to the list of variables that will be restored before exiting if {[info exists $varName]} { - set val [set $varName] + set val [set $varName] lappend kratos_private(RestoreVars) $varName $val } } @@ -307,7 +310,7 @@ proc Kratos::LoadWizardFiles { } { proc Kratos::TransformProblemtype {old_dom old_filespd} { # Check if current problemtype allows transforms if {[GiDVersionCmp 14.1.1d] < 0} { W "The minimum GiD version for a transform is '14.1.1d'\n Click Ok to try it anyway (You may lose data)" } - + # set ::Kratos_AskToTransform to 0 to not not ask if transform and old model, and automatically act like ok was pressed (e.g. to automatize in batch) if { ![info exists ::Kratos_AskToTransform] || $::Kratos_AskToTransform } { # Ask the user if it's ready to tranform @@ -323,7 +326,7 @@ proc Kratos::TransformProblemtype {old_dom old_filespd} { set old_activeapp [get_domnode_attribute $old_activeapp_node v] } else { WarnWin "Unable to get the active application in your model" - return "" + return "" } # Get the old dimmension set old_nd [ [$old_dom selectNodes "value\[@n='nDim'\]"] getAttribute v] @@ -333,7 +336,7 @@ proc Kratos::TransformProblemtype {old_dom old_filespd} { # Load the previous files (file selection values store the filepaths in the spd) spdAux::LoadModelFiles $old_dom - + # Refresh the cache customlib::UpdateDocument @@ -342,7 +345,7 @@ proc Kratos::TransformProblemtype {old_dom old_filespd} { # Prepare the new spd (and model) active application apps::setActiveApp $old_activeapp - apps::ExecuteOnCurrentXML CustomTree "" + apps::ExecuteOnCurrentXML CustomTree "" # Call to customlib transform and pray gid_groups_conds::transform_problemtype $old_filespd @@ -357,12 +360,12 @@ proc Kratos::TransformProblemtype {old_dom old_filespd} { proc Kratos::Event_BeforeMeshGeneration {elementsize} { # Prepare things before meshing - + GiD_Process Mescape Meshing MeshCriteria NoMesh Lines 1:end escape escape escape GiD_Process Mescape Meshing MeshCriteria NoMesh Surfaces 1:end escape escape escape GiD_Process Mescape Meshing MeshCriteria NoMesh Volumes 1:end escape escape escape - # We need to mesh every line and surface assigned to a group that appears in the tree + # We need to mesh every line and surface assigned to a group that appears in the tree foreach group [spdAux::GetAppliedGroups] { GiD_Process Mescape Meshing MeshCriteria Mesh Lines {*}[GiD_EntitiesGroups get $group lines] escape escape escape GiD_Process Mescape Meshing MeshCriteria Mesh Surfaces {*}[GiD_EntitiesGroups get $group surfaces] escape escape escape @@ -373,6 +376,11 @@ proc Kratos::Event_BeforeMeshGeneration {elementsize} { return $ret } +proc Kratos::Event_MeshProgress { total_percent partial_percents_0 partial_percents_1 partial_percents_2 partial_percents_3 n_nodes n_elems } { + # Maybe the current application needs to do some extra job + apps::ExecuteOnCurrentApp MeshProgress $total_percent $partial_percents_0 $partial_percents_1 $partial_percents_2 $partial_percents_3 $n_nodes n_elems +} + proc Kratos::Event_AfterMeshGeneration {fail} { # Maybe the current application needs to do some extra job apps::ExecuteOnCurrentApp AfterMeshGeneration $fail @@ -405,7 +413,7 @@ proc Kratos::Event_EndGIDPostProcess {} { proc Kratos::Event_BeforeRunCalculation { batfilename basename dir problemtypedir gidexe args } { # Let's launch the Kratos rocket! set run 1 - + catch { # If the user selected MPI, stop it! set paralleltype [write::getValue ParallelType] @@ -422,7 +430,7 @@ proc Kratos::Event_AfterWriteCalculationFile { filename errorflag } { if {$Kratos::must_write_calc_data} { set errcode [Kratos::WriteCalculationFilesEvent $filename] if {$errcode} {return "-cancel-"} - } + } } proc Kratos::WriteCalculationFilesEvent { {filename ""} } { @@ -441,10 +449,10 @@ proc Kratos::WriteCalculationFilesEvent { {filename ""} } { # Start the write configuration clean write::Init - + # Start the writing process set errcode [::write::writeEvent $filename] - + # Kindly inform the user if {$errcode} { ::GidUtils::SetWarnLine "Error writing mdpa or json" @@ -457,7 +465,7 @@ proc Kratos::WriteCalculationFilesEvent { {filename ""} } { proc Kratos::Event_BeforeSaveGIDProject { modelname} { # There are some restrictions in the filenames set fail [::Kratos::CheckValidProjectName $modelname] - + if {$fail} { W [= "Wrong project name. Avoid boolean and numeric names."] return "-cancel-" @@ -473,6 +481,9 @@ proc Kratos::Event_SaveModelSPD { filespd } { # User files (in file selectors) copied into the model (if required) FileSelector::CopyFilesIntoModel [file dirname $filespd] + + # Let the current app implement it's Save event + apps::ExecuteOnCurrentApp AfterSaveModel $filespd } proc Kratos::Event_ChangedLanguage { newlan } { @@ -488,7 +499,7 @@ proc Kratos::Quicktest {example_app example_dim example_cmd} { # We can only test examples from the Examples app apps::setActiveApp Examples - + # So launch the example ::Examples::LaunchExample $example_app $example_dim $example_cmd From a65c6d3a6195b8a0d88b32925742d755fe5212ed Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Jul 2020 20:15:37 +0200 Subject: [PATCH 026/556] Tired of old bugs... Version 14.1.7 is dated on novemeber 2019 --- kratos.gid/kratos.xml | 2 +- kratos.gid/scripts/Deprecated.tcl | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/kratos.gid/kratos.xml b/kratos.gid/kratos.xml index 33d28da6c..3a762ac8f 100644 --- a/kratos.gid/kratos.xml +++ b/kratos.gid/kratos.xml @@ -5,7 +5,7 @@ Kratos 7.1.6 - 14.1.2d + 14.1.7d 0 1 images/ImageFileBrowser.gif diff --git a/kratos.gid/scripts/Deprecated.tcl b/kratos.gid/scripts/Deprecated.tcl index d342e72f3..17c5482b3 100644 --- a/kratos.gid/scripts/Deprecated.tcl +++ b/kratos.gid/scripts/Deprecated.tcl @@ -104,14 +104,3 @@ if {[GidUtils::VersionCmp "14.1.4d"] <0} { } } - -# Deprecation date: 21/05/2020 -# Estimated deletion version: next release -# Message: Use of deprecated gid call -if {[GidUtils::VersionCmp "14.1.4d"] <0} { - - proc GiD_GetUserSettingsFilename {args} { - return [GiveGidDefaultsFile] - } - -} \ No newline at end of file From e03e88f47f40d3be5d3ff440eb466bf76fca3ae4 Mon Sep 17 00:00:00 2001 From: Guillermo Casas Date: Fri, 3 Jul 2020 18:15:46 +0200 Subject: [PATCH 027/556] Fixing several problems with launch --- .../apps/CDEM/write/writeMDPA_Walls.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 703 +++++++++--------- kratos.gid/apps/DEM/xml/Conditions.xml | 9 + kratos.gid/apps/DEM/xml/Processes.xml | 128 ++++ kratos.gid/apps/FluidDEM/python/MainKratos.py | 8 +- 5 files changed, 512 insertions(+), 338 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl index 53762efca..0f0bc09ad 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl @@ -6,7 +6,7 @@ proc DEM::write::WriteMDPAWalls { } { set wall_properties [WriteWallProperties] # Nodal coordinates (only for Walls ) - write::writeNodalCoordinatesOnGroups [DEM::write::GetWallsGroups] + write::writeNodalCoordinatesOnGroups [DEM::write::GetRigidWallsGroups] write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] # Nodal conditions and conditions diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 8dc802cdb..06bc4fc4e 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -6,12 +6,12 @@ proc DEM::write::WriteMDPAWalls { } { set wall_properties [WriteWallProperties] # Nodal coordinates (only for Walls ) - write::writeNodalCoordinatesOnGroups [GetWallsGroups] + write::writeNodalCoordinatesOnGroups [GetRigidWallsGroups] write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] # Nodal conditions and conditions writeConditions $wall_properties - + writePhantomConditions $wall_properties # SubmodelParts writeWallConditionMeshes @@ -32,51 +32,51 @@ proc DEM::write::WriteWallProperties { } { #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" set i $DEM::write::last_property_id foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - write::WriteString "Begin Properties $i" - #foreach {prop obj} [$cnd getAllInputs] { - # if {$prop in $print_list} { - # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] - # write::WriteString " $prop $v" - # } - #} - set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] - set pi $MathUtils::PI - set propvalue [expr {tan($friction_value*$pi/180.0)}] - write::WriteString " FRICTION $propvalue" - # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" - write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" - set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] - if {[write::isBooleanTrue $compute_wear_bool]} { - set compute_wear 1 - set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] - set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] - set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] - } else { - set compute_wear 0 - set severiy_of_wear 0.001 - set impact_wear_severity 0.001 - set brinell_hardness 200.0 - } - set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] - if {[write::isBooleanTrue $rigid_structure_bool]} { - set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] - set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] - } else { - set young_modulus 1e20 - set poisson_ratio 0.25 - } - write::WriteString " COMPUTE_WEAR $compute_wear" - write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" - write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" - write::WriteString " BRINELL_HARDNESS $brinell_hardness" - write::WriteString " YOUNG_MODULUS $young_modulus" - write::WriteString " POISSON_RATIO $poisson_ratio" - - write::WriteString "End Properties" - set groupid [$group @n] - dict set wall_properties $groupid $i - incr DEM::write::last_property_id + incr i + write::WriteString "Begin Properties $i" + #foreach {prop obj} [$cnd getAllInputs] { + # if {$prop in $print_list} { + # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] + # write::WriteString " $prop $v" + # } + #} + set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] + set pi $MathUtils::PI + set propvalue [expr {tan($friction_value*$pi/180.0)}] + write::WriteString " FRICTION $propvalue" + # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" + write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" + set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] + if {[write::isBooleanTrue $compute_wear_bool]} { + set compute_wear 1 + set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] + set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] + set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] + } else { + set compute_wear 0 + set severiy_of_wear 0.001 + set impact_wear_severity 0.001 + set brinell_hardness 200.0 + } + set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] + if {[write::isBooleanTrue $rigid_structure_bool]} { + set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] + set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] + } else { + set young_modulus 1e20 + set poisson_ratio 0.25 + } + write::WriteString " COMPUTE_WEAR $compute_wear" + write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" + write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" + write::WriteString " BRINELL_HARDNESS $brinell_hardness" + write::WriteString " YOUNG_MODULUS $young_modulus" + write::WriteString " POISSON_RATIO $poisson_ratio" + + write::WriteString "End Properties" + set groupid [$group @n] + dict set wall_properties $groupid $i + incr DEM::write::last_property_id } write::WriteString "" return $wall_properties @@ -87,21 +87,21 @@ proc DEM::write::WriteWallCustomSmp { } { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" set i $DEM::write::last_property_id foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - set groupid [$group @n] - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "FEM"} { - - #write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" - write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" - write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid" - write::WriteString "End SubModelPartData" - write::WriteString "Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]] - write::WriteString "End SubModelPartNodes" - write::WriteString "End SubModelPart" - write::WriteString "" - } + incr i + set groupid [$group @n] + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "FEM"} { + + #write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" + write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" + write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid" + write::WriteString "End SubModelPartData" + write::WriteString "Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]] + write::WriteString "End SubModelPartNodes" + write::WriteString "End SubModelPart" + write::WriteString "" + } } } @@ -112,15 +112,31 @@ proc DEM::write::writeConditions { wall_properties } { } } +proc DEM::write::writePhantomConditions { wall_properties } { + if {$::Model::SpatialDimension eq "2D"} {write::writeConditionsByGiDId DEMConditions DEM-FEM-Wall2D $wall_properties + } else {write::writeConditionsByGiDId DEMConditions Phantom-Wall $wall_properties + } +} -proc DEM::write::GetWallsGroups { } { +proc DEM::write::GetRigidWallsGroups { } { set groups [list ] if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] + } + return $groups +} + +proc DEM::write::GetPhantomWallsGroups { } { + set groups [list ] + if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" + } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Phantom-Wall'\]/group"} + foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } @@ -129,11 +145,11 @@ proc DEM::write::GetWallsGroupsSmp { } { set groups [list ] set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "FEM"} { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] - } + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "FEM"} { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] + } } return $groups } @@ -144,32 +160,32 @@ proc DEM::write::GetWallsGroupsListInConditions { } { set groups [list ] # Get all the groups with surfaces involved in walls - foreach group [GetWallsGroups] { - foreach surface [GiD_EntitiesGroups get $group surfaces] { - foreach involved_group [GiD_EntitiesGroups entity_groups surfaces $surface] { - set involved_group_id [write::GetWriteGroupName $involved_group] - if {$involved_group_id ni $groups} {lappend groups $involved_group_id} - } - } + foreach group [GetRigidWallsGroups] { + foreach surface [GiD_EntitiesGroups get $group surfaces] { + foreach involved_group [GiD_EntitiesGroups entity_groups surfaces $surface] { + set involved_group_id [write::GetWriteGroupName $involved_group] + if {$involved_group_id ni $groups} {lappend groups $involved_group_id} + } + } } - foreach group [GetWallsGroups] { - foreach line [GiD_EntitiesGroups get $group lines] { - foreach involved_group [GiD_EntitiesGroups entity_groups lines $line] { - set involved_group_id [write::GetWriteGroupName $involved_group] - if {$involved_group_id ni $groups} {lappend groups $involved_group_id} - } - } + foreach group [GetRigidWallsGroups] { + foreach line [GiD_EntitiesGroups get $group lines] { + foreach involved_group [GiD_EntitiesGroups entity_groups lines $line] { + set involved_group_id [write::GetWriteGroupName $involved_group] + if {$involved_group_id ni $groups} {lappend groups $involved_group_id} + } + } } # Find the relations condition -> group set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition" foreach cond [[customlib::GetBaseRoot] selectNodes $xp1] { - set condid [$cond @n] - foreach cond_group [$cond selectNodes "group"] { - set group [write::GetWriteGroupName [$cond_group @n]] - if {$group in $groups} {dict lappend conds_groups_dict $condid [$cond_group @n]} - } + set condid [$cond @n] + foreach cond_group [$cond selectNodes "group"] { + set group [write::GetWriteGroupName [$cond_group @n]] + if {$group in $groups} {dict lappend conds_groups_dict $condid [$cond_group @n]} + } } return $conds_groups_dict } @@ -180,266 +196,281 @@ proc DEM::write::GetConditionsGroups { } { set groups [list ] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } proc DEM::write::writeWallConditionMeshes { } { set i 0 - if {$::Model::SpatialDimension eq "2D"} {set cond "DEM-FEM-Wall2D" - } else {set cond "DEM-FEM-Wall"} - foreach group [GetWallsGroups] { - incr i - write::WriteString "Begin SubModelPart $i // $cond - group identifier: $group" - write::WriteString " Begin SubModelPartData // DEM-FEM-Wall. Group name: $group" - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" - set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - - set is_active [write::getValueByNode [$group_node selectNodes "./value\[@n='SetActive'\]"]] - if {[write::isBooleanTrue $is_active]} { - set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-ImposedMotion'\]"]] - if {$motion_type == "LinearPeriodic"} { - # Linear velocity - set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='VelocityModulus'\]"]] - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='DirectionVector'\]"]] velocity_X velocity_Y velocity_Z - if {$::Model::SpatialDimension eq "2D"} { - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" - } else { - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} - # set vX [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearVelocityX'\]"]] - - # Period - set periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriodic'\]"]] - if {[write::isBooleanTrue $periodic]} { - set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" - } else { - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularDirectionVector'\]"]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wx wy wz - write::WriteString " ANGULAR_VELOCITY \[3\] ($wx,$wy,$wz)"} - - # Angular center of rotation - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" - } else {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)"} - - # Angular Period - set angular_periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriodic'\]"]] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriod'\]"]] - } else {set angular_period 0.0} - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # set intervals - set LinearStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearStartTime'\]"]] - set LinearEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearEndTime'\]"]] - set AngularStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularStartTime'\]"]] - set AngularEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularEndTime'\]"]] - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - - set fixed_mesh_option_bool [write::getValueByNode [$group_node selectNodes "./value\[@n='fixed_wall'\]"]] - if {[write::isBooleanTrue $fixed_mesh_option_bool]} {set fixed_mesh_option 1 - } else {set fixed_mesh_option 0} - set rigid_body_motion 1 - set free_body_motion 0 - #Hardcoded - write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " FREE_BODY_MOTION $free_body_motion" - - } elseif {$motion_type == "FreeMotion"} { - set fixed_mesh_option 0 - set rigid_body_motion 0 - set free_body_motion 1 - - set mass [write::getValueByNode [$group_node selectNodes "./value\[@n='Mass'\]"]] - write::WriteString " RIGID_BODY_MASS $mass" - - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfMass'\]"]] cX cY cZ - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,0.0)" - } else {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,$cZ)"} - - set inertias [write::getValueByNode [$group_node selectNodes "./value\[@n='Inertia'\]"]] - if {$::Model::SpatialDimension eq "2D"} { - set iX $inertias - write::WriteString " RIGID_BODY_INERTIAS \[3\] (0.0,0.0,$iX)" - } else { - lassign $inertias iX iY iZ - write::WriteString " RIGID_BODY_INERTIAS \[3\] ($iX,$iY,$iZ)" - } - - # DOFS - set Ax [write::getValueByNode [$group_node selectNodes "./value\[@n='Ax'\]"]] - set Ay [write::getValueByNode [$group_node selectNodes "./value\[@n='Ay'\]"]] - set Az [write::getValueByNode [$group_node selectNodes "./value\[@n='Az'\]"]] - set Bx [write::getValueByNode [$group_node selectNodes "./value\[@n='Bx'\]"]] - set By [write::getValueByNode [$group_node selectNodes "./value\[@n='By'\]"]] - set Bz [write::getValueByNode [$group_node selectNodes "./value\[@n='Bz'\]"]] - if {$Ax == "Constant"} { - set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='Vx'\]"]] - write::WriteString " IMPOSED_VELOCITY_X_VALUE $fix_vx" - } - if {$Ay == "Constant"} { - set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='Vy'\]"]] - write::WriteString " IMPOSED_VELOCITY_Y_VALUE $fix_vy" - } - if {$Az == "Constant"} { - set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='Vz'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_VELOCITY_Z_VALUE 0.0" - } else {write::WriteString " IMPOSED_VELOCITY_Z_VALUE $fix_vz"} - - } - if {$Bx == "Constant"} { - set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='AVx'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE 0.0" - } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE $fix_avx"} - - } - if {$By == "Constant"} { - set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='AVy'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE 0.0" - } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} - - } - if {$Bz == "Constant"} { - set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='AVz'\]"]] - write::WriteString " IMPOSED_ANGULAR_VELOCITY_Z_VALUE $fix_avz" - } - set VStart [write::getValueByNode [$group_node selectNodes "./value\[@n='VStart'\]"]] - set VEnd [write::getValueByNode [$group_node selectNodes "./value\[@n='VEnd'\]"]] - write::WriteString " VELOCITY_START_TIME $VStart" - write::WriteString " VELOCITY_STOP_TIME $VEnd" - - # initial conditions - set iAx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAx'\]"]] - set iAy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAy'\]"]] - set iAz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAz'\]"]] - set iBx [write::getValueByNode [$group_node selectNodes "./value\[@n='iBx'\]"]] - set iBy [write::getValueByNode [$group_node selectNodes "./value\[@n='iBy'\]"]] - set iBz [write::getValueByNode [$group_node selectNodes "./value\[@n='iBz'\]"]] - if {$iAx == "true"} { - set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='iVx'\]"]] - write::WriteString " INITIAL_VELOCITY_X_VALUE $fix_vx" - } - if {$iAy == "true"} { - set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='iVy'\]"]] - write::WriteString " INITIAL_VELOCITY_Y_VALUE $fix_vy" - } - if {$iAz == "true"} { - set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='iVz'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_VELOCITY_Z_VALUE 0.0" - } else {write::WriteString " INITIAL_VELOCITY_Z_VALUE $fix_vz"} - - } - if {$iBx == "true"} { - set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVx'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE 0.0" - } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE $fix_avx"} - - } - if {$iBy == "true"} { - set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVy'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE 0.0" - } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} - - } - if {$iBz == "true"} { - set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVz'\]"]] - write::WriteString " INITIAL_ANGULAR_VELOCITY_Z_VALUE $fix_avz" - } - - # impose forces and moments - set ExternalForceX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceX'\]"]] - set ExternalForceY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceY'\]"]] - set ExternalForceZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceZ'\]"]] - set ExternalMomentX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentX'\]"]] - set ExternalMomentY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentY'\]"]] - set ExternalMomentZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentZ'\]"]] - - if {$ExternalForceX == "true"} { - set FX [write::getValueByNode [$group_node selectNodes "./value\[@n='FX'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_X $FX" - } - if {$ExternalForceY == "true"} { - set FY [write::getValueByNode [$group_node selectNodes "./value\[@n='FY'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_Y $FY" - } - if {$ExternalForceZ == "true"} { - set FZ [write::getValueByNode [$group_node selectNodes "./value\[@n='FZ'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_Z $FZ" - } - if {$ExternalMomentX == "true"} { - set MX [write::getValueByNode [$group_node selectNodes "./value\[@n='MX'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_X $MX" - } - if {$ExternalMomentY == "true"} { - set MY [write::getValueByNode [$group_node selectNodes "./value\[@n='MY'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_Y $MY" - } - if {$ExternalMomentZ == "true"} { - set MZ [write::getValueByNode [$group_node selectNodes "./value\[@n='MZ'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_Z $MZ" - } - #Hardcoded - write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " FREE_BODY_MOTION $free_body_motion" - } - - #Hardcoded - set is_ghost [write::getValueByNode [$group_node selectNodes "./value\[@n='IsGhost'\]"]] - if {$is_ghost == "true"} { - write::WriteString " IS_GHOST 1" - } else { - write::WriteString " IS_GHOST 0" - } - write::WriteString " IDENTIFIER [write::transformGroupName $group]" - - DefineFEMExtraConditions $group_node - - } - write::WriteString " End SubModelPartData" - - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] - write::WriteString " End SubModelPartNodes" - - write::WriteString "Begin SubModelPartConditions" - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - dict set gdict $group $f - GiD_WriteCalculationFile elements -sorted $gdict - write::WriteString "End SubModelPartConditions" - write::WriteString "" - write::WriteString "End SubModelPart" - write::WriteString "" + + foreach group [GetRigidWallsGroups] { + incr i + writeWallConditionMesh $i $group + } + + foreach group [GetPhantomWallsGroups] { + incr i + writeWallConditionMesh $i $group + } +} + +proc DEM::write::writeWallConditionMesh { i group } { + + if {$::Model::SpatialDimension eq "2D"} { + set cond "DEM-FEM-Wall2D" + } else { + set cond "DEM-FEM-Wall" # TODO: extend to Phantom walls (now they work with the DEM-FEM-Wall parameters, of which most are ignored) } + + write::WriteString "Begin SubModelPart $i // $cond - group identifier: $group" + write::WriteString " Begin SubModelPartData // DEM-FEM-Wall. Group name: $group" + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" + set group_node [[customlib::GetBaseRoot] selectNodes $xp1] + + set is_active [write::getValueByNode [$group_node selectNodes "./value\[@n='SetActive'\]"]] + if {[write::isBooleanTrue $is_active]} { + set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-ImposedMotion'\]"]] + if {$motion_type == "LinearPeriodic"} { + # Linear velocity + set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='VelocityModulus'\]"]] + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='DirectionVector'\]"]] velocity_X velocity_Y velocity_Z + if {$::Model::SpatialDimension eq "2D"} { + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" + } else { + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} + # set vX [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearVelocityX'\]"]] + + # Period + set periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriodic'\]"]] + if {[write::isBooleanTrue $periodic]} { + set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" + } else { + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularDirectionVector'\]"]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wx wy wz + write::WriteString " ANGULAR_VELOCITY \[3\] ($wx,$wy,$wz)"} + + # Angular center of rotation + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" + } else {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)"} + + # Angular Period + set angular_periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriodic'\]"]] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriod'\]"]] + } else {set angular_period 0.0} + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # set intervals + set LinearStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearStartTime'\]"]] + set LinearEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearEndTime'\]"]] + set AngularStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularStartTime'\]"]] + set AngularEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularEndTime'\]"]] + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + + set fixed_mesh_option_bool [write::getValueByNode [$group_node selectNodes "./value\[@n='fixed_wall'\]"]] + if {[write::isBooleanTrue $fixed_mesh_option_bool]} {set fixed_mesh_option 1 + } else {set fixed_mesh_option 0} + set rigid_body_motion 1 + set free_body_motion 0 + #Hardcoded + write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " FREE_BODY_MOTION $free_body_motion" + + } elseif {$motion_type == "FreeMotion"} { + set fixed_mesh_option 0 + set rigid_body_motion 0 + set free_body_motion 1 + + set mass [write::getValueByNode [$group_node selectNodes "./value\[@n='Mass'\]"]] + write::WriteString " RIGID_BODY_MASS $mass" + + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfMass'\]"]] cX cY cZ + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,0.0)" + } else {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,$cZ)"} + + set inertias [write::getValueByNode [$group_node selectNodes "./value\[@n='Inertia'\]"]] + if {$::Model::SpatialDimension eq "2D"} { + set iX $inertias + write::WriteString " RIGID_BODY_INERTIAS \[3\] (0.0,0.0,$iX)" + } else { + lassign $inertias iX iY iZ + write::WriteString " RIGID_BODY_INERTIAS \[3\] ($iX,$iY,$iZ)" + } + + # DOFS + set Ax [write::getValueByNode [$group_node selectNodes "./value\[@n='Ax'\]"]] + set Ay [write::getValueByNode [$group_node selectNodes "./value\[@n='Ay'\]"]] + set Az [write::getValueByNode [$group_node selectNodes "./value\[@n='Az'\]"]] + set Bx [write::getValueByNode [$group_node selectNodes "./value\[@n='Bx'\]"]] + set By [write::getValueByNode [$group_node selectNodes "./value\[@n='By'\]"]] + set Bz [write::getValueByNode [$group_node selectNodes "./value\[@n='Bz'\]"]] + if {$Ax == "Constant"} { + set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='Vx'\]"]] + write::WriteString " IMPOSED_VELOCITY_X_VALUE $fix_vx" + } + if {$Ay == "Constant"} { + set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='Vy'\]"]] + write::WriteString " IMPOSED_VELOCITY_Y_VALUE $fix_vy" + } + if {$Az == "Constant"} { + set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='Vz'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_VELOCITY_Z_VALUE 0.0" + } else {write::WriteString " IMPOSED_VELOCITY_Z_VALUE $fix_vz"} + + } + if {$Bx == "Constant"} { + set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='AVx'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE 0.0" + } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE $fix_avx"} + + } + if {$By == "Constant"} { + set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='AVy'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE 0.0" + } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} + + } + if {$Bz == "Constant"} { + set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='AVz'\]"]] + write::WriteString " IMPOSED_ANGULAR_VELOCITY_Z_VALUE $fix_avz" + } + set VStart [write::getValueByNode [$group_node selectNodes "./value\[@n='VStart'\]"]] + set VEnd [write::getValueByNode [$group_node selectNodes "./value\[@n='VEnd'\]"]] + write::WriteString " VELOCITY_START_TIME $VStart" + write::WriteString " VELOCITY_STOP_TIME $VEnd" + + # initial conditions + set iAx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAx'\]"]] + set iAy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAy'\]"]] + set iAz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAz'\]"]] + set iBx [write::getValueByNode [$group_node selectNodes "./value\[@n='iBx'\]"]] + set iBy [write::getValueByNode [$group_node selectNodes "./value\[@n='iBy'\]"]] + set iBz [write::getValueByNode [$group_node selectNodes "./value\[@n='iBz'\]"]] + if {$iAx == "true"} { + set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='iVx'\]"]] + write::WriteString " INITIAL_VELOCITY_X_VALUE $fix_vx" + } + if {$iAy == "true"} { + set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='iVy'\]"]] + write::WriteString " INITIAL_VELOCITY_Y_VALUE $fix_vy" + } + if {$iAz == "true"} { + set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='iVz'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_VELOCITY_Z_VALUE 0.0" + } else {write::WriteString " INITIAL_VELOCITY_Z_VALUE $fix_vz"} + + } + if {$iBx == "true"} { + set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVx'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE 0.0" + } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE $fix_avx"} + + } + if {$iBy == "true"} { + set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVy'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE 0.0" + } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} + + } + if {$iBz == "true"} { + set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVz'\]"]] + write::WriteString " INITIAL_ANGULAR_VELOCITY_Z_VALUE $fix_avz" + } + + # impose forces and moments + set ExternalForceX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceX'\]"]] + set ExternalForceY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceY'\]"]] + set ExternalForceZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceZ'\]"]] + set ExternalMomentX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentX'\]"]] + set ExternalMomentY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentY'\]"]] + set ExternalMomentZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentZ'\]"]] + + if {$ExternalForceX == "true"} { + set FX [write::getValueByNode [$group_node selectNodes "./value\[@n='FX'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_X $FX" + } + if {$ExternalForceY == "true"} { + set FY [write::getValueByNode [$group_node selectNodes "./value\[@n='FY'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_Y $FY" + } + if {$ExternalForceZ == "true"} { + set FZ [write::getValueByNode [$group_node selectNodes "./value\[@n='FZ'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_Z $FZ" + } + if {$ExternalMomentX == "true"} { + set MX [write::getValueByNode [$group_node selectNodes "./value\[@n='MX'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_X $MX" + } + if {$ExternalMomentY == "true"} { + set MY [write::getValueByNode [$group_node selectNodes "./value\[@n='MY'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_Y $MY" + } + if {$ExternalMomentZ == "true"} { + set MZ [write::getValueByNode [$group_node selectNodes "./value\[@n='MZ'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_Z $MZ" + } + #Hardcoded + write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " FREE_BODY_MOTION $free_body_motion" + } + + #Hardcoded + set is_ghost [write::getValueByNode [$group_node selectNodes "./value\[@n='IsGhost'\]"]] + if {$is_ghost == "true"} { + write::WriteString " IS_GHOST 1" + } else { + write::WriteString " IS_GHOST 0" + } + write::WriteString " IDENTIFIER [write::transformGroupName $group]" + + DefineFEMExtraConditions $group_node + + } + write::WriteString " End SubModelPartData" + + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] + write::WriteString " End SubModelPartNodes" + + write::WriteString "Begin SubModelPartConditions" + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + dict set gdict $group $f + GiD_WriteCalculationFile elements -sorted $gdict + write::WriteString "End SubModelPartConditions" + write::WriteString "" + write::WriteString "End SubModelPart" + write::WriteString "" } proc DEM::write::DefineFEMExtraConditions {group_node} { set GraphPrint [write::getValueByNode [$group_node selectNodes "./value\[@n='GraphPrint'\]"]] if {$GraphPrint == "true"} { - set GraphPrintval 1 + set GraphPrintval 1 } else { - set GraphPrintval 0 + set GraphPrintval 0 } write::WriteString " FORCE_INTEGRATION_GROUP $GraphPrintval" } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/xml/Conditions.xml b/kratos.gid/apps/DEM/xml/Conditions.xml index d19cf2b18..393845754 100644 --- a/kratos.gid/apps/DEM/xml/Conditions.xml +++ b/kratos.gid/apps/DEM/xml/Conditions.xml @@ -9,6 +9,15 @@ + + + + + + + + + diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 2d06693cb..4036c7705 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -131,6 +131,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/FluidDEM/python/MainKratos.py b/kratos.gid/apps/FluidDEM/python/MainKratos.py index 114ceafee..5b9305169 100644 --- a/kratos.gid/apps/FluidDEM/python/MainKratos.py +++ b/kratos.gid/apps/FluidDEM/python/MainKratos.py @@ -5,10 +5,16 @@ # Whenever a minor modification has been made on one of these parts, the corresponding line is indicated with a comment: # MOD. from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import warnings # Kratos from KratosMultiphysics import * -from KratosMultiphysics.ExternalSolversApplication import * + +try: + from KratosMultiphysics.ExternalSolversApplication import * +except ImportError: + warnings.warn('Package ExternalSolversApplication could not be loaded. Make sure to compile it if needed.', ImportWarning) + from KratosMultiphysics.DEMApplication import * from KratosMultiphysics.FluidDynamicsApplication import * from KratosMultiphysics.SwimmingDEMApplication import * From 695ad321d341a367365e41a9b921fcb3a0ff1048 Mon Sep 17 00:00:00 2001 From: Guillermo Casas Date: Wed, 8 Jul 2020 18:28:30 +0200 Subject: [PATCH 028/556] Now phantom and rigid wall SMP are printed. hdf5 being filled --- .../apps/CDEM/write/writeMDPA_Walls.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 92 ++++++++++++++++--- 2 files changed, 82 insertions(+), 12 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl index 0f0bc09ad..2771c0040 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl @@ -3,7 +3,7 @@ proc DEM::write::WriteMDPAWalls { } { write::writeModelPartData # Material - set wall_properties [WriteWallProperties] + set wall_properties [WriteRigidWallProperties] # Nodal coordinates (only for Walls ) write::writeNodalCoordinatesOnGroups [DEM::write::GetRigidWallsGroups] diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 06bc4fc4e..6b2fdeda5 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -3,15 +3,17 @@ proc DEM::write::WriteMDPAWalls { } { write::writeModelPartData # Material - set wall_properties [WriteWallProperties] + set wall_properties [WriteRigidWallProperties] + set phantom_wall_properties [WritePhantomWallProperties] # Nodal coordinates (only for Walls ) - write::writeNodalCoordinatesOnGroups [GetRigidWallsGroups] + write::writeNodalCoordinatesOnGroups [GetWallsGroups] write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] # Nodal conditions and conditions writeConditions $wall_properties - writePhantomConditions $wall_properties + writePhantomConditions $phantom_wall_properties + # SubmodelParts writeWallConditionMeshes @@ -19,14 +21,75 @@ proc DEM::write::WriteMDPAWalls { } { WriteWallCustomSmp } +proc DEM::write::WriteRigidWallProperties { } { + set wall_properties [dict create ] + set condition_name 'DEM-FEM-Wall' + set cnd [Model::getCondition $condition_name] + + if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" + } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = $condition_name\]/group" + } + + #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" + set i $DEM::write::last_property_id + foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + incr i + write::WriteString "Begin Properties $i" + #foreach {prop obj} [$cnd getAllInputs] { + # if {$prop in $print_list} { + # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] + # write::WriteString " $prop $v" + # } + #} + set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] + set pi $MathUtils::PI + set propvalue [expr {tan($friction_value*$pi/180.0)}] + write::WriteString " FRICTION $propvalue" + # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" + write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" + set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] + if {[write::isBooleanTrue $compute_wear_bool]} { + set compute_wear 1 + set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] + set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] + set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] + } else { + set compute_wear 0 + set severiy_of_wear 0.001 + set impact_wear_severity 0.001 + set brinell_hardness 200.0 + } + set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] + if {[write::isBooleanTrue $rigid_structure_bool]} { + set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] + set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] + } else { + set young_modulus 1e20 + set poisson_ratio 0.25 + } + write::WriteString " COMPUTE_WEAR $compute_wear" + write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" + write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" + write::WriteString " BRINELL_HARDNESS $brinell_hardness" + write::WriteString " YOUNG_MODULUS $young_modulus" + write::WriteString " POISSON_RATIO $poisson_ratio" + write::WriteString "End Properties" + set groupid [$group @n] + dict set wall_properties $groupid $i + incr DEM::write::last_property_id + } + write::WriteString "" + return $wall_properties +} -proc DEM::write::WriteWallProperties { } { +proc DEM::write::WritePhantomWallProperties { } { #TODO: remove all unnecessary prints set wall_properties [dict create ] - set cnd [Model::getCondition "DEM-FEM-Wall"] + set condition_name 'Phantom-Wall' + set cnd [Model::getCondition $condition_name] if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" + } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = $condition_name\]/group" } #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" @@ -118,6 +181,13 @@ proc DEM::write::writePhantomConditions { wall_properties } { } } +proc DEM::write::GetWallsGroups { } { + set groups [list ] + set groups_rigid [GetRigidWallsGroups] + set groups_phantom [GetPhantomWallsGroups] + set groups [concat $groups_rigid $groups_phantom] + return $groups +} proc DEM::write::GetRigidWallsGroups { } { set groups [list ] @@ -207,25 +277,25 @@ proc DEM::write::writeWallConditionMeshes { } { foreach group [GetRigidWallsGroups] { incr i - writeWallConditionMesh $i $group + writeWallConditionMesh $i $group "DEM-FEM-Wall" } foreach group [GetPhantomWallsGroups] { incr i - writeWallConditionMesh $i $group + writeWallConditionMesh $i $group "Phantom-Wall" } } -proc DEM::write::writeWallConditionMesh { i group } { +proc DEM::write::writeWallConditionMesh { i group condition_type } { if {$::Model::SpatialDimension eq "2D"} { set cond "DEM-FEM-Wall2D" } else { - set cond "DEM-FEM-Wall" # TODO: extend to Phantom walls (now they work with the DEM-FEM-Wall parameters, of which most are ignored) + set cond $condition_type } write::WriteString "Begin SubModelPart $i // $cond - group identifier: $group" - write::WriteString " Begin SubModelPartData // DEM-FEM-Wall. Group name: $group" + write::WriteString " Begin SubModelPartData // $cond. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] From 5b83f1a4a090e9d3165961392bbd212495d870c7 Mon Sep 17 00:00:00 2001 From: Joaquin Gonzalez Date: Mon, 13 Jul 2020 17:12:52 +0200 Subject: [PATCH 029/556] Adding SearchTolerance option in the tree interface and setting SchillerAndNaumanDragForce as default --- kratos.gid/apps/DEM/write/writeProjectParameters.tcl | 3 ++- kratos.gid/apps/DEM/xml/SolutionStrategy.spd | 3 ++- kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 5c4848b3a..5f6397f1e 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -69,7 +69,7 @@ proc DEM::write::getParametersDict { } { dict set strategy_parameters_dict "RemoveBallsInitiallyTouchingWalls" [write::getValue AdvOptions RemoveParticlesInWalls] dict set strategy_parameters_dict "strategy" $dem_strategy - dict set project_parameters_dict "solver_settings" $strategy_parameters_dict + dict set project_parameters_dict "solver_settings" $strategy_parameters_dict dict set project_parameters_dict "VirtualMassCoefficient" [write::getValue AdvOptions VirtualMassCoef] dict set project_parameters_dict "RollingFrictionOption" [write::getValue AdvOptions RollingFriction] @@ -90,6 +90,7 @@ proc DEM::write::getParametersDict { } { # TODO: check for inconsistencies in DEMTIMEPARAMETERS UN # dict set project_parameters_dict "ControlTime" [write::getValue DEMTimeParameters ScreenInfoOutput] dict set project_parameters_dict "NeighbourSearchFrequency" [write::getValue DEMTimeParameters NeighbourSearchFrequency] + dict set project_parameters_dict "SearchTolerance" [write::getValue AdvOptions SearchTolerance] dict set project_parameters_dict "GraphExportFreq" [write::getValue DGraphs GraphExportFreq] dict set project_parameters_dict "VelTrapGraphExportFreq" 1e-3 diff --git a/kratos.gid/apps/DEM/xml/SolutionStrategy.spd b/kratos.gid/apps/DEM/xml/SolutionStrategy.spd index df65033af..1ae6239f9 100644 --- a/kratos.gid/apps/DEM/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/DEM/xml/SolutionStrategy.spd @@ -23,6 +23,7 @@ + @@ -30,7 +31,7 @@ - + diff --git a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd index fb1011f8f..96c7304a7 100644 --- a/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd +++ b/kratos.gid/apps/FluidDEM/xml/HydrodynamicLaws.spd @@ -27,7 +27,7 @@ - + From d0b967ac7d03ca7eda9a55c8583ce7fe76195192 Mon Sep 17 00:00:00 2001 From: Ignasi de Pouplana Date: Wed, 22 Jul 2020 01:45:53 +0200 Subject: [PATCH 030/556] Adding point element type to some of the BC --- kratos.gid/apps/CDEM/xml/Conditions.xml | 4 ++-- kratos.gid/apps/DEM/xml/Conditions.xml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/CDEM/xml/Conditions.xml b/kratos.gid/apps/CDEM/xml/Conditions.xml index 1008ba5c8..8fbd6236f 100644 --- a/kratos.gid/apps/CDEM/xml/Conditions.xml +++ b/kratos.gid/apps/CDEM/xml/Conditions.xml @@ -1,12 +1,12 @@ - + - + diff --git a/kratos.gid/apps/DEM/xml/Conditions.xml b/kratos.gid/apps/DEM/xml/Conditions.xml index d19cf2b18..75700cb1d 100644 --- a/kratos.gid/apps/DEM/xml/Conditions.xml +++ b/kratos.gid/apps/DEM/xml/Conditions.xml @@ -46,26 +46,26 @@ - + - + - + - + From 8676a12d36dca72cc9bd26b2d2eb30a5ed2d2395 Mon Sep 17 00:00:00 2001 From: marcnunezc Date: Mon, 17 Aug 2020 13:42:09 +0200 Subject: [PATCH 031/556] Setting model_part_name attribute and writing to materials file --- kratos.gid/apps/PotentialFluid/write/write.tcl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index c9ab89bda..9a3c8aea7 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -15,6 +15,7 @@ proc PotentialFluid::write::Init { } { SetAttribute writeCoordinatesByGroups 0 SetAttribute validApps [list "Fluid" "PotentialFluid"] SetAttribute main_script_file "KratosPotentialFluid.py" + SetAttribute model_part_name "FluidModelPart" SetAttribute materials_file "FluidMaterials.json" SetAttribute properties_location json SetAttribute output_model_part_name "fluid_computational_model_part" @@ -53,7 +54,8 @@ proc PotentialFluid::write::writeModelPartEvent { } { proc PotentialFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file - write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False + set materials_model_part_name [GetAttribute model_part_name] + write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False $materials_model_part_name write::CopyFileIntoModel "python/KratosPotentialFluid.py" write::RenameFileInModel "KratosPotentialFluid.py" "MainKratos.py" From 84fa0aecb744251bd3d111e772e5e7121abc2367 Mon Sep 17 00:00:00 2001 From: Carlos Roig Date: Mon, 31 Aug 2020 12:32:44 +0200 Subject: [PATCH 032/556] Missing MPI export --- kratos.gid/kratos.unix_release.bat | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kratos.gid/kratos.unix_release.bat b/kratos.gid/kratos.unix_release.bat index 4f8b7547b..b81b0283d 100755 --- a/kratos.gid/kratos.unix_release.bat +++ b/kratos.gid/kratos.unix_release.bat @@ -24,6 +24,10 @@ else export LD_LIBRARY_PATH="$3/exec/Kratos":"$3/exec/Kratos/libs" fi +# Mpi +export PWD=`pwd` +export OPAL_PREFIX="$PWD/exec/Kratos/OpenMPI" + # Prevents the PYTHONHOME error from happening and isolate possible python repacks present # in the system and interfeering with runkratos export PYTHONHOME="$3/exec/Kratos" From 10d4a8abcdbd10eab1ecc913fb9fb334003f4496 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 1 Sep 2020 16:48:39 +0200 Subject: [PATCH 033/556] else s --- kratos.gid/scripts/Writing/WriteProjectParameters.tcl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index c22842aeb..ac9114d6e 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -451,7 +451,11 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { dict set resultDict file_label [getValueByXPath $gid_options_xpath FileLabel] set outputCT [getValueByXPath $gid_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT - if {$outputCT eq "time"} {set frequency [getValueByXPath $gid_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $gid_options_xpath OutputDeltaStep]} + if {$outputCT eq "time"} { + set frequency [getValueByXPath $gid_options_xpath OutputDeltaTime] + } { + set frequency [getValueByXPath $gid_options_xpath OutputDeltaStep] + } dict set resultDict output_interval $frequency dict set resultDict body_output [getValueByXPath $gid_options_xpath BodyOutput] From 17d0cb2868a663404880b64d1b6ec81c596d63d1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 2 Sep 2020 12:55:47 +0200 Subject: [PATCH 034/556] Protection agains conditions with no small displacement name changes --- kratos.gid/apps/Structural/write/write.tcl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 4ffbdae0a..8a7fa9eb7 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -388,9 +388,11 @@ proc Structural::write::ApplicationSpecificGetCondition {condition group etype n if {[Structural::write::GroupUsesSmallDisplacement $group $used_small_disp_elements]} { set new_cond [Model::Clone $condition] set topology [$new_cond getTopologyFeature $etype $nnodes] - set new_kname [$topology getAttribute KratosNameSmallDisplacement] - if {$new_kname ne ""} {$topology setKratosName $new_kname} - set ret $new_cond + if {$topology ne "" && [$topology hasAttribute KratosNameSmallDisplacement]} { + set new_kname [$topology getAttribute KratosNameSmallDisplacement] + if {$new_kname ne ""} {$topology setKratosName $new_kname} + set ret $new_cond + } } } return $ret From a4d102d9fad30a78f82cb814e5c85473b350ce07 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 2 Sep 2020 13:05:02 +0200 Subject: [PATCH 035/556] Change name of membrane element --- kratos.gid/apps/Structural/xml/Elements.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Structural/xml/Elements.xml b/kratos.gid/apps/Structural/xml/Elements.xml index b8c2f2abf..53dc44e70 100644 --- a/kratos.gid/apps/Structural/xml/Elements.xml +++ b/kratos.gid/apps/Structural/xml/Elements.xml @@ -458,8 +458,8 @@ - - + + From be99b893c3b8afcb8aea36535170a9aed21964a8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 2 Sep 2020 15:51:15 +0200 Subject: [PATCH 036/556] PRESTRESS_AXIS_GLOBAL seem to be deleted --- kratos.gid/apps/Structural/xml/Elements.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Structural/xml/Elements.xml b/kratos.gid/apps/Structural/xml/Elements.xml index 53dc44e70..8d588ddf7 100644 --- a/kratos.gid/apps/Structural/xml/Elements.xml +++ b/kratos.gid/apps/Structural/xml/Elements.xml @@ -478,11 +478,10 @@ - - + - + From 41df1293dea0121da3d4ac92f871a36437eb7df2 Mon Sep 17 00:00:00 2001 From: Javi G Date: Fri, 4 Sep 2020 11:35:39 +0200 Subject: [PATCH 037/556] add constrained parameter to AssignVectorByDirectionProcess --- kratos.gid/apps/Common/xml/Processes.xml | 38 ++++++++++-------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/kratos.gid/apps/Common/xml/Processes.xml b/kratos.gid/apps/Common/xml/Processes.xml index e890d009b..6143ebe09 100644 --- a/kratos.gid/apps/Common/xml/Processes.xml +++ b/kratos.gid/apps/Common/xml/Processes.xml @@ -2,64 +2,56 @@ - - + + - - + + - + - + - + - + - + - + + - - + + - + - + From 4f0ee5eda505114e951ef49f9e1b88fa93e9d430 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Sep 2020 18:47:09 +0200 Subject: [PATCH 038/556] Minor future check --- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 6579fcfd6..3daadc2f8 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -428,6 +428,7 @@ proc DEM::write::GetSpheresGroups { } { proc DEM::write::writeMaterialsParts { } { variable partsProperties + #TODO: check this nonsense conditions/parts ?? set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Parts'\]/group" set partsProperties $::write::mat_dict #set ::write::mat_dict [dict create] From 394c68602c635edfb79246e49500259dbeffedb7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Sep 2020 18:47:53 +0200 Subject: [PATCH 039/556] DEM patch to avoid GiD bug. Fixes the sphere losing in part groups --- kratos.gid/apps/DEM/start.tcl | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 5b66a0d4f..3ebc4d090 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -166,6 +166,36 @@ proc ::DEM::AfterMeshGeneration { fail } { # } } +proc ::DEM::AfterSaveModel { filespd } { + + # GiD bug detected in versions prev to 15.0.1 + # Spheres disapear in groups after load. Fixing it by removing the limitation in the prj file. + # GiD Team -> @jginternationa and @escolano + # Fixed in any 15.1.X (developer) and 15.0.1 and later (official) + if {[GidUtils::VersionCmp "15.0.0"] <= 0} { + ::DEM::PatchMissingSpheresInGroup $filespd + } +} + +proc ::DEM::PatchMissingSpheresInGroup {filespd} { + set prj_file [file join [file dirname $filespd] [file rootname $filespd].prj] + if {[file exists $prj_file]} { + dom parse [tDOM::xmlReadFile $prj_file] doc + + set grlist [$doc getElementsByTagName group] + foreach group $grlist { + if {[$group hasAttribute allowed_element_types]} { + $group removeAttribute allowed_element_types + } + if {[$group hasAttribute allowed_types]} { + $group removeAttribute allowed_types + } + } + set fp [open $prj_file w] + puts $fp [$doc asXML] + close $fp + } +} ::DEM::Init From 4a276d8950089dcc0af4538cd5a74f01f4b02781 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Sep 2020 18:49:22 +0200 Subject: [PATCH 040/556] Inherit fix for CDEM --- kratos.gid/apps/CDEM/start.tcl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index 84c8ccb53..6b7b28770 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -71,4 +71,8 @@ proc ::CDEM::CustomToolbarItems { } { Kratos::ToolbarAddItem "Bulk grouping" [file join $dir images stone.png] [list -np- ::CDEM::xml::BulkGroup] [= "Plugin\nBulk grouping"] } +proc ::CDEM::AfterSaveModel {filespd} { + ::DEM::AfterSaveModel $filespd +} + ::CDEM::Init From c0d63c18e152e8a70077a2a9406bee0bb9c1fd8c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Sep 2020 18:50:30 +0200 Subject: [PATCH 041/556] Rest of DEM dependent apps also fix the gid bug --- kratos.gid/apps/DEMPFEM/start.tcl | 4 ++++ kratos.gid/apps/FluidDEM/start.tcl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/kratos.gid/apps/DEMPFEM/start.tcl b/kratos.gid/apps/DEMPFEM/start.tcl index d3c17fea7..6a6c15d8f 100644 --- a/kratos.gid/apps/DEMPFEM/start.tcl +++ b/kratos.gid/apps/DEMPFEM/start.tcl @@ -64,4 +64,8 @@ proc ::DEMPFEM::CustomToolbarItems { } { Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::DEMPFEM::examples::InnerSphere] [= "Example\nInnerSphere"] } +proc ::DEMPFEM::AfterSaveModel {filespd} { + ::DEM::AfterSaveModel $filespd +} + ::DEMPFEM::Init diff --git a/kratos.gid/apps/FluidDEM/start.tcl b/kratos.gid/apps/FluidDEM/start.tcl index 8d7631c62..5a53d913e 100644 --- a/kratos.gid/apps/FluidDEM/start.tcl +++ b/kratos.gid/apps/FluidDEM/start.tcl @@ -65,4 +65,8 @@ proc ::FluidDEM::CustomToolbarItems { } { Kratos::ToolbarAddItem "Example" [file join $dir images drop.png] [list -np- ::FluidDEM::examples::CylinderInFlow] [= "Example\nCylinderInFlow"] } +proc ::FluidDEM::AfterSaveModel {filespd} { + ::DEM::AfterSaveModel $filespd +} + ::FluidDEM::Init From c3fa84a94678f889a622db334a9b05095e44ce1d Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 17 Sep 2020 09:34:58 +0200 Subject: [PATCH 042/556] Changes in non-linear iterations criteria and erase import of ExtSolApp --- .../apps/PfemFluid/python/Erase--script.py | 1 - kratos.gid/apps/PfemFluid/python/RunPFEM.py | 1 - kratos.gid/apps/PfemFluid/xml/Strategies.xml | 18 +++++++++--------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/python/Erase--script.py b/kratos.gid/apps/PfemFluid/python/Erase--script.py index 5cecb5555..8004c8632 100644 --- a/kratos.gid/apps/PfemFluid/python/Erase--script.py +++ b/kratos.gid/apps/PfemFluid/python/Erase--script.py @@ -46,7 +46,6 @@ def GetParallelSize(): # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers import KratosMultiphysics.DelaunayMeshingApplication as KratosPfemg import KratosMultiphysics.PfemFluidDynamicsApplication as KratosPfemFluid diff --git a/kratos.gid/apps/PfemFluid/python/RunPFEM.py b/kratos.gid/apps/PfemFluid/python/RunPFEM.py index d1524ff55..ab151fb73 100644 --- a/kratos.gid/apps/PfemFluid/python/RunPFEM.py +++ b/kratos.gid/apps/PfemFluid/python/RunPFEM.py @@ -1,5 +1,4 @@ import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication import KratosMultiphysics.DelaunayMeshingApplication import KratosMultiphysics.PfemFluidDynamicsApplication diff --git a/kratos.gid/apps/PfemFluid/xml/Strategies.xml b/kratos.gid/apps/PfemFluid/xml/Strategies.xml index 43c6119f9..c65198ace 100644 --- a/kratos.gid/apps/PfemFluid/xml/Strategies.xml +++ b/kratos.gid/apps/PfemFluid/xml/Strategies.xml @@ -11,9 +11,9 @@ - - - + + + @@ -63,9 +63,9 @@ - - - + + + @@ -115,9 +115,9 @@ - - - + + + From cd78d2f31fcb704ba179e2fb8ad73ea50b1c3551 Mon Sep 17 00:00:00 2001 From: djvicente Date: Fri, 18 Sep 2020 09:07:33 +0200 Subject: [PATCH 043/556] Add new solver --- kratos.gid/apps/Dam/xml/Solvers.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kratos.gid/apps/Dam/xml/Solvers.xml b/kratos.gid/apps/Dam/xml/Solvers.xml index 594477a57..87c8a569a 100644 --- a/kratos.gid/apps/Dam/xml/Solvers.xml +++ b/kratos.gid/apps/Dam/xml/Solvers.xml @@ -50,6 +50,11 @@ + + + + + - + From 89f2d2f39ec9f661469ae9e12f21582ce1257627 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 22 Sep 2020 11:44:22 +0200 Subject: [PATCH 045/556] minor buoyancy 2d --- kratos.gid/apps/Buoyancy/examples/examples.tcl | 8 +++++--- kratos.gid/apps/Buoyancy/start.tcl | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index ef9796d92..409c5dbf5 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -7,9 +7,11 @@ proc Buoyancy::examples::Init { } { } proc Buoyancy::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Heated square" ] 8 PRE [list ::Buoyancy::examples::HeatedSquare] "" "" insertafter = - GiDMenu::UpdateMenus + if {$::Model::SpatialDimension eq "2D"} { + GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Heated square" ] 8 PRE [list ::Buoyancy::examples::HeatedSquare] "" "" insertafter = + GiDMenu::UpdateMenus + } } Buoyancy::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index 8daea4f34..efaac2fa2 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -58,7 +58,10 @@ proc ::Buoyancy::GetAttribute {name} { proc ::Buoyancy::CustomToolbarItems { } { variable dir - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Buoyancy::examples::HeatedSquare] [= "Example\nBuoyancy driven cavity flow (Ra = 1e6 - Pr = 0.71)"] + + if {$::Model::SpatialDimension eq "2D"} { + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Buoyancy::examples::HeatedSquare] [= "Example\nBuoyancy driven cavity flow (Ra = 1e6 - Pr = 0.71)"] + } } ::Buoyancy::Init From 8887cef80f29806d0031656f25547dc0dd1ba142 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 23 Sep 2020 15:18:59 +0200 Subject: [PATCH 046/556] hotfix structural example --- kratos.gid/apps/Structural/examples/TrussCantilever.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl index f52ef761a..b591888ee 100644 --- a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl +++ b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl @@ -125,9 +125,9 @@ proc Structural::examples::TreeAssignationTrussCantilever {args} { spdAux::SetValuesOnBaseNode $LoadNode $props # Structure domain time parameters - set chanparameterse_list [list EndTime 25.0 DeltaTime 0.1] + set change_list [list EndTime 25.0 DeltaTime 0.1] set xpath [spdAux::getRoute STTimeParameters] - spdAux::SetValuesOnBasePath $xpath $parameters + spdAux::SetValuesOnBasePath $xpath $change_list spdAux::RequestRefresh } From 7df2bfaf2ea5f53598b88bb839c195ad1837b61b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 23 Sep 2020 16:50:29 +0200 Subject: [PATCH 047/556] Add thermic examples to selector --- .../images/Thermic/BuoyancyHeatedSquare2D.png | Bin 0 -> 9059 bytes .../ConjugateHeatTransferHeatedSquare2D.png | Bin 0 -> 8573 bytes .../ConvectionDiffusionHeatedSquare2D.png | Bin 0 -> 10516 bytes kratos.gid/apps/Examples/xml/examples.xml | 9 +++++++-- 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 kratos.gid/apps/Examples/images/Thermic/BuoyancyHeatedSquare2D.png create mode 100644 kratos.gid/apps/Examples/images/Thermic/ConjugateHeatTransferHeatedSquare2D.png create mode 100644 kratos.gid/apps/Examples/images/Thermic/ConvectionDiffusionHeatedSquare2D.png diff --git a/kratos.gid/apps/Examples/images/Thermic/BuoyancyHeatedSquare2D.png b/kratos.gid/apps/Examples/images/Thermic/BuoyancyHeatedSquare2D.png new file mode 100644 index 0000000000000000000000000000000000000000..1be4ba1654bc5add085c8467288300bf1495022f GIT binary patch literal 9059 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 V{!l(b5_>q2ieB({XPO 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 DAP^R2 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/Examples/images/Thermic/ConvectionDiffusionHeatedSquare2D.png b/kratos.gid/apps/Examples/images/Thermic/ConvectionDiffusionHeatedSquare2D.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d5d0905eb2309dfa4ad387428329c04f01e32 GIT binary patch literal 10516 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 - + @@ -24,4 +24,9 @@ + + + + + From 9b25ddf80559c3b0aba3343e00b25e2ed418f515 Mon Sep 17 00:00:00 2001 From: Javi G Date: Tue, 29 Sep 2020 13:12:08 +0200 Subject: [PATCH 048/556] Remove solid examples --- kratos.gid/apps/Examples/xml/examples.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index dd7668bc8..e25245bb6 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -1,7 +1,7 @@ - + From 64e3caf842f12549a63aecb44f3c8d1254e2954a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 2 Oct 2020 13:09:29 +0200 Subject: [PATCH 049/556] Add 2 thermic --- kratos.gid/apps/Examples/xml/examples.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 8f18f1b24..cd070a39e 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -28,5 +28,7 @@ + + From 598eb7d86580544137c98d8801f4f73c66122fd3 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 2 Oct 2020 13:17:02 +0200 Subject: [PATCH 050/556] hotfix --- kratos.gid/apps/Examples/xml/examples.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index cd070a39e..d7cc23b99 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -29,6 +29,5 @@ - From b442af9aa071890a7c679df03eb53a099ad569ba Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 6 Oct 2020 10:23:24 +0200 Subject: [PATCH 051/556] bugfix temporal fix for example 2D. Assigned Rball instead of Granular until the mesher is fixed --- kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index 984675fbb..b92b68e67 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -15,6 +15,8 @@ proc ::DEM::examples::CirclesDrop {args} { GidUtils::UpdateWindow LAYER GiD_Process 'Zoom Frame + GiD_Process Mescape Utilities Variables CircleMesher 0 escape escape + MeshGenerationOKDo 1.0 } @@ -74,7 +76,7 @@ proc ::DEM::examples::AssignToTreeCirclesDrop { } { set change_list [list EndTime 5 DeltaTime 5e-5 NeighbourSearchFrequency 50] set xpath [spdAux::getRoute DEMTimeParameters] spdAux::SetValuesOnBasePath $xpath $change_list - + spdAux::RequestRefresh } From f929381e344920dd4d5c944e519e1add9aa16e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Wed, 14 Oct 2020 18:25:54 +0200 Subject: [PATCH 052/556] 1st commit. not working --- .../Fluid/write/writeProjectParameters.tcl | 22 ++ kratos.gid/apps/Fluid/xml/Elements.xml | 196 ++++++++++++++---- kratos.gid/apps/Fluid/xml/Parts.spd | 2 +- kratos.gid/apps/Fluid/xml/Strategies.xml | 4 +- 4 files changed, 180 insertions(+), 44 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 012f791d2..7fd85f99d 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -158,6 +158,28 @@ proc Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } +proc Fluid::write::GetUsedElement { {get "Objects"} } { + set root [customlib::GetBaseRoot] + + # Get the fluid part + set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" + if {[llength [$root selectNodes $xp1]] ne 1} { + set err "You must set one part in Parts.\n" + } + + set err [Validate] + if {$err ne ""} {error $err} + + set element + foreach gNode [Fluid::write::GetPartsGroups] { + set elem_name [get_domnode_attribute [$gNode selectNodes ".//value\[@n='Element']"] v] + set e [Model::getElement $elem_name] + if {$get eq "Name"} { set e [$e getName] } + lappend lista $e + } + return $lista +} + proc Fluid::write::getSolverSettingsDict { } { set solverSettingsDict [dict create] dict set solverSettingsDict model_part_name [GetAttribute model_part_name] diff --git a/kratos.gid/apps/Fluid/xml/Elements.xml b/kratos.gid/apps/Fluid/xml/Elements.xml index cd1081b7b..3f6cc3cc1 100644 --- a/kratos.gid/apps/Fluid/xml/Elements.xml +++ b/kratos.gid/apps/Fluid/xml/Elements.xml @@ -45,53 +45,167 @@ - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - + + + + + + + - + + + - - - - - + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index f9de1d27a..d1a2b5668 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -1,7 +1,7 @@ + actualize="1" values="" state="normal"> - + - + From 5d17b9cb48abbebf365ef3706839251381b54be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Thu, 15 Oct 2020 17:30:06 +0200 Subject: [PATCH 053/556] Working version --- .../Fluid/write/writeProjectParameters.tcl | 68 +++++++++++++------ 1 file changed, 49 insertions(+), 19 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 7fd85f99d..ce89ec80b 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -158,26 +158,40 @@ proc Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } -proc Fluid::write::GetUsedElement { {get "Objects"} } { +proc Fluid::write::GetUsedElement {} { set root [customlib::GetBaseRoot] - # Get the fluid part + # Check that there is only one fluid part set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" if {[llength [$root selectNodes $xp1]] ne 1} { set err "You must set one part in Parts.\n" + error $err } + W "There is one part" - set err [Validate] - if {$err ne ""} {error $err} - - set element - foreach gNode [Fluid::write::GetPartsGroups] { - set elem_name [get_domnode_attribute [$gNode selectNodes ".//value\[@n='Element']"] v] - set e [Model::getElement $elem_name] - if {$get eq "Name"} { set e [$e getName] } - lappend lista $e + # Get the fluid part + set get "Objects" + set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" + set lista [list ] + foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + set g $gNode + if {$get eq "Name"} { + set g [$g getName] + } + lappend lista $g } - return $lista + + W "W lista" + W $lista + + # Get the element name from the fluid part + set fluid_part [lindex $lista 0] + set elem_name [get_domnode_attribute [$fluid_part selectNodes ".//value\[@n='Element']"] v] + + W "W elem_name" + W $elem_name + + return $elem_name } proc Fluid::write::getSolverSettingsDict { } { @@ -233,21 +247,37 @@ proc Fluid::write::getSolverSettingsDict { } { # For monolithic schemes, set the formulation settings if {$currentStrategyId eq "Monolithic"} { + # Create formulation dictionary set formulationSettingsDict [dict create] - # Set element type - # TODO: get element type name from the xml -> Avoid Hardcoding - dict set formulationSettingsDict element_type "vms" + + # Set formulation dictionary element type + set element_name [Fluid::write::GetUsedElement] + if {$element_name eq "QSVMS2D" || $element_name eq "QSVMS3D"} { + set element_type "qsvms" + } elseif {$element_name eq "DVMS2D" || $element_name eq "DVMS3D"} { + set element_type "dvms" + } elseif {$element_name eq "FIC2D" || $element_name eq "FIC3D"} { + set element_type "fic" + } else { + set err [concat "Wrong monolithic element type: " $element_name] + error $err + } + dict set formulationSettingsDict element_type $element_type + # Set OSS and remove oss_switch from the original dictionary # It is important to check that there is oss_switch, otherwise the derived apps (e.g. embedded) might crash if {[dict exists $solverSettingsDict oss_switch]} { dict set formulationSettingsDict use_orthogonal_subscales [write::getStringBinaryFromValue [dict get $solverSettingsDict oss_switch]] dict unset solverSettingsDict oss_switch } + # Set dynamic tau and remove dynamic_tau from the original dictionary - dict set formulationSettingsDict dynamic_tau [dict get $solverSettingsDict dynamic_tau] - dict unset solverSettingsDict dynamic_tau - # Include the formulation settings in the solver settings dict - dict set solverSettingsDict formulation $formulationSettingsDict + if {$element_name eq "QSVMS2D" || $element_name eq "QSVMS3D"} { + dict set formulationSettingsDict dynamic_tau [dict get $solverSettingsDict dynamic_tau] + dict unset solverSettingsDict dynamic_tau + # Include the formulation settings in the solver settings dict + dict set solverSettingsDict formulation $formulationSettingsDict + } } return $solverSettingsDict From 104e01f60d9bc78ebe9d7bbfc6cf6b72c452e465 Mon Sep 17 00:00:00 2001 From: Joaquin Gonzalez Date: Mon, 19 Oct 2020 15:07:58 +0200 Subject: [PATCH 054/556] Addressing recommendations --- kratos.gid/apps/DEM/write/writeProjectParameters.tcl | 2 +- kratos.gid/apps/FluidDEM/xml/XmlController.tcl | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 5f6397f1e..642ada9f9 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -69,8 +69,8 @@ proc DEM::write::getParametersDict { } { dict set strategy_parameters_dict "RemoveBallsInitiallyTouchingWalls" [write::getValue AdvOptions RemoveParticlesInWalls] dict set strategy_parameters_dict "strategy" $dem_strategy - dict set project_parameters_dict "solver_settings" $strategy_parameters_dict + dict set project_parameters_dict "solver_settings" $strategy_parameters_dict dict set project_parameters_dict "VirtualMassCoefficient" [write::getValue AdvOptions VirtualMassCoef] dict set project_parameters_dict "RollingFrictionOption" [write::getValue AdvOptions RollingFriction] dict set project_parameters_dict "GlobalDamping" [write::getValue AdvOptions GlobalDamping] diff --git a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl index c66e57866..b17f4f54c 100644 --- a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl @@ -80,7 +80,6 @@ proc FluidDEM::xml::CustomTree { args } { # set result_node [$root selectNodes "[spdAux::getRoute FLResults]/container\[@n = 'GiDOptions'\]"] # if { $result_node ne "" } {$result_node delete} - spdAux::SetValueOnTreeItem state enabled FLSolStrat spdAux::SetValueOnTreeItem state disabled FLScheme spdAux::SetValueOnTreeItem state hidden FLResults FileLabel spdAux::SetValueOnTreeItem state hidden FLResults OutputControlType From 4ea1b67bcc9168248ff1bad6e0d5cdeb8f1226d4 Mon Sep 17 00:00:00 2001 From: Joaquin Gonzalez Date: Mon, 19 Oct 2020 17:18:45 +0200 Subject: [PATCH 055/556] Add state in the Exact conditions to be hidden in Release mode --- kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd index 048ff6e73..e64000410 100644 --- a/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd +++ b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd @@ -1,4 +1,4 @@ - + \ No newline at end of file From b96d0958a7170deeb7d7155805015a6fb17e771e Mon Sep 17 00:00:00 2001 From: Joaquin Gonzalez Date: Mon, 19 Oct 2020 18:19:15 +0200 Subject: [PATCH 056/556] Added a state attribute to hide the Manufactured condition in release mode --- kratos.gid/apps/FluidDEM/xml/Conditions.xml | 19 ------------------ .../FluidDEM/xml/ManufacturedConditions.spd | 4 ++-- .../apps/FluidDEM/xml/NodalConditions.xml | 20 +++++++++++++++++++ kratos.gid/apps/FluidDEM/xml/Processes.xml | 4 ++-- 4 files changed, 24 insertions(+), 23 deletions(-) create mode 100644 kratos.gid/apps/FluidDEM/xml/NodalConditions.xml diff --git a/kratos.gid/apps/FluidDEM/xml/Conditions.xml b/kratos.gid/apps/FluidDEM/xml/Conditions.xml index be52e9eca..0988cdfd4 100644 --- a/kratos.gid/apps/FluidDEM/xml/Conditions.xml +++ b/kratos.gid/apps/FluidDEM/xml/Conditions.xml @@ -17,23 +17,4 @@ - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd index e64000410..9fe7e616e 100644 --- a/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd +++ b/kratos.gid/apps/FluidDEM/xml/ManufacturedConditions.spd @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/NodalConditions.xml b/kratos.gid/apps/FluidDEM/xml/NodalConditions.xml new file mode 100644 index 000000000..cacb596aa --- /dev/null +++ b/kratos.gid/apps/FluidDEM/xml/NodalConditions.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Processes.xml b/kratos.gid/apps/FluidDEM/xml/Processes.xml index 58f55fd9a..2cfb59797 100644 --- a/kratos.gid/apps/FluidDEM/xml/Processes.xml +++ b/kratos.gid/apps/FluidDEM/xml/Processes.xml @@ -9,10 +9,10 @@ - + - + From 394e451f204ff1d6510ae2e9113066c72fccb06b Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 21 Oct 2020 17:49:09 +0200 Subject: [PATCH 057/556] Interface for coupling Pfem and ConvDiff --- .../xml/NodalConditions.xml | 3 +- .../apps/ConvectionDiffusion/xml/Procs.spd | 5 + .../apps/PfemFluid/xml/ConstitutiveLaws.xml | 12 +- kratos.gid/apps/PfemFluid/xml/Procs.spd | 5 + .../apps/PfemFluid/xml/XmlController.tcl | 23 + kratos.gid/apps/PfemLauncher/start.tcl | 3 +- .../PfemThermic/examples/ThermicSloshing.tcl | 112 +++ .../apps/PfemThermic/examples/examples.tcl | 15 + kratos.gid/apps/PfemThermic/images/logo.png | Bin 0 -> 4662 bytes kratos.gid/apps/PfemThermic/start.tcl | 63 ++ kratos.gid/apps/PfemThermic/write/write.tcl | 50 ++ .../write/writeProjectParameters.tcl | 679 ++++++++++++++++++ kratos.gid/apps/PfemThermic/xml/Main.spd | 33 + kratos.gid/apps/PfemThermic/xml/Procs.spd | 99 +++ .../apps/PfemThermic/xml/XmlController.tcl | 94 +++ kratos.gid/kratos_default.spd | 1 + 16 files changed, 1192 insertions(+), 5 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/examples.tcl create mode 100644 kratos.gid/apps/PfemThermic/images/logo.png create mode 100644 kratos.gid/apps/PfemThermic/start.tcl create mode 100644 kratos.gid/apps/PfemThermic/write/write.tcl create mode 100644 kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl create mode 100644 kratos.gid/apps/PfemThermic/xml/Main.spd create mode 100644 kratos.gid/apps/PfemThermic/xml/Procs.spd create mode 100644 kratos.gid/apps/PfemThermic/xml/XmlController.tcl diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml b/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml index 539214c74..4ce83870b 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml +++ b/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml @@ -1,7 +1,8 @@ - + diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd index 53779c99b..7553ce135 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd @@ -35,4 +35,9 @@ return $r ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml index 1ab7b8193..c72335156 100644 --- a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml @@ -104,10 +104,12 @@ - + + @@ -118,6 +120,8 @@ + + @@ -128,6 +132,8 @@ + + @@ -141,6 +147,8 @@ + + @@ -149,7 +157,7 @@ - --> + diff --git a/kratos.gid/apps/PfemFluid/xml/Procs.spd b/kratos.gid/apps/PfemFluid/xml/Procs.spd index 15a210566..ac5ea828e 100644 --- a/kratos.gid/apps/PfemFluid/xml/Procs.spd +++ b/kratos.gid/apps/PfemFluid/xml/Procs.spd @@ -35,6 +35,11 @@ return [PfemFluid::xml::ProcGetElementsValues $domNode $args] ]]> + + + &{tASwwX#()q{oFRwA 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl new file mode 100644 index 000000000..5a3055df0 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -0,0 +1,63 @@ +namespace eval ::PfemThermic { + # Variable declaration + variable dir + variable prefix + variable attributes + variable kratos_name +} + +proc ::PfemThermic::Init { } { + # Variable initialization + variable dir + variable prefix + variable kratos_name + variable attributes + + set attributes [dict create] + set kratos_name PfemThermicDynamicsApplication + + set dir [apps::getMyDir "PfemThermic"] + set prefix PFEMTHERMIC_ + + set ::spdAux::TreeVisibility 0 + + apps::LoadAppById "PfemFluid" + apps::LoadAppById "ConvectionDiffusion" + + if {$::Kratos::kratos_private(DevMode) ne "dev"} {error [= "You need to change to Developer mode in the Kratos menu"] } + + # Intervals + dict set attributes UseIntervals 1 + + # Allow to open the tree + set ::spdAux::TreeVisibility 1 + + set ::Model::ValidSpatialDimensions [list 2D 3D] + + dict set attributes UseRestart 1 + LoadMyFiles +} + +proc ::PfemThermic::LoadMyFiles { } { + variable dir + uplevel #0 [list source [file join $dir examples examples.tcl]] + uplevel #0 [list source [file join $dir xml XmlController.tcl]] + uplevel #0 [list source [file join $dir write write.tcl]] + uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] +} + +proc ::PfemThermic::GetAttribute {name} { + variable attributes + set value "" + if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} + return $value +} + +proc ::PfemThermic::CustomToolbarItems { } { + variable dir + if {$::Model::SpatialDimension eq "2D"} { + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicSloshing] [= "Example\nThermic sloshing"] + } +} + +::PfemThermic::Init diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl new file mode 100644 index 000000000..35b8562b7 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -0,0 +1,50 @@ +namespace eval ::PfemThermic::write { +} + +proc ::PfemThermic::write::Init { } { + + SetAttribute main_script_file "MainKratos.py" +} + +# Events +proc PfemThermic::write::writeModelPartEvent { } { + + PfemFluid::write::Init + PfemFluid::write::writeModelPartEvent + + ConvectionDiffusion::write::Init + set ConvectionDiffusion::write::delete_previous_mdpa 0 + ConvectionDiffusion::write::writeModelPartEvent +} + +proc PfemThermic::write::writeCustomFilesEvent { } { + SetAttribute main_script_file "MainKratos.py" + set orig_name [GetAttribute main_script_file] + write::CopyFileIntoModel [file join "python" $orig_name ] +} + +proc PfemThermic::write::WriteMaterialsFile { } { + +} + +proc PfemThermic::write::SetAttribute {att val} { + ConvectionDiffusion::write::SetAttribute $att $val +} + +proc PfemThermic::write::GetAttribute {att} { + return [ConvectionDiffusion::write::GetAttribute $att] +} + +proc PfemThermic::write::GetAttributes {} { + return [ConvectionDiffusion::write::GetAttributes] +} + +proc PfemThermic::write::AddAttributes {configuration} { + ConvectionDiffusion::write::AddAttributes $configuration +} + +proc PfemThermic::write::AddValidApps {appid} { + ConvectionDiffusion::write::AddAttribute validApps $appid +} + +PfemThermic::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl new file mode 100644 index 000000000..72c4a7b44 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -0,0 +1,679 @@ + +proc PfemFluid::write::writeParametersEvent { } { + write::WriteJSON [getNewParametersDict] + write::SetParallelismConfiguration +} + +# Project Parameters +proc PfemFluid::write::getNewParametersDict { } { + PfemFluid::write::CalculateMyVariables + set projectParametersDict [dict create] + + ##### Problem data ##### + # Create section + set problemDataDict [GetPFEM_ProblemDataDict] + # Add section to document + dict set projectParametersDict problem_data $problemDataDict + + ##### solver_settings ##### + set solverSettingsDict [GetPFEM_SolverSettingsDict] + dict set projectParametersDict solver_settings $solverSettingsDict + + ##### problem_process_list + set problemProcessList [GetPFEM_ProblemProcessList] + dict set projectParametersDict problem_process_list $problemProcessList + + set processList [GetPFEM_ProcessList] + dict set projectParametersDict processes $processList + + ##### Restart + # set output_process_list [GetPFEM_OutputProcessList] + # dict set projectParametersDict output_process_list $output_process_list + + ##### output_configuration + # dict set projectParametersDict output_configuration [write::GetDefaultOutputDict] + set xpath [spdAux::getRoute Results] + dict set projectParametersDict output_configuration [write::GetDefaultOutputGiDDict PfemFluid $xpath] + dict set projectParametersDict output_configuration result_file_configuration nodal_results [write::GetResultsByXPathList [spdAux::getRoute NodalResults]] + dict set projectParametersDict output_configuration result_file_configuration gauss_point_results [write::GetResultsList ElementResults] + + + return $projectParametersDict +} + +proc PfemFluid::write::GetPFEM_ProblemDataDict { } { + set problemDataDict [dict create] + dict set problemDataDict problem_name [Kratos::GetModelName] + + # Time Parameters + set time_params [PfemFluid::write::GetTimeSettings] + dict set problemDataDict start_time [dict get $time_params start_time] + dict set problemDataDict end_time [dict get $time_params end_time] + dict set problemDataDict echo_level [write::getValue Results EchoLevel] + + # Parallelization + # dict set problemDataDict "parallel_type" "OpenMP" + dict set problemDataDict parallel_type [write::getValue Parallelization ParallelSolutionType] + + dict set problemDataDict threads [write::getValue Parallelization OpenMPNumberOfThreads] + dict set problemDataDict gravity_vector [PfemFluid::write::GetGravity] + + return $problemDataDict +} + +proc PfemFluid::write::GetTimeSettings { } { + set result [dict create] + dict set result time_step [write::getValue PFEMFLUID_TimeParameters DeltaTime] + dict set result start_time [write::getValue PFEMFLUID_TimeParameters StartTime] + dict set result end_time [write::getValue PFEMFLUID_TimeParameters EndTime] + return $result +} + +proc PfemFluid::write::GetPFEM_SolverSettingsDict { } { + variable bodies_list + + set solverSettingsDict [dict create] + set currentStrategyId [write::getValue PFEMFLUID_SolStrat] + set strategy_write_name [[::Model::GetSolutionStrategy $currentStrategyId] getAttribute "python_module"] + dict set solverSettingsDict solver_type $strategy_write_name + + set problemtype [write::getValue PFEMFLUID_DomainType] + + dict set solverSettingsDict model_part_name [GetAttribute model_part_name] + if {$problemtype eq "Fluids"} { + dict set solverSettingsDict physics_type "fluid" + } + if {$problemtype eq "FSI"} { + dict set solverSettingsDict physics_type "fsi" + } + set nDim $::Model::SpatialDimension + set nDim [expr [string range [write::getValue nDim] 0 0] ] + dict set solverSettingsDict domain_size $nDim + + + # Time stepping settings + set timeSteppingDict [dict create] + + set automaticDeltaTime [write::getValue PFEMFLUID_TimeParameters UseAutomaticDeltaTime] + if {$automaticDeltaTime eq "Yes"} { + dict set timeSteppingDict automatic_time_step "true" + } else { + dict set timeSteppingDict automatic_time_step "false" + } + + dict set timeSteppingDict time_step [write::getValue PFEMFLUID_TimeParameters [dict get $::PfemFluid::write::Names DeltaTime]] + + # set time_params [PfemFluid::write::GetTimeSettings] + # dict set timeSteppingDict "time_step" [dict get $time_params time_step] + + dict set solverSettingsDict time_stepping $timeSteppingDict + + # dict set problemDataDict time_step [dict get $time_params time_step] + + + # model import settings + set modelDict [dict create] + dict set modelDict input_type "mdpa" + dict set modelDict input_filename [Kratos::GetModelName] + # dict set modelDict input_file_label 0 + dict set solverSettingsDict model_import_settings $modelDict + + # Solution strategy parameters and Solvers + set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict PFEMFLUID_SolStrat PFEMFLUID_Scheme PFEMFLUID_StratParams] ] + set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict PfemFluid] ] + + set bodies_parts_list [list ] + foreach body $bodies_list { + set body_parts [dict get $body parts_list] + foreach part $body_parts { + lappend bodies_parts_list $part + } + } + + dict set solverSettingsDict bodies_list $bodies_list + dict set solverSettingsDict problem_domain_sub_model_part_list $bodies_parts_list + dict set solverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames "PFEMFLUID_NodalConditions" "PFEMFLUID_Loads"] + + set materialsDict [dict create] + dict set materialsDict materials_filename [GetAttribute materials_file] + dict set solverSettingsDict material_import_settings $materialsDict + + return $solverSettingsDict +} + +proc PfemFluid::write::GetPFEM_OutputProcessList { } { + set resultList [list] + # lappend resultList [write::GetRestartProcess Restart] + return $resultList +} +proc PfemFluid::write::GetPFEM_ProblemProcessList { } { + set resultList [list ] + set problemtype [write::getValue PFEMFLUID_DomainType] + lappend resultList [GetPFEM_FluidRemeshDict] + return $resultList +} + +proc PfemFluid::write::GetPFEM_ProcessList { } { + set resultList [list ] + + set group_constraints [write::getConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] + set body_constraints [PfemFluid::write::getBodyConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] + dict set resultList constraints_process_list [concat $group_constraints $body_constraints] + + ##### loads_process_list + dict set resultList loads_process_list [write::getConditionsParametersDict PFEMFLUID_Loads] + + dict set resultList auxiliar_process_list [] + + return $resultList +} + +proc PfemFluid::write::GetBodiesWithContactList {contact_name} { + set bodies_list [list ] + set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" + foreach body_node [[customlib::GetBaseRoot] selectNodes $xp1] { + if {[get_domnode_attribute $body_node state] ne "hidden"} { + set contact [get_domnode_attribute [$body_node selectNodes ".//value\[@n='ContactStrategy'\]"] v] + if {$contact eq $contact_name} {lappend bodies_list [get_domnode_attribute $body_node name]} + } + } + return $bodies_list +} + + +proc PfemFluid::write::GetContactProperty { contact_name property } { + set ret "" + set root [customlib::GetBaseRoot] + set ret [get_domnode_attribute [$root selectNodes "[spdAux::getRoute PFEMFLUID_contacts]/blockdata\[@name='$contact_name'\]/value\[@n='$property'\]"] v] + if {$ret eq ""} {set ret null} + return $ret +} + +proc PfemFluid::write::GetPFEM_RemeshDict { } { + variable bodies_list + set resultDict [dict create ] + dict set resultDict "help" "This process applies meshing to the problem domains" + dict set resultDict "kratos_module" "KratosMultiphysics.PfemFluidDynamicsApplication" + dict set resultDict "python_module" "remesh_domains_process" + dict set resultDict "process_name" "RemeshDomainsProcess" + + set paramsDict [dict create] + dict set paramsDict "model_part_name" [GetAttribute model_part_name] + dict set paramsDict "meshing_control_type" "step" + dict set paramsDict "meshing_frequency" 1.0 + dict set paramsDict "meshing_before_output" true + set meshing_domains_list [list ] + foreach body $bodies_list { + set bodyDict [dict create ] + set body_name [dict get $body body_name] + dict set bodyDict "python_module" "meshing_domain" + dict set bodyDict "model_part_name" $body_name + dict set bodyDict "alpha_shape" 2.4 + dict set bodyDict "offset_factor" 0.0 + set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] + set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] + set meshing_strategyDict [dict create ] + dict set meshing_strategyDict "python_module" "meshing_strategy" + dict set meshing_strategyDict "meshing_frequency" 0 + dict set meshing_strategyDict "remesh" $remesh + dict set meshing_strategyDict "refine" $refine + dict set meshing_strategyDict "reconnect" false + dict set meshing_strategyDict "transfer" false + dict set meshing_strategyDict "constrained" false + dict set meshing_strategyDict "mesh_smoothing" false + dict set meshing_strategyDict "variables_smoothing" false + dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] + set nDim $::Model::SpatialDimension + if {$nDim eq "3D"} { + dict set meshing_strategyDict "reference_element_type" "Element3D4N" + dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" + } else { + dict set meshing_strategyDict "reference_element_type" "Element2D3N" + dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" + } + dict set bodyDict meshing_strategy $meshing_strategyDict + + + set spatial_bounding_boxDict [dict create ] + dict set spatial_bounding_boxDict "use_bounding_box" [write::getValue PFEMFLUID_BoundingBox UseBoundingBox] + dict set spatial_bounding_boxDict "initial_time" [write::getValue PFEMFLUID_BoundingBox StartTime] + dict set spatial_bounding_boxDict "final_time" [write::getValue PFEMFLUID_BoundingBox StopTime] + dict set spatial_bounding_boxDict "upper_point" [PfemFluid::write::GetUpperPointBoundingBox] + dict set spatial_bounding_boxDict "lower_point" [PfemFluid::write::GetLowerPointBoundingBox] + dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict + + set spatial_refining_boxDict [dict create ] + dict set spatial_refining_boxDict "mesh_size" [write::getValue PFEMFLUID_RefiningBox RefinedMeshSize] + dict set spatial_refining_boxDict "use_refining_box" [write::getValue PFEMFLUID_RefiningBox UseRefiningBox] + dict set spatial_refining_boxDict "initial_time" [write::getValue PFEMFLUID_RefiningBox StartTime] + dict set spatial_refining_boxDict "final_time" [write::getValue PFEMFLUID_RefiningBox StopTime] + dict set spatial_refining_boxDict "upper_point" [PfemFluid::write::GetUpperPointRefiningBox] + dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] + dict set bodyDict spatial_refining_box $spatial_refining_boxDict + + set refining_parametersDict [dict create ] + dict set refining_parametersDict "critical_size" 0.0 + dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" + dict set refining_parametersDict "reference_threshold" 0.0 + dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" + dict set refining_parametersDict "reference_error" 0.0 + dict set refining_parametersDict "add_nodes" true + dict set refining_parametersDict "insert_nodes" false + + set remove_nodesDict [dict create] + dict set remove_nodesDict "apply_removal" false + dict set remove_nodesDict "on_distance" false + dict set remove_nodesDict "on_threshold" false + dict set remove_nodesDict "on_error" false + dict set refining_parametersDict remove_nodes $remove_nodesDict + + set remove_boundaryDict [dict create] + dict set remove_boundaryDict "apply_removal" false + dict set remove_boundaryDict "on_distance" false + dict set remove_boundaryDict "on_threshold" false + dict set remove_boundaryDict "on_error" false + dict set refining_parametersDict remove_boundary $remove_boundaryDict + + set refine_elementsDict [dict create] + dict set refine_elementsDict "apply_refinement" false + dict set refine_elementsDict "on_distance" false + dict set refine_elementsDict "on_threshold" false + dict set refine_elementsDict "on_error" false + dict set refining_parametersDict refine_elements $refine_elementsDict + + set refine_boundaryDict [dict create] + dict set refine_boundaryDict "apply_refinement" false + dict set refine_boundaryDict "on_distance" false + dict set refine_boundaryDict "on_threshold" false + dict set refine_boundaryDict "on_error" false + dict set refining_parametersDict refine_boundary $refine_boundaryDict + + dict set bodyDict refining_parameters $refining_parametersDict + + lappend meshing_domains_list $bodyDict + } + dict set paramsDict meshing_domains $meshing_domains_list + dict set resultDict Parameters $paramsDict + return $resultDict +} + + + +proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { + variable bodies_list + set resultDict [dict create ] + dict set resultDict "help" "This process applies meshing to the problem domains" + dict set resultDict "kratos_module" "KratosMultiphysics.PfemFluidDynamicsApplication" + set problemtype [write::getValue PFEMFLUID_DomainType] + + dict set resultDict "python_module" "remesh_fluid_domains_process" + dict set resultDict "process_name" "RemeshFluidDomainsProcess" + + set paramsDict [dict create] + dict set paramsDict "model_part_name" [GetAttribute model_part_name] + dict set paramsDict "meshing_control_type" "step" + dict set paramsDict "meshing_frequency" 1.0 + dict set paramsDict "meshing_before_output" true + + set update_conditionsDict [dict create ] + dict set update_conditionsDict "update_conditions" false + dict set paramsDict update_conditions_on_free_surface $update_conditionsDict + + set meshing_domains_list [list ] + foreach body $bodies_list { + set bodyDict [dict create ] + set body_name [dict get $body body_name] + dict set bodyDict "model_part_name" $body_name + dict set bodyDict "python_module" "fluid_meshing_domain" + set nDim $::Model::SpatialDimension + if {$nDim eq "3D"} { + dict set bodyDict "alpha_shape" 1.3 + } else { + dict set bodyDict "alpha_shape" 1.25 + } + dict set bodyDict "offset_factor" 0.0 + set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] + set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] + set meshing_strategyDict [dict create ] + dict set meshing_strategyDict "python_module" "fluid_meshing_strategy" + dict set meshing_strategyDict "meshing_frequency" 0 + dict set meshing_strategyDict "remesh" $remesh + dict set meshing_strategyDict "refine" $refine + dict set meshing_strategyDict "reconnect" false + dict set meshing_strategyDict "transfer" false + dict set meshing_strategyDict "constrained" false + dict set meshing_strategyDict "mesh_smoothing" false + dict set meshing_strategyDict "variables_smoothing" false + dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] + if {$nDim eq "3D"} { + dict set meshing_strategyDict "reference_element_type" "TwoStepUpdatedLagrangianVPFluidElement3D" + dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" + } else { + dict set meshing_strategyDict "reference_element_type" "TwoStepUpdatedLagrangianVPFluidElement2D" + dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" + } + dict set bodyDict meshing_strategy $meshing_strategyDict + + if {[spdAux::getRoute PFEMFLUID_BoundingBox] ne ""} { + set spatial_bounding_boxDict [dict create ] + dict set spatial_bounding_boxDict "use_bounding_box" [write::getValue PFEMFLUID_BoundingBox UseBoundingBox] + dict set spatial_bounding_boxDict "initial_time" [write::getValue PFEMFLUID_BoundingBox StartTime] + dict set spatial_bounding_boxDict "final_time" [write::getValue PFEMFLUID_BoundingBox StopTime] + dict set spatial_bounding_boxDict "upper_point" [PfemFluid::write::GetUpperPointBoundingBox] + dict set spatial_bounding_boxDict "lower_point" [PfemFluid::write::GetLowerPointBoundingBox] + dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict + } + + set spatial_refining_boxDict [dict create ] + dict set spatial_refining_boxDict "use_refining_box" [write::getValue PFEMFLUID_RefiningBox UseRefiningBox] + dict set spatial_refining_boxDict "mesh_size" [write::getValue PFEMFLUID_RefiningBox RefinedMeshSize] + dict set spatial_refining_boxDict "initial_time" [write::getValue PFEMFLUID_RefiningBox StartTime] + dict set spatial_refining_boxDict "final_time" [write::getValue PFEMFLUID_RefiningBox StopTime] + dict set spatial_refining_boxDict "upper_point" [PfemFluid::write::GetUpperPointRefiningBox] + dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] + dict set bodyDict spatial_refining_box $spatial_refining_boxDict + + set refining_parametersDict [dict create ] + dict set refining_parametersDict "critical_size" 0.0 + dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" + dict set refining_parametersDict "reference_threshold" 0.0 + dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" + dict set refining_parametersDict "reference_error" 0.0 + dict set refining_parametersDict "add_nodes" false + dict set refining_parametersDict "insert_nodes" true + + set remove_nodesDict [dict create] + dict set remove_nodesDict "apply_removal" true + dict set remove_nodesDict "on_distance" true + dict set remove_nodesDict "on_threshold" false + dict set remove_nodesDict "on_error" false + dict set refining_parametersDict remove_nodes $remove_nodesDict + + set remove_boundaryDict [dict create] + dict set remove_boundaryDict "apply_removal" false + dict set remove_boundaryDict "on_distance" false + dict set remove_boundaryDict "on_threshold" false + dict set remove_boundaryDict "on_error" false + dict set refining_parametersDict remove_boundary $remove_boundaryDict + + set refine_elementsDict [dict create] + dict set refine_elementsDict "apply_refinement" true + dict set refine_elementsDict "on_distance" true + dict set refine_elementsDict "on_threshold" false + dict set refine_elementsDict "on_error" false + dict set refining_parametersDict refine_elements $refine_elementsDict + + set refine_boundaryDict [dict create] + dict set refine_boundaryDict "apply_refinement" false + dict set refine_boundaryDict "on_distance" false + dict set refine_boundaryDict "on_threshold" false + dict set refine_boundaryDict "on_error" false + dict set refining_parametersDict refine_boundary $refine_boundaryDict + + dict set bodyDict refining_parameters $refining_parametersDict + + lappend meshing_domains_list $bodyDict + } + dict set paramsDict meshing_domains $meshing_domains_list + dict set resultDict Parameters $paramsDict + return $resultDict +} + +proc PfemFluid::write::GetRemeshProperty { body_name property } { + set ret "" + set root [customlib::GetBaseRoot] + set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" + set remesh_name "" + foreach body_node [$root selectNodes $xp1] { + if {[$body_node @name] eq $body_name && [get_domnode_attribute $body_node state] ne "hidden"} { + set remesh_name [get_domnode_attribute [$body_node selectNodes ".//value\[@n='MeshingStrategy'\]"] v] + break + } + } + if {$remesh_name ne ""} { + variable remesh_domains_dict + if {[dict exists $remesh_domains_dict ${remesh_name} $property]} { + set ret [dict get $remesh_domains_dict ${remesh_name} $property] + } + } + if {$ret eq ""} {set ret false} + return $ret +} + + +proc PfemFluid::write::ProcessBodiesList { } { + customlib::UpdateDocument + set bodiesList [list ] + set root [customlib::GetBaseRoot] + set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" + foreach body_node [$root selectNodes $xp1] { + if {[get_domnode_attribute $body_node state] ne "hidden"} { + set body [dict create] + set name [$body_node @name] + set body_type_path ".//value\[@n='BodyType'\]" + set body_type [get_domnode_attribute [$body_node selectNodes $body_type_path] v] + set parts [list ] + foreach part_node [$body_node selectNodes "./condition/group"] { + lappend parts [write::getSubModelPartId "Parts" [$part_node @n]] + } + dict set body "body_type" $body_type + dict set body "body_name" $name + dict set body "parts_list" $parts + lappend bodiesList $body + } + } + return $bodiesList +} + +proc PfemFluid::write::GetNodalDataDict { } { + set root [customlib::GetBaseRoot] + set NodalData [list ] + set parts [list "PFEMFLUID_Rigid2DParts" "PFEMFLUID_Rigid3DParts" "PFEMFLUID_Deformable2DParts" "PFEMFLUID_Deformable3DParts" "PFEMFLUID_Fluid2DParts" "PFEMFLUID_Fluid3DParts"] + + foreach part $parts { + set xp1 "[spdAux::getRoute $part]/group" + set groups [$root selectNodes $xp1] + foreach group $groups { + set partid [[$group parent] @n] + set groupid [$group @n] + set processDict [dict create] + dict set processDict process_name "ApplyValuesToNodes" + dict set processDict kratos_module "KratosMultiphysics.DelaunayMeshingApplication" + + set params [dict create] + set xp2 "./value" + set atts [$group selectNodes $xp2] + #W "$group $groupid $atts" + foreach att $atts { + set state [get_domnode_attribute $att state] + if {$state ne "hidden"} { + set paramName [$att @n] + set paramValue [get_domnode_attribute $att v] + if {$paramName eq "Material"} { + set matdict [::write::getAllMaterialParametersDict $paramValue] + dict set matdict Name $paramValue + dict set params $paramName $matdict + } { + if {[write::isBoolean $paramValue]} {set paramValue [expr $paramValue]} + dict set params $paramName $paramValue + } + } + } + dict set params "model_part_name" [::write::getSubModelPartId $partid $groupid] + dict set processDict "Parameters" $params + lappend NodalData $processDict + } + } + + return $NodalData +} + +proc PfemFluid::write::ProcessRemeshDomainsDict { } { + customlib::UpdateDocument + set domains_dict [dict create ] + set root [customlib::GetBaseRoot] + set xp1 "[spdAux::getRoute "PFEMFLUID_meshing_domains"]/blockdata" + foreach domain_node [$root selectNodes $xp1] { + set name [$domain_node @name] + foreach part_node [$domain_node selectNodes "./value"] { + dict set domains_dict $name [get_domnode_attribute $part_node n] [get_domnode_attribute $part_node v] + } + } + return $domains_dict +} + +proc PfemFluid::write::CalculateMyVariables { } { + variable bodies_list + set bodies_list [PfemFluid::write::ProcessBodiesList] + variable remesh_domains_dict + set remesh_domains_dict [PfemFluid::write::ProcessRemeshDomainsDict] +} + + + +proc PfemFluid::write::getBodyConditionsParametersDict {un {condition_type "Condition"}} { + set root [customlib::GetBaseRoot] + return [list ] + set bcCondsDict [list ] + + set xp1 "[spdAux::getRoute $un]/container/blockdata" + set blocks [$root selectNodes $xp1] + + foreach block $blocks { + set groupName [$block @name] + set cid [[$block parent] @n] + get_domnode_attribute [$block find n Body] values + set bodyId [get_domnode_attribute [$block find n Body] v] + + if {$condition_type eq "Condition"} { + error [= "Body conditions (not nodal) Not implemented yet."] + #set condition [::Model::getCondition $cid] + } { + set condition [PfemFluid::xml::getBodyNodalConditionById $cid] + } + set processName [$condition getProcessName] + #set processName [[$block parent] @processname] + + set process [::Model::GetProcess $processName] + set processDict [dict create] + set paramDict [dict create] + dict set paramDict model_part_name $bodyId + set vatiable_name [$condition getAttribute VariableName] + dict set paramDict variable_name [lindex $vatiable_name 0] + + set process_attributes [$process getAttributes] + set process_parameters [$process getInputs] + + dict set process_attributes process_name [dict get $process_attributes n] + dict unset process_attributes n + dict unset process_attributes pn + + set processDict [dict merge $processDict $process_attributes] + + foreach {inputName in_obj} $process_parameters { + set in_type [$in_obj getType] + if {$in_type eq "vector"} { + if {[$in_obj getAttribute vectorType] eq "bool"} { + set ValX [expr [get_domnode_attribute [$block find n ${inputName}X] v] ? True : False] + set ValY [expr [get_domnode_attribute [$block find n ${inputName}Y] v] ? True : False] + set ValZ [expr False] + if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [get_domnode_attribute [$block find n ${inputName}Z] v] ? True : False]} + dict set paramDict $inputName [list $ValX $ValY $ValZ] + } { + if {[$in_obj getAttribute "enabled"] in [list "1" "0"]} { + foreach i [list "X" "Y" "Z"] { + if {[expr [get_domnode_attribute [$block find n Enabled_$i] v] ] ne "Yes"} { + set Val$i null + } else { + set printed 0 + if {[$in_obj getAttribute "function"] eq "1"} { + if {[get_domnode_attribute [$block find n "ByFunction$i"] v] eq "Yes"} { + set funcinputName "${i}function_$inputName" + set value [get_domnode_attribute [$block find n $funcinputName] v] + set Val$i $value + set printed 1 + } + } + if {!$printed} { + set value [expr [get_domnode_attribute [$block find n ${inputName}$i] v] ] + set Val$i $value + } + } + } + } else { + set ValX [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}X]] ] + set ValY [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Y]] ] + set ValZ [expr 0.0] + if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Z]]]} + } + dict set paramDict $inputName [list $ValX $ValY $ValZ] + } + } elseif {$in_type eq "double" || $in_type eq "integer"} { + set printed 0 + if {[$in_obj getAttribute "function"] eq "1"} { + if {[get_domnode_attribute [$block find n "ByFunction"] v] eq "Yes"} { + set funcinputName "function_$inputName" + set value [get_domnode_attribute [$block find n $funcinputName] v] + dict set paramDict $inputName $value + set printed 1 + } + } + if {!$printed} { + set value [gid_groups_conds::convert_value_to_default [$block find n $inputName]] + dict set paramDict $inputName [expr $value] + } + } elseif {$in_type eq "bool"} { + set value [get_domnode_attribute [$block find n $inputName] v] + set value [expr $value ? True : False] + dict set paramDict $inputName [expr $value] + } elseif {$in_type eq "tablefile"} { + set value [get_domnode_attribute [$block find n $inputName] v] + dict set paramDict $inputName $value + } else { + if {[get_domnode_attribute [$block find n $inputName] state] ne "hidden" } { + set value [get_domnode_attribute [$block find n $inputName] v] + dict set paramDict $inputName $value + } + } + } + if {[$block find n Interval] ne ""} {dict set paramDict interval [write::getInterval [get_domnode_attribute [$block find n Interval] v]] } + dict set processDict Parameters $paramDict + lappend bcCondsDict $processDict + } + return $bcCondsDict +} + +proc PfemFluid::write::GetGravity { } { + set cx [write::getValue PFEMFLUID_Gravity Cx] + set cy [write::getValue PFEMFLUID_Gravity Cy] + set cz [write::getValue PFEMFLUID_Gravity Cz] + return [list $cx $cy $cz] +} + +proc PfemFluid::write::GetLowerPointBoundingBox { } { + set minX [write::getValue PFEMFLUID_BoundingBox MinX] + set minY [write::getValue PFEMFLUID_BoundingBox MinY] + set minZ [write::getValue PFEMFLUID_BoundingBox MinZ] + return [list $minX $minY $minZ] +} + +proc PfemFluid::write::GetUpperPointBoundingBox { } { + set maxX [write::getValue PFEMFLUID_BoundingBox MaxX] + set maxY [write::getValue PFEMFLUID_BoundingBox MaxY] + set maxZ [write::getValue PFEMFLUID_BoundingBox MaxZ] + return [list $maxX $maxY $maxZ] +} + +proc PfemFluid::write::GetLowerPointRefiningBox { } { + set minX [write::getValue PFEMFLUID_RefiningBox MinX] + set minY [write::getValue PFEMFLUID_RefiningBox MinY] + set minZ [write::getValue PFEMFLUID_RefiningBox MinZ] + return [list $minX $minY $minZ] +} + +proc PfemFluid::write::GetUpperPointRefiningBox { } { + set maxX [write::getValue PFEMFLUID_RefiningBox MaxX] + set maxY [write::getValue PFEMFLUID_RefiningBox MaxY] + set maxZ [write::getValue PFEMFLUID_RefiningBox MaxZ] + return [list $maxX $maxY $maxZ] +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/Main.spd b/kratos.gid/apps/PfemThermic/xml/Main.spd new file mode 100644 index 000000000..b7b633081 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/Main.spd @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/Procs.spd b/kratos.gid/apps/PfemThermic/xml/Procs.spd new file mode 100644 index 000000000..00daf2ffb --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/Procs.spd @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl new file mode 100644 index 000000000..7a4ebd8d2 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -0,0 +1,94 @@ +namespace eval PfemThermic::xml { + # Namespace variables declaration + variable dir +} + +proc PfemThermic::xml::Init { } { + # Namespace variables initialization + variable dir + Model::InitVariables dir $PfemThermic::dir +} + +proc PfemThermic::xml::getUniqueName {name} { + return ${::PfemThermic::prefix}${name} +} + +proc PfemThermic::xml::CustomTree { args } { + ConvectionDiffusion::xml::CustomTree + PfemFluid::xml::CustomTree + + spdAux::SetValueOnTreeItem values Fluid PFEMFLUID_DomainType + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat + + set root [customlib::GetBaseRoot] + + set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'ParallelType'\]"] + if { $result_node ne "" } {$result_node delete} + + set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'BodyForce'\]"] + if { $result_node ne "" } {$result_node delete} + + set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'TimeParameters'\]"] + if { $result_node ne "" } {$result_node delete} +} + +proc PfemThermic::xml::ProcGetBodyTypeValues {domNode args} { + set values "Fluid,Rigid" + return $values +} + +proc PfemThermic::xml::ProcCheckNodalConditionState {domNode args} { + set fluid_exclusive_conditions [list "VELOCITY" "INLET" "PRESSURE"] + set current_condition [$domNode @n] + if {$current_condition ni $fluid_exclusive_conditions} { + return hidden + } + return normal +} + +proc PfemThermic::xml::ProcGetElementsValues {domNode args} { + set names [list ] + set blockNode [PfemFluid::xml::FindMyBlocknode $domNode] + set BodyType [get_domnode_attribute [$blockNode selectNodes "value\[@n='BodyType'\]"] v] + set argums [list ElementType $BodyType] + set elems [PfemFluid::xml::GetElements $domNode $args] + + foreach elem $elems { + if {[$elem cumple $argums] && [$elem getName] ne "RigidLagrangianElement2D3N"} { + lappend names [$elem getName] + } + } + + set values [join $names ","] + + if {[get_domnode_attribute $domNode v] eq ""} {$domNode setAttribute v [lindex $names 0]} + if {[get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]} + + return $values +} + +proc PfemThermic::xml::ProcGetConstitutiveLaws {domNode args} { + set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] + set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] + set exclusive_CLs [list "NewtonianTemperatureDependent2DLaw" "NewtonianTemperatureDependent3DLaw" "BinghamTemperatureDependent2DLaw" "BinghamTemperatureDependent3DLaw"] + + if {[llength $Claws] == 0} { + set names [list "None"] + } { + set names [list ] + foreach cl $Claws { + if {[$cl getName] in $exclusive_CLs} { + lappend names [$cl getName] + } + } + } + + set values [join $names ","] + + if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]; spdAux::RequestRefresh} + + return $values +} + +PfemThermic::xml::Init diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 6ff0a2c53..c88293514 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -22,6 +22,7 @@ + From eff0acaa38c46f41b060a09a68587ffc5dcd7aa5 Mon Sep 17 00:00:00 2001 From: AFranci Date: Thu, 22 Oct 2020 13:37:05 +0200 Subject: [PATCH 058/556] Update remeshing parameters in ProjectParameters --- .../write/writeProjectParameters.tcl | 93 ------------------- 1 file changed, 93 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index 72c4a7b44..5fc41d754 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -209,20 +209,13 @@ proc PfemFluid::write::GetPFEM_RemeshDict { } { dict set bodyDict "python_module" "meshing_domain" dict set bodyDict "model_part_name" $body_name dict set bodyDict "alpha_shape" 2.4 - dict set bodyDict "offset_factor" 0.0 set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] set meshing_strategyDict [dict create ] dict set meshing_strategyDict "python_module" "meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 dict set meshing_strategyDict "remesh" $remesh dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] set nDim $::Model::SpatialDimension if {$nDim eq "3D"} { dict set meshing_strategyDict "reference_element_type" "Element3D4N" @@ -233,7 +226,6 @@ proc PfemFluid::write::GetPFEM_RemeshDict { } { } dict set bodyDict meshing_strategy $meshing_strategyDict - set spatial_bounding_boxDict [dict create ] dict set spatial_bounding_boxDict "use_bounding_box" [write::getValue PFEMFLUID_BoundingBox UseBoundingBox] dict set spatial_bounding_boxDict "initial_time" [write::getValue PFEMFLUID_BoundingBox StartTime] @@ -251,45 +243,6 @@ proc PfemFluid::write::GetPFEM_RemeshDict { } { dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] dict set bodyDict spatial_refining_box $spatial_refining_boxDict - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" true - dict set refining_parametersDict "insert_nodes" false - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" false - dict set remove_nodesDict "on_distance" false - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" false - dict set refine_elementsDict "on_distance" false - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - dict set bodyDict refining_parameters $refining_parametersDict - lappend meshing_domains_list $bodyDict } dict set paramsDict meshing_domains $meshing_domains_list @@ -331,20 +284,13 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { } else { dict set bodyDict "alpha_shape" 1.25 } - dict set bodyDict "offset_factor" 0.0 set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] set meshing_strategyDict [dict create ] dict set meshing_strategyDict "python_module" "fluid_meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 dict set meshing_strategyDict "remesh" $remesh dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] if {$nDim eq "3D"} { dict set meshing_strategyDict "reference_element_type" "TwoStepUpdatedLagrangianVPFluidElement3D" dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" @@ -373,45 +319,6 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] dict set bodyDict spatial_refining_box $spatial_refining_boxDict - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" false - dict set refining_parametersDict "insert_nodes" true - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" true - dict set remove_nodesDict "on_distance" true - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" true - dict set refine_elementsDict "on_distance" true - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - dict set bodyDict refining_parameters $refining_parametersDict - lappend meshing_domains_list $bodyDict } dict set paramsDict meshing_domains $meshing_domains_list From 6f4e573132be2173e71d6507450a5a159129e7c8 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Mon, 26 Oct 2020 18:35:02 +0100 Subject: [PATCH 059/556] Writing files of PfemThermic --- .../xml/NodalConditions.xml | 2 +- .../apps/ConvectionDiffusion/xml/Procs.spd | 5 - .../apps/PfemThermic/python/MainKratos.py | 17 + kratos.gid/apps/PfemThermic/write/write.tcl | 41 +- .../write/writeProjectParameters.tcl | 750 +++--------------- kratos.gid/apps/PfemThermic/xml/Procs.spd | 5 - 6 files changed, 115 insertions(+), 705 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/python/MainKratos.py diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml b/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml index 4ce83870b..53723ad10 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml +++ b/kratos.gid/apps/ConvectionDiffusion/xml/NodalConditions.xml @@ -2,7 +2,7 @@ + unit_magnitude="Temp" units="K" App="ConvectionDiffusion" ImplementedInApplication="ConvectionDiffusionApplication" > diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd index 7553ce135..53779c99b 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Procs.spd @@ -35,9 +35,4 @@ return $r ]]> - - - \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/python/MainKratos.py b/kratos.gid/apps/PfemThermic/python/MainKratos.py new file mode 100644 index 000000000..9cab6bb9a --- /dev/null +++ b/kratos.gid/apps/PfemThermic/python/MainKratos.py @@ -0,0 +1,17 @@ +import KratosMultiphysics +import KratosMultiphysics.DelaunayMeshingApplication +import KratosMultiphysics.PfemFluidDynamicsApplication +import KratosMultiphysics.ConvectionDiffusionApplication + +from KratosMultiphysics.PfemFluidDynamicsApplication.pfem_fluid_dynamics_analysis import PfemFluidDynamicsAnalysis + +if __name__ == "__main__": + + with open("ProjectParameters.json",'r') as parameter_file: + parameters = KratosMultiphysics.Parameters(parameter_file.read()) + + model = KratosMultiphysics.Model() + + simulation = PfemFluidDynamicsAnalysis(model,parameters) + + simulation.Run() diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 35b8562b7..135ce67ba 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -1,50 +1,21 @@ namespace eval ::PfemThermic::write { + } -proc ::PfemThermic::write::Init { } { +proc ::PfemThermic::write::Init { } { - SetAttribute main_script_file "MainKratos.py" } -# Events +# MDPA event proc PfemThermic::write::writeModelPartEvent { } { - PfemFluid::write::Init PfemFluid::write::writeModelPartEvent - - ConvectionDiffusion::write::Init - set ConvectionDiffusion::write::delete_previous_mdpa 0 - ConvectionDiffusion::write::writeModelPartEvent } +# Custom files event proc PfemThermic::write::writeCustomFilesEvent { } { - SetAttribute main_script_file "MainKratos.py" - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] -} - -proc PfemThermic::write::WriteMaterialsFile { } { - -} - -proc PfemThermic::write::SetAttribute {att val} { - ConvectionDiffusion::write::SetAttribute $att $val -} - -proc PfemThermic::write::GetAttribute {att} { - return [ConvectionDiffusion::write::GetAttribute $att] -} - -proc PfemThermic::write::GetAttributes {} { - return [ConvectionDiffusion::write::GetAttributes] -} - -proc PfemThermic::write::AddAttributes {configuration} { - ConvectionDiffusion::write::AddAttributes $configuration -} - -proc PfemThermic::write::AddValidApps {appid} { - ConvectionDiffusion::write::AddAttribute validApps $appid + PfemFluid::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] + write::CopyFileIntoModel [file join "python" "MainKratos.py"] } PfemThermic::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 72c4a7b44..84769e5fd 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -1,679 +1,111 @@ - -proc PfemFluid::write::writeParametersEvent { } { +# Parameters event +proc PfemThermic::write::writeParametersEvent { } { write::WriteJSON [getNewParametersDict] - write::SetParallelismConfiguration } -# Project Parameters -proc PfemFluid::write::getNewParametersDict { } { +proc PfemThermic::write::getNewParametersDict { } { PfemFluid::write::CalculateMyVariables set projectParametersDict [dict create] - - ##### Problem data ##### - # Create section - set problemDataDict [GetPFEM_ProblemDataDict] - # Add section to document - dict set projectParametersDict problem_data $problemDataDict - - ##### solver_settings ##### - set solverSettingsDict [GetPFEM_SolverSettingsDict] - dict set projectParametersDict solver_settings $solverSettingsDict - - ##### problem_process_list - set problemProcessList [GetPFEM_ProblemProcessList] - dict set projectParametersDict problem_process_list $problemProcessList - - set processList [GetPFEM_ProcessList] - dict set projectParametersDict processes $processList - - ##### Restart - # set output_process_list [GetPFEM_OutputProcessList] - # dict set projectParametersDict output_process_list $output_process_list - - ##### output_configuration - # dict set projectParametersDict output_configuration [write::GetDefaultOutputDict] - set xpath [spdAux::getRoute Results] - dict set projectParametersDict output_configuration [write::GetDefaultOutputGiDDict PfemFluid $xpath] - dict set projectParametersDict output_configuration result_file_configuration nodal_results [write::GetResultsByXPathList [spdAux::getRoute NodalResults]] + + dict set projectParametersDict problem_data [PfemFluid::write::GetPFEM_ProblemDataDict] + dict set projectParametersDict solver_settings [PfemThermic::write::GetSolverSettingsDict] + dict set projectParametersDict problem_process_list [PfemFluid::write::GetPFEM_ProblemProcessList] + dict set projectParametersDict processes [PfemThermic::write::GetProcessList] + dict set projectParametersDict output_configuration [write::GetDefaultOutputGiDDict PfemFluid [spdAux::getRoute Results]] + dict set projectParametersDict output_configuration result_file_configuration nodal_results [write::GetResultsByXPathList [spdAux::getRoute NodalResults]] dict set projectParametersDict output_configuration result_file_configuration gauss_point_results [write::GetResultsList ElementResults] - - + return $projectParametersDict } -proc PfemFluid::write::GetPFEM_ProblemDataDict { } { - set problemDataDict [dict create] - dict set problemDataDict problem_name [Kratos::GetModelName] - - # Time Parameters - set time_params [PfemFluid::write::GetTimeSettings] - dict set problemDataDict start_time [dict get $time_params start_time] - dict set problemDataDict end_time [dict get $time_params end_time] - dict set problemDataDict echo_level [write::getValue Results EchoLevel] - - # Parallelization - # dict set problemDataDict "parallel_type" "OpenMP" - dict set problemDataDict parallel_type [write::getValue Parallelization ParallelSolutionType] - - dict set problemDataDict threads [write::getValue Parallelization OpenMPNumberOfThreads] - dict set problemDataDict gravity_vector [PfemFluid::write::GetGravity] - - return $problemDataDict -} - -proc PfemFluid::write::GetTimeSettings { } { - set result [dict create] - dict set result time_step [write::getValue PFEMFLUID_TimeParameters DeltaTime] - dict set result start_time [write::getValue PFEMFLUID_TimeParameters StartTime] - dict set result end_time [write::getValue PFEMFLUID_TimeParameters EndTime] - return $result -} - -proc PfemFluid::write::GetPFEM_SolverSettingsDict { } { - variable bodies_list - +proc PfemThermic::write::GetSolverSettingsDict { } { + # GENERAL SETTINGS set solverSettingsDict [dict create] - set currentStrategyId [write::getValue PFEMFLUID_SolStrat] - set strategy_write_name [[::Model::GetSolutionStrategy $currentStrategyId] getAttribute "python_module"] - dict set solverSettingsDict solver_type $strategy_write_name - - set problemtype [write::getValue PFEMFLUID_DomainType] - - dict set solverSettingsDict model_part_name [GetAttribute model_part_name] - if {$problemtype eq "Fluids"} { - dict set solverSettingsDict physics_type "fluid" - } - if {$problemtype eq "FSI"} { - dict set solverSettingsDict physics_type "fsi" - } - set nDim $::Model::SpatialDimension - set nDim [expr [string range [write::getValue nDim] 0 0] ] - dict set solverSettingsDict domain_size $nDim - - - # Time stepping settings + + dict set solverSettingsDict solver_type "pfem_fluid_thermally_coupled_solver" + dict set solverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0] ] + dict set solverSettingsDict materials_filename "PFEMThermicMaterials.json" + + # "time_stepping" set timeSteppingDict [dict create] - - set automaticDeltaTime [write::getValue PFEMFLUID_TimeParameters UseAutomaticDeltaTime] - if {$automaticDeltaTime eq "Yes"} { + if {[write::getValue PFEMFLUID_TimeParameters UseAutomaticDeltaTime] eq "Yes"} { dict set timeSteppingDict automatic_time_step "true" } else { dict set timeSteppingDict automatic_time_step "false" } - dict set timeSteppingDict time_step [write::getValue PFEMFLUID_TimeParameters [dict get $::PfemFluid::write::Names DeltaTime]] - - # set time_params [PfemFluid::write::GetTimeSettings] - # dict set timeSteppingDict "time_step" [dict get $time_params time_step] - dict set solverSettingsDict time_stepping $timeSteppingDict - - # dict set problemDataDict time_step [dict get $time_params time_step] - - - # model import settings - set modelDict [dict create] - dict set modelDict input_type "mdpa" - dict set modelDict input_filename [Kratos::GetModelName] - # dict set modelDict input_file_label 0 - dict set solverSettingsDict model_import_settings $modelDict - - # Solution strategy parameters and Solvers - set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict PFEMFLUID_SolStrat PFEMFLUID_Scheme PFEMFLUID_StratParams] ] - set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict PfemFluid] ] - - set bodies_parts_list [list ] - foreach body $bodies_list { - set body_parts [dict get $body parts_list] - foreach part $body_parts { - lappend bodies_parts_list $part - } - } - - dict set solverSettingsDict bodies_list $bodies_list - dict set solverSettingsDict problem_domain_sub_model_part_list $bodies_parts_list - dict set solverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames "PFEMFLUID_NodalConditions" "PFEMFLUID_Loads"] - - set materialsDict [dict create] - dict set materialsDict materials_filename [GetAttribute materials_file] - dict set solverSettingsDict material_import_settings $materialsDict - - return $solverSettingsDict -} - -proc PfemFluid::write::GetPFEM_OutputProcessList { } { - set resultList [list] - # lappend resultList [write::GetRestartProcess Restart] - return $resultList -} -proc PfemFluid::write::GetPFEM_ProblemProcessList { } { - set resultList [list ] - set problemtype [write::getValue PFEMFLUID_DomainType] - lappend resultList [GetPFEM_FluidRemeshDict] - return $resultList -} - -proc PfemFluid::write::GetPFEM_ProcessList { } { - set resultList [list ] - - set group_constraints [write::getConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] - set body_constraints [PfemFluid::write::getBodyConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] - dict set resultList constraints_process_list [concat $group_constraints $body_constraints] - - ##### loads_process_list - dict set resultList loads_process_list [write::getConditionsParametersDict PFEMFLUID_Loads] - - dict set resultList auxiliar_process_list [] - - return $resultList -} - -proc PfemFluid::write::GetBodiesWithContactList {contact_name} { - set bodies_list [list ] - set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" - foreach body_node [[customlib::GetBaseRoot] selectNodes $xp1] { - if {[get_domnode_attribute $body_node state] ne "hidden"} { - set contact [get_domnode_attribute [$body_node selectNodes ".//value\[@n='ContactStrategy'\]"] v] - if {$contact eq $contact_name} {lappend bodies_list [get_domnode_attribute $body_node name]} - } - } - return $bodies_list -} - - -proc PfemFluid::write::GetContactProperty { contact_name property } { - set ret "" - set root [customlib::GetBaseRoot] - set ret [get_domnode_attribute [$root selectNodes "[spdAux::getRoute PFEMFLUID_contacts]/blockdata\[@name='$contact_name'\]/value\[@n='$property'\]"] v] - if {$ret eq ""} {set ret null} - return $ret -} - -proc PfemFluid::write::GetPFEM_RemeshDict { } { - variable bodies_list - set resultDict [dict create ] - dict set resultDict "help" "This process applies meshing to the problem domains" - dict set resultDict "kratos_module" "KratosMultiphysics.PfemFluidDynamicsApplication" - dict set resultDict "python_module" "remesh_domains_process" - dict set resultDict "process_name" "RemeshDomainsProcess" - - set paramsDict [dict create] - dict set paramsDict "model_part_name" [GetAttribute model_part_name] - dict set paramsDict "meshing_control_type" "step" - dict set paramsDict "meshing_frequency" 1.0 - dict set paramsDict "meshing_before_output" true - set meshing_domains_list [list ] - foreach body $bodies_list { - set bodyDict [dict create ] - set body_name [dict get $body body_name] - dict set bodyDict "python_module" "meshing_domain" - dict set bodyDict "model_part_name" $body_name - dict set bodyDict "alpha_shape" 2.4 - dict set bodyDict "offset_factor" 0.0 - set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] - set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] - set meshing_strategyDict [dict create ] - dict set meshing_strategyDict "python_module" "meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 - dict set meshing_strategyDict "remesh" $remesh - dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false - dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] - set nDim $::Model::SpatialDimension - if {$nDim eq "3D"} { - dict set meshing_strategyDict "reference_element_type" "Element3D4N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" - } else { - dict set meshing_strategyDict "reference_element_type" "Element2D3N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" - } - dict set bodyDict meshing_strategy $meshing_strategyDict - - - set spatial_bounding_boxDict [dict create ] - dict set spatial_bounding_boxDict "use_bounding_box" [write::getValue PFEMFLUID_BoundingBox UseBoundingBox] - dict set spatial_bounding_boxDict "initial_time" [write::getValue PFEMFLUID_BoundingBox StartTime] - dict set spatial_bounding_boxDict "final_time" [write::getValue PFEMFLUID_BoundingBox StopTime] - dict set spatial_bounding_boxDict "upper_point" [PfemFluid::write::GetUpperPointBoundingBox] - dict set spatial_bounding_boxDict "lower_point" [PfemFluid::write::GetLowerPointBoundingBox] - dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict - - set spatial_refining_boxDict [dict create ] - dict set spatial_refining_boxDict "mesh_size" [write::getValue PFEMFLUID_RefiningBox RefinedMeshSize] - dict set spatial_refining_boxDict "use_refining_box" [write::getValue PFEMFLUID_RefiningBox UseRefiningBox] - dict set spatial_refining_boxDict "initial_time" [write::getValue PFEMFLUID_RefiningBox StartTime] - dict set spatial_refining_boxDict "final_time" [write::getValue PFEMFLUID_RefiningBox StopTime] - dict set spatial_refining_boxDict "upper_point" [PfemFluid::write::GetUpperPointRefiningBox] - dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] - dict set bodyDict spatial_refining_box $spatial_refining_boxDict - - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" true - dict set refining_parametersDict "insert_nodes" false - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" false - dict set remove_nodesDict "on_distance" false - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" false - dict set refine_elementsDict "on_distance" false - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - dict set bodyDict refining_parameters $refining_parametersDict - - lappend meshing_domains_list $bodyDict - } - dict set paramsDict meshing_domains $meshing_domains_list - dict set resultDict Parameters $paramsDict - return $resultDict -} - - - -proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { - variable bodies_list - set resultDict [dict create ] - dict set resultDict "help" "This process applies meshing to the problem domains" - dict set resultDict "kratos_module" "KratosMultiphysics.PfemFluidDynamicsApplication" - set problemtype [write::getValue PFEMFLUID_DomainType] - - dict set resultDict "python_module" "remesh_fluid_domains_process" - dict set resultDict "process_name" "RemeshFluidDomainsProcess" - - set paramsDict [dict create] - dict set paramsDict "model_part_name" [GetAttribute model_part_name] - dict set paramsDict "meshing_control_type" "step" - dict set paramsDict "meshing_frequency" 1.0 - dict set paramsDict "meshing_before_output" true - - set update_conditionsDict [dict create ] - dict set update_conditionsDict "update_conditions" false - dict set paramsDict update_conditions_on_free_surface $update_conditionsDict - - set meshing_domains_list [list ] - foreach body $bodies_list { - set bodyDict [dict create ] - set body_name [dict get $body body_name] - dict set bodyDict "model_part_name" $body_name - dict set bodyDict "python_module" "fluid_meshing_domain" - set nDim $::Model::SpatialDimension - if {$nDim eq "3D"} { - dict set bodyDict "alpha_shape" 1.3 - } else { - dict set bodyDict "alpha_shape" 1.25 - } - dict set bodyDict "offset_factor" 0.0 - set remesh [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Remesh"]] - set refine [write::getStringBinaryFromValue [PfemFluid::write::GetRemeshProperty $body_name "Refine"]] - set meshing_strategyDict [dict create ] - dict set meshing_strategyDict "python_module" "fluid_meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 - dict set meshing_strategyDict "remesh" $remesh - dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false - dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] - if {$nDim eq "3D"} { - dict set meshing_strategyDict "reference_element_type" "TwoStepUpdatedLagrangianVPFluidElement3D" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" - } else { - dict set meshing_strategyDict "reference_element_type" "TwoStepUpdatedLagrangianVPFluidElement2D" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" - } - dict set bodyDict meshing_strategy $meshing_strategyDict - - if {[spdAux::getRoute PFEMFLUID_BoundingBox] ne ""} { - set spatial_bounding_boxDict [dict create ] - dict set spatial_bounding_boxDict "use_bounding_box" [write::getValue PFEMFLUID_BoundingBox UseBoundingBox] - dict set spatial_bounding_boxDict "initial_time" [write::getValue PFEMFLUID_BoundingBox StartTime] - dict set spatial_bounding_boxDict "final_time" [write::getValue PFEMFLUID_BoundingBox StopTime] - dict set spatial_bounding_boxDict "upper_point" [PfemFluid::write::GetUpperPointBoundingBox] - dict set spatial_bounding_boxDict "lower_point" [PfemFluid::write::GetLowerPointBoundingBox] - dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict - } - - set spatial_refining_boxDict [dict create ] - dict set spatial_refining_boxDict "use_refining_box" [write::getValue PFEMFLUID_RefiningBox UseRefiningBox] - dict set spatial_refining_boxDict "mesh_size" [write::getValue PFEMFLUID_RefiningBox RefinedMeshSize] - dict set spatial_refining_boxDict "initial_time" [write::getValue PFEMFLUID_RefiningBox StartTime] - dict set spatial_refining_boxDict "final_time" [write::getValue PFEMFLUID_RefiningBox StopTime] - dict set spatial_refining_boxDict "upper_point" [PfemFluid::write::GetUpperPointRefiningBox] - dict set spatial_refining_boxDict "lower_point" [PfemFluid::write::GetLowerPointRefiningBox] - dict set bodyDict spatial_refining_box $spatial_refining_boxDict - - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" false - dict set refining_parametersDict "insert_nodes" true - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" true - dict set remove_nodesDict "on_distance" true - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" true - dict set refine_elementsDict "on_distance" true - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - dict set bodyDict refining_parameters $refining_parametersDict - - lappend meshing_domains_list $bodyDict - } - dict set paramsDict meshing_domains $meshing_domains_list - dict set resultDict Parameters $paramsDict - return $resultDict -} - -proc PfemFluid::write::GetRemeshProperty { body_name property } { - set ret "" - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" - set remesh_name "" - foreach body_node [$root selectNodes $xp1] { - if {[$body_node @name] eq $body_name && [get_domnode_attribute $body_node state] ne "hidden"} { - set remesh_name [get_domnode_attribute [$body_node selectNodes ".//value\[@n='MeshingStrategy'\]"] v] - break - } - } - if {$remesh_name ne ""} { - variable remesh_domains_dict - if {[dict exists $remesh_domains_dict ${remesh_name} $property]} { - set ret [dict get $remesh_domains_dict ${remesh_name} $property] - } - } - if {$ret eq ""} {set ret false} - return $ret -} - - -proc PfemFluid::write::ProcessBodiesList { } { - customlib::UpdateDocument - set bodiesList [list ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata" - foreach body_node [$root selectNodes $xp1] { - if {[get_domnode_attribute $body_node state] ne "hidden"} { - set body [dict create] - set name [$body_node @name] - set body_type_path ".//value\[@n='BodyType'\]" - set body_type [get_domnode_attribute [$body_node selectNodes $body_type_path] v] - set parts [list ] - foreach part_node [$body_node selectNodes "./condition/group"] { + + # FLUID / THERMIC SETTINGS + dict set solverSettingsDict fluid_solver_settings [PfemFluid::write::GetPFEM_SolverSettingsDict] + dict set solverSettingsDict thermal_solver_settings [PfemThermic::write::GetThermicSolverSettingsDict] +} + +proc PfemThermic::write::GetThermicSolverSettingsDict { } { + set thermicSolverSettingsDict [dict create] + + # General data + dict set thermicSolverSettingsDict solver_type [write::getValue CNVDFFSolStrat] + dict set thermicSolverSettingsDict analysis_type [write::getValue CNVDFFAnalysisType] + dict set thermicSolverSettingsDict time_integration_method "implicit" + dict set thermicSolverSettingsDict model_part_name [ConvectionDiffusion::write::GetAttribute model_part_name] + dict set thermicSolverSettingsDict computing_model_part_name "thermal_computing_domain" + dict set thermicSolverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0]] + dict set thermicSolverSettingsDict reform_dofs_at_each_step "true" + + # Import data + set modelDict [dict create] + set materialsDict [dict create] + + dict set modelDict input_type "use_input_model_part" + dict set modelDict input_filename "unknown_name" + dict set materialsDict materials_filename [ConvectionDiffusion::write::GetAttribute materials_file] + + dict set thermicSolverSettingsDict model_import_settings $modelDict + dict set thermicSolverSettingsDict material_import_settings $materialsDict + + # Solution Strategy and Solvers Parameters + set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolutionStrategyParametersDict CNVDFFSolStrat CNVDFFScheme CNVDFFStratParams] ] + set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolversParametersDict ConvectionDiffusion] ] + + # "problem_domain_sub_model_part_list" + set parts [list ] + foreach body_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute "PFEMFLUID_Bodies"]/blockdata"] { + if {[get_domnode_attribute $body_node state] ne "hidden" && + [get_domnode_attribute [$body_node selectNodes ".//value\[@n='BodyType'\]"] v] eq "Fluid"} { + foreach part_node [$body_node selectNodes "./condition/group"] { lappend parts [write::getSubModelPartId "Parts" [$part_node @n]] } - dict set body "body_type" $body_type - dict set body "body_name" $name - dict set body "parts_list" $parts - lappend bodiesList $body - } - } - return $bodiesList + } + } + dict set thermicSolverSettingsDict problem_domain_sub_model_part_list $parts + + # "processes_sub_model_part_list" + dict set thermicSolverSettingsDict processes_sub_model_part_list "[]" + + return $thermicSolverSettingsDict +} + +proc PfemThermic::write::GetProcessList { } { + set processes [dict create] + + # "initial_conditions_process_list" + dict set processes initial_conditions_process_list [write::getConditionsParametersDict [ConvectionDiffusion::write::GetAttribute nodal_conditions_un] "Nodal"] + + # "constraints_process_list" + set group_constraints [write::getConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] + set body_constraints [PfemFluid::write::getBodyConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] + set thermic_constraints [write::getConditionsParametersDict [ConvectionDiffusion::write::GetAttribute conditions_un]] + dict set processes constraints_process_list [concat $group_constraints $body_constraints $thermic_constraints] + + # "list_other_processes" + #dict set processes list_other_processes [ConvectionDiffusion::write::getBodyForceProcessDictList] + + # "loads_process_list" + dict set processes loads_process_list [write::getConditionsParametersDict PFEMFLUID_Loads] + + # "auxiliar_process_list" + dict set processes auxiliar_process_list [] + + return $processes } - -proc PfemFluid::write::GetNodalDataDict { } { - set root [customlib::GetBaseRoot] - set NodalData [list ] - set parts [list "PFEMFLUID_Rigid2DParts" "PFEMFLUID_Rigid3DParts" "PFEMFLUID_Deformable2DParts" "PFEMFLUID_Deformable3DParts" "PFEMFLUID_Fluid2DParts" "PFEMFLUID_Fluid3DParts"] - - foreach part $parts { - set xp1 "[spdAux::getRoute $part]/group" - set groups [$root selectNodes $xp1] - foreach group $groups { - set partid [[$group parent] @n] - set groupid [$group @n] - set processDict [dict create] - dict set processDict process_name "ApplyValuesToNodes" - dict set processDict kratos_module "KratosMultiphysics.DelaunayMeshingApplication" - - set params [dict create] - set xp2 "./value" - set atts [$group selectNodes $xp2] - #W "$group $groupid $atts" - foreach att $atts { - set state [get_domnode_attribute $att state] - if {$state ne "hidden"} { - set paramName [$att @n] - set paramValue [get_domnode_attribute $att v] - if {$paramName eq "Material"} { - set matdict [::write::getAllMaterialParametersDict $paramValue] - dict set matdict Name $paramValue - dict set params $paramName $matdict - } { - if {[write::isBoolean $paramValue]} {set paramValue [expr $paramValue]} - dict set params $paramName $paramValue - } - } - } - dict set params "model_part_name" [::write::getSubModelPartId $partid $groupid] - dict set processDict "Parameters" $params - lappend NodalData $processDict - } - } - - return $NodalData -} - -proc PfemFluid::write::ProcessRemeshDomainsDict { } { - customlib::UpdateDocument - set domains_dict [dict create ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEMFLUID_meshing_domains"]/blockdata" - foreach domain_node [$root selectNodes $xp1] { - set name [$domain_node @name] - foreach part_node [$domain_node selectNodes "./value"] { - dict set domains_dict $name [get_domnode_attribute $part_node n] [get_domnode_attribute $part_node v] - } - } - return $domains_dict -} - -proc PfemFluid::write::CalculateMyVariables { } { - variable bodies_list - set bodies_list [PfemFluid::write::ProcessBodiesList] - variable remesh_domains_dict - set remesh_domains_dict [PfemFluid::write::ProcessRemeshDomainsDict] -} - - - -proc PfemFluid::write::getBodyConditionsParametersDict {un {condition_type "Condition"}} { - set root [customlib::GetBaseRoot] - return [list ] - set bcCondsDict [list ] - - set xp1 "[spdAux::getRoute $un]/container/blockdata" - set blocks [$root selectNodes $xp1] - - foreach block $blocks { - set groupName [$block @name] - set cid [[$block parent] @n] - get_domnode_attribute [$block find n Body] values - set bodyId [get_domnode_attribute [$block find n Body] v] - - if {$condition_type eq "Condition"} { - error [= "Body conditions (not nodal) Not implemented yet."] - #set condition [::Model::getCondition $cid] - } { - set condition [PfemFluid::xml::getBodyNodalConditionById $cid] - } - set processName [$condition getProcessName] - #set processName [[$block parent] @processname] - - set process [::Model::GetProcess $processName] - set processDict [dict create] - set paramDict [dict create] - dict set paramDict model_part_name $bodyId - set vatiable_name [$condition getAttribute VariableName] - dict set paramDict variable_name [lindex $vatiable_name 0] - - set process_attributes [$process getAttributes] - set process_parameters [$process getInputs] - - dict set process_attributes process_name [dict get $process_attributes n] - dict unset process_attributes n - dict unset process_attributes pn - - set processDict [dict merge $processDict $process_attributes] - - foreach {inputName in_obj} $process_parameters { - set in_type [$in_obj getType] - if {$in_type eq "vector"} { - if {[$in_obj getAttribute vectorType] eq "bool"} { - set ValX [expr [get_domnode_attribute [$block find n ${inputName}X] v] ? True : False] - set ValY [expr [get_domnode_attribute [$block find n ${inputName}Y] v] ? True : False] - set ValZ [expr False] - if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [get_domnode_attribute [$block find n ${inputName}Z] v] ? True : False]} - dict set paramDict $inputName [list $ValX $ValY $ValZ] - } { - if {[$in_obj getAttribute "enabled"] in [list "1" "0"]} { - foreach i [list "X" "Y" "Z"] { - if {[expr [get_domnode_attribute [$block find n Enabled_$i] v] ] ne "Yes"} { - set Val$i null - } else { - set printed 0 - if {[$in_obj getAttribute "function"] eq "1"} { - if {[get_domnode_attribute [$block find n "ByFunction$i"] v] eq "Yes"} { - set funcinputName "${i}function_$inputName" - set value [get_domnode_attribute [$block find n $funcinputName] v] - set Val$i $value - set printed 1 - } - } - if {!$printed} { - set value [expr [get_domnode_attribute [$block find n ${inputName}$i] v] ] - set Val$i $value - } - } - } - } else { - set ValX [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}X]] ] - set ValY [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Y]] ] - set ValZ [expr 0.0] - if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Z]]]} - } - dict set paramDict $inputName [list $ValX $ValY $ValZ] - } - } elseif {$in_type eq "double" || $in_type eq "integer"} { - set printed 0 - if {[$in_obj getAttribute "function"] eq "1"} { - if {[get_domnode_attribute [$block find n "ByFunction"] v] eq "Yes"} { - set funcinputName "function_$inputName" - set value [get_domnode_attribute [$block find n $funcinputName] v] - dict set paramDict $inputName $value - set printed 1 - } - } - if {!$printed} { - set value [gid_groups_conds::convert_value_to_default [$block find n $inputName]] - dict set paramDict $inputName [expr $value] - } - } elseif {$in_type eq "bool"} { - set value [get_domnode_attribute [$block find n $inputName] v] - set value [expr $value ? True : False] - dict set paramDict $inputName [expr $value] - } elseif {$in_type eq "tablefile"} { - set value [get_domnode_attribute [$block find n $inputName] v] - dict set paramDict $inputName $value - } else { - if {[get_domnode_attribute [$block find n $inputName] state] ne "hidden" } { - set value [get_domnode_attribute [$block find n $inputName] v] - dict set paramDict $inputName $value - } - } - } - if {[$block find n Interval] ne ""} {dict set paramDict interval [write::getInterval [get_domnode_attribute [$block find n Interval] v]] } - dict set processDict Parameters $paramDict - lappend bcCondsDict $processDict - } - return $bcCondsDict -} - -proc PfemFluid::write::GetGravity { } { - set cx [write::getValue PFEMFLUID_Gravity Cx] - set cy [write::getValue PFEMFLUID_Gravity Cy] - set cz [write::getValue PFEMFLUID_Gravity Cz] - return [list $cx $cy $cz] -} - -proc PfemFluid::write::GetLowerPointBoundingBox { } { - set minX [write::getValue PFEMFLUID_BoundingBox MinX] - set minY [write::getValue PFEMFLUID_BoundingBox MinY] - set minZ [write::getValue PFEMFLUID_BoundingBox MinZ] - return [list $minX $minY $minZ] -} - -proc PfemFluid::write::GetUpperPointBoundingBox { } { - set maxX [write::getValue PFEMFLUID_BoundingBox MaxX] - set maxY [write::getValue PFEMFLUID_BoundingBox MaxY] - set maxZ [write::getValue PFEMFLUID_BoundingBox MaxZ] - return [list $maxX $maxY $maxZ] -} - -proc PfemFluid::write::GetLowerPointRefiningBox { } { - set minX [write::getValue PFEMFLUID_RefiningBox MinX] - set minY [write::getValue PFEMFLUID_RefiningBox MinY] - set minZ [write::getValue PFEMFLUID_RefiningBox MinZ] - return [list $minX $minY $minZ] -} - -proc PfemFluid::write::GetUpperPointRefiningBox { } { - set maxX [write::getValue PFEMFLUID_RefiningBox MaxX] - set maxY [write::getValue PFEMFLUID_RefiningBox MaxY] - set maxZ [write::getValue PFEMFLUID_RefiningBox MaxZ] - return [list $maxX $maxY $maxZ] -} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/Procs.spd b/kratos.gid/apps/PfemThermic/xml/Procs.spd index 00daf2ffb..7be8d76d8 100644 --- a/kratos.gid/apps/PfemThermic/xml/Procs.spd +++ b/kratos.gid/apps/PfemThermic/xml/Procs.spd @@ -85,11 +85,6 @@ return [PfemThermic::xml::ProcCheckNodalConditionState $domNode $args] ]]> - - - Date: Thu, 29 Oct 2020 14:07:05 +0100 Subject: [PATCH 060/556] Writing tables of temperature dependent mateiral properties --- .../apps/PfemFluid/xml/ConstitutiveLaws.xml | 34 ++++-- kratos.gid/apps/PfemThermic/write/write.tcl | 114 +++++++++++++++++- .../write/writeProjectParameters.tcl | 4 +- 3 files changed, 138 insertions(+), 14 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml index c72335156..266cbabf4 100644 --- a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml @@ -108,9 +108,13 @@ + + + + @@ -120,10 +124,14 @@ + - - - + + + + + + @@ -132,10 +140,14 @@ + - - - + + + + + + @@ -147,10 +159,14 @@ + - - - + + + + + + diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 135ce67ba..2f2822d96 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -3,19 +3,127 @@ namespace eval ::PfemThermic::write { } proc ::PfemThermic::write::Init { } { - + PfemFluid::write::Init + ConvectionDiffusion::write::Init } # MDPA event proc PfemThermic::write::writeModelPartEvent { } { - PfemFluid::write::Init PfemFluid::write::writeModelPartEvent } # Custom files event proc PfemThermic::write::writeCustomFilesEvent { } { - PfemFluid::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] + PfemThermic::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] write::CopyFileIntoModel [file join "python" "MainKratos.py"] } +# Write material file +proc PfemThermic::write::writePropertiesJsonFile { {fname "materials.json"} {write_claw_name "True"} {model_part_name ""}} { + set mats_json [dict create properties [list ] ] + foreach parts_un [PfemFluid::write::GetPartsUN] { + foreach property [dict get [PfemThermic::write::getPropertiesList $parts_un $write_claw_name $model_part_name] properties ] { + if {$property ne "\[\]"} { + dict lappend mats_json properties $property + } + } + } + write::OpenFile $fname + write::WriteJSON $mats_json + write::CloseFile +} + +proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_name ""}} { + set mat_dict [write::getMatDict] + set props_dict [dict create] + set props [list] + set doc $gid_groups_conds::doc + set root [$doc documentElement] + + set xp1 "[spdAux::getRoute $parts_un]/group" + if {[llength [$root selectNodes $xp1]] < 1} { + set xp1 "[spdAux::getRoute $parts_un]/condition/group" + } + foreach gNode [$root selectNodes $xp1] { + set group [get_domnode_attribute $gNode n] + set cond_id [get_domnode_attribute [$gNode parent] n] + set sub_model_part [write::getSubModelPartId $cond_id $group] + if {$model_part_name ne ""} {set sub_model_part $model_part_name.$sub_model_part} + set sub_model_part [string trim $sub_model_part "."] + if { [dict exists $mat_dict $group] } { + set mid [dict get $mat_dict $group MID] + set prop_dict [dict create] + dict set prop_dict "model_part_name" $sub_model_part + dict set prop_dict "properties_id" $mid + set constitutive_law_id "" + if {[dict exists $mat_dict $group ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $group ConstitutiveLaw]} + set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] + if {$constitutive_law ne ""} { + set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] + set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT" "TEMPERATURE_vs_VISCOSITY"] + set variables_dict [dict create] + set tables_dict [dict create] + foreach prop [dict keys [dict get $mat_dict $group] ] { + if {$prop ni $exclusionList && $prop ni $tableList} { + dict set variables_list $prop [write::getFormattedValue [dict get $mat_dict $group $prop]] + } + if {$prop in $tableList} { + set fileName [write::getFormattedValue [dict get $mat_dict $group $prop]] + if {$fileName ne "- No file"} { + dict set tables_dict $prop [PfemThermic::write::GetTable $prop $fileName] + } + } + } + set material_dict [dict create] + + if {$write_claw_name eq "True"} { + set constitutive_law_name [$constitutive_law getKratosName] + dict set material_dict constitutive_law [dict create name $constitutive_law_name] + } + + dict set material_dict Variables $variables_list + dict set material_dict Tables $tables_dict + dict set prop_dict Material $material_dict + + lappend props $prop_dict + } + } + } + + dict set props_dict properties $props + return $props_dict +} + +proc PfemThermic::write::GetTable { prop fileName } { + set table [dict create] + dict set table input_variable "TEMPERATURE" + + if {$prop eq "TEMPERATURE_vs_DENSITY"} { + dict set table output_variable "DENSITY" + } elseif {$prop eq "TEMPERATURE_vs_CONDUCTIVITY"} { + dict set table output_variable "CONDUCTIVITY" + } elseif {$prop eq "TEMPERATURE_vs_SPECIFIC_HEAT"} { + dict set table output_variable "SPECIFIC_HEAT" + } else { + dict set table output_variable "DYNAMIC_VISCOSITY" + } + + set fp [open $fileName r] + set file_data [read $fp] + close $fp + + set points {} + set data [split $file_data "\n"] + foreach line $data { + if {[scan $line %f%f a b] == 2} { + set c [concat \[$a,$b\]] + set c [string map [list \" ""] $c] + lappend points $c + } + } + dict set table data $points + + return $table +} + PfemThermic::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 84769e5fd..96c1fbc56 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -65,8 +65,8 @@ proc PfemThermic::write::GetThermicSolverSettingsDict { } { dict set thermicSolverSettingsDict material_import_settings $materialsDict # Solution Strategy and Solvers Parameters - set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolutionStrategyParametersDict CNVDFFSolStrat CNVDFFScheme CNVDFFStratParams] ] - set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolversParametersDict ConvectionDiffusion] ] + set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolutionStrategyParametersDict CNVDFFSolStrat CNVDFFScheme CNVDFFStratParams]] + set thermicSolverSettingsDict [dict merge $thermicSolverSettingsDict [write::getSolversParametersDict ConvectionDiffusion]] # "problem_domain_sub_model_part_list" set parts [list ] From 63553bca8aaecad07d7e87236a934c183bc91178 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Thu, 29 Oct 2020 20:17:35 +0100 Subject: [PATCH 061/556] Adjusting the order of constitutive law parameters --- .../apps/PfemFluid/xml/ConstitutiveLaws.xml | 92 ------------------ .../apps/PfemFluid/xml/XmlController.tcl | 5 +- kratos.gid/apps/PfemThermic/write/write.tcl | 5 +- .../write/writeProjectParameters.tcl | 2 +- .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 96 +++++++++++++++++++ .../apps/PfemThermic/xml/XmlController.tcl | 10 +- 6 files changed, 105 insertions(+), 105 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml diff --git a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml index 266cbabf4..e8bbfc383 100644 --- a/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemFluid/xml/ConstitutiveLaws.xml @@ -104,77 +104,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -196,25 +125,4 @@ - - diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index fa7088ab2..f61387f06 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -185,16 +185,13 @@ proc PfemFluid::xml::ProcGetElementsValues {domNode args} { proc PfemFluid::xml::ProcGetConstitutiveLaws {domNode args} { set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] - set exclusive_CLs [list "Newtonian2DLaw" "Newtonian3DLaw" "Bingham2DLaw" "Bingham3DLaw" "FrictionalViscoplastic2DLaw" "FrictionalViscoplastic3DLaw" "PapanastasiouMuIRheology2DLaw" "PapanastasiouMuIRheology3DLaw"] if {[llength $Claws] == 0} { set names [list "None"] } { set names [list ] foreach cl $Claws { - if {[$cl getName] in $exclusive_CLs} { - lappend names [$cl getName] - } + lappend names [$cl getName] } } diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 2f2822d96..97876e477 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -116,9 +116,8 @@ proc PfemThermic::write::GetTable { prop fileName } { set data [split $file_data "\n"] foreach line $data { if {[scan $line %f%f a b] == 2} { - set c [concat \[$a,$b\]] - set c [string map [list \" ""] $c] - lappend points $c + lappend points $a + lappend points $b } } dict set table data $points diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 96c1fbc56..4d35ce003 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -81,7 +81,7 @@ proc PfemThermic::write::GetThermicSolverSettingsDict { } { dict set thermicSolverSettingsDict problem_domain_sub_model_part_list $parts # "processes_sub_model_part_list" - dict set thermicSolverSettingsDict processes_sub_model_part_list "[]" + dict set thermicSolverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames [ConvectionDiffusion::write::GetAttribute nodal_conditions_un] [ConvectionDiffusion::write::GetAttribute conditions_un] ] return $thermicSolverSettingsDict } diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml new file mode 100644 index 000000000..a1da51dba --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index 7a4ebd8d2..e1980ec68 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -7,6 +7,9 @@ proc PfemThermic::xml::Init { } { # Namespace variables initialization variable dir Model::InitVariables dir $PfemThermic::dir + + Model::ForgetConstitutiveLaws + Model::getConstitutiveLaws ConstitutiveLaws.xml } proc PfemThermic::xml::getUniqueName {name} { @@ -14,8 +17,8 @@ proc PfemThermic::xml::getUniqueName {name} { } proc PfemThermic::xml::CustomTree { args } { - ConvectionDiffusion::xml::CustomTree PfemFluid::xml::CustomTree + ConvectionDiffusion::xml::CustomTree spdAux::SetValueOnTreeItem values Fluid PFEMFLUID_DomainType spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat @@ -71,16 +74,13 @@ proc PfemThermic::xml::ProcGetElementsValues {domNode args} { proc PfemThermic::xml::ProcGetConstitutiveLaws {domNode args} { set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] - set exclusive_CLs [list "NewtonianTemperatureDependent2DLaw" "NewtonianTemperatureDependent3DLaw" "BinghamTemperatureDependent2DLaw" "BinghamTemperatureDependent3DLaw"] if {[llength $Claws] == 0} { set names [list "None"] } { set names [list ] foreach cl $Claws { - if {[$cl getName] in $exclusive_CLs} { - lappend names [$cl getName] - } + lappend names [$cl getName] } } From 269064fa006ee817dc48d458fe7b079d1234fe98 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 30 Oct 2020 21:45:52 +0100 Subject: [PATCH 062/556] Advances in PfemThermic --- kratos.gid/apps/PfemThermic/start.tcl | 23 +-- .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 164 +++++++++++------- .../PfemThermic/xml/FluidSolutionStrategy.spd | 57 ++++++ kratos.gid/apps/PfemThermic/xml/Main.spd | 48 ++--- .../apps/PfemThermic/xml/NodalConditions.spd | 4 + .../apps/PfemThermic/xml/NodalConditions.xml | 104 +++++++++++ kratos.gid/apps/PfemThermic/xml/Procs.spd | 4 +- .../apps/PfemThermic/xml/XmlController.tcl | 87 +++++++--- 8 files changed, 366 insertions(+), 125 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd create mode 100644 kratos.gid/apps/PfemThermic/xml/NodalConditions.spd create mode 100644 kratos.gid/apps/PfemThermic/xml/NodalConditions.xml diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 5a3055df0..2d593e86b 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -12,29 +12,22 @@ proc ::PfemThermic::Init { } { variable prefix variable kratos_name variable attributes - - set attributes [dict create] - set kratos_name PfemThermicDynamicsApplication - - set dir [apps::getMyDir "PfemThermic"] + + set dir [apps::getMyDir "PfemThermic"] set prefix PFEMTHERMIC_ - - set ::spdAux::TreeVisibility 0 + set kratos_name PfemThermicDynamicsApplication + set attributes [dict create] + dict set attributes UseIntervals 1 + dict set attributes UseRestart 1 apps::LoadAppById "PfemFluid" apps::LoadAppById "ConvectionDiffusion" if {$::Kratos::kratos_private(DevMode) ne "dev"} {error [= "You need to change to Developer mode in the Kratos menu"] } - - # Intervals - dict set attributes UseIntervals 1 - - # Allow to open the tree + set ::spdAux::TreeVisibility 1 - set ::Model::ValidSpatialDimensions [list 2D 3D] - - dict set attributes UseRestart 1 + LoadMyFiles } diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index a1da51dba..b6cac8749 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -2,95 +2,143 @@ - + - - - - - - - - - + + + + + + + + + - - + + - - - - - - - - - + + + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - + + + - + - - - + + + - --> - + + diff --git a/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd b/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd new file mode 100644 index 000000000..9453d5193 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/Main.spd b/kratos.gid/apps/PfemThermic/xml/Main.spd index b7b633081..31641153e 100644 --- a/kratos.gid/apps/PfemThermic/xml/Main.spd +++ b/kratos.gid/apps/PfemThermic/xml/Main.spd @@ -1,33 +1,23 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd new file mode 100644 index 000000000..308c58921 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml new file mode 100644 index 000000000..fda658515 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/Procs.spd b/kratos.gid/apps/PfemThermic/xml/Procs.spd index 7be8d76d8..4d8d92516 100644 --- a/kratos.gid/apps/PfemThermic/xml/Procs.spd +++ b/kratos.gid/apps/PfemThermic/xml/Procs.spd @@ -47,7 +47,7 @@ @@ -82,7 +82,7 @@ diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index e1980ec68..019fb30d3 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -4,12 +4,14 @@ namespace eval PfemThermic::xml { } proc PfemThermic::xml::Init { } { - # Namespace variables initialization variable dir Model::InitVariables dir $PfemThermic::dir Model::ForgetConstitutiveLaws Model::getConstitutiveLaws ConstitutiveLaws.xml + + Model::ForgetNodalConditions + Model::getNodalConditions NodalConditions.xml } proc PfemThermic::xml::getUniqueName {name} { @@ -17,37 +19,80 @@ proc PfemThermic::xml::getUniqueName {name} { } proc PfemThermic::xml::CustomTree { args } { - PfemFluid::xml::CustomTree + set root [customlib::GetBaseRoot] + spdAux::parseRoutes + + ########## From PfemFluid custom tree ########## + + + + + + + + + foreach node [$root getElementsByTagName container] { if {[$node hasAttribute prefix] && [$node getAttribute prefix] eq "PFEMFLUID_"} {set root $node; break} } + + foreach node [$root getElementsByTagName value] { $node setAttribute icon data } + foreach node [$root getElementsByTagName container] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder} } + + spdAux::SetValueOnTreeItem icon sheets Intervals + foreach node [[$root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select } + spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMTHERMIC_NodalConditions VELOCITY + spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMTHERMIC_NodalConditions PRESSURE + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMTHERMIC_NodalConditions]/condition" ] { + $node setAttribute icon select + $node setAttribute groups_icon groupCreated } + if {[spdAux::getRoute PFEMFLUID_Loads] ne ""} { + spdAux::SetValueOnTreeItem icon setLoad PFEMFLUID_Loads + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Loads]/condition" ] { + $node setAttribute icon select + $node setAttribute groups_icon groupCreated } } + + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'velocity_linear_solver_settings'\]" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'pressure_linear_solver_settings'\]" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon data } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'StratParams'\]" ] { $node setAttribute icon data } + + [[$root parent] selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits + + #spdAux::SetValueOnTreeItem v Yes NodalResults VELOCITY + #spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE + #spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT + #spdAux::SetValueOnTreeItem v No NodalResults VELOCITY_REACTION + #spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT_REACTION + + set inlet_result_node [[$root parent] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'INLET'\]"] + if { $inlet_result_node ne "" } { $inlet_result_node delete } + + spdAux::SetValueOnTreeItem icon doRestart Restart + spdAux::SetValueOnTreeItem icon select Restart RestartOptions + + if {$Model::SpatialDimension eq "3D"} { + catch { + spdAux::SetValueOnTreeItem v -9.81 PFEMFLUID_Gravity Cy + spdAux::SetValueOnTreeItem v 0.0 PFEMFLUID_Gravity Cz } } + + ################################################ + ConvectionDiffusion::xml::CustomTree - spdAux::SetValueOnTreeItem values Fluid PFEMFLUID_DomainType + spdAux::SetValueOnTreeItem v linear CNVDFFAnalysisType spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat - - set root [customlib::GetBaseRoot] + Model::ForgetSolutionStrategy stationary set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'ParallelType'\]"] if { $result_node ne "" } {$result_node delete} - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'BodyForce'\]"] if { $result_node ne "" } {$result_node delete} - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'TimeParameters'\]"] if { $result_node ne "" } {$result_node delete} -} - -proc PfemThermic::xml::ProcGetBodyTypeValues {domNode args} { - set values "Fluid,Rigid" - return $values -} - -proc PfemThermic::xml::ProcCheckNodalConditionState {domNode args} { - set fluid_exclusive_conditions [list "VELOCITY" "INLET" "PRESSURE"] - set current_condition [$domNode @n] - if {$current_condition ni $fluid_exclusive_conditions} { - return hidden - } - return normal + set result_node [$root selectNodes "[spdAux::getRoute CNVDFFStratParams]/value\[@n='line_search'\]"] + if { $result_node ne "" } {$result_node delete} } proc PfemThermic::xml::ProcGetElementsValues {domNode args} { From adabd7d1dfc3f7c040e1ed70c740b63611e5d49c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 31 Oct 2020 21:18:21 +0100 Subject: [PATCH 063/556] Apps and tools for the new version --- kratos.gid/images/settings.png | Bin 0 -> 10982 bytes kratos.gid/kratos_default.spd | 6 +- kratos.gid/scripts/Applications.tcl | 43 +++++++---- .../Controllers/ApplicationMarketWindow.tcl | 67 ++++++++++++++---- kratos.gid/scripts/spdAuxiliar.tcl | 2 + 5 files changed, 88 insertions(+), 30 deletions(-) create mode 100644 kratos.gid/images/settings.png diff --git a/kratos.gid/images/settings.png b/kratos.gid/images/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..92b3127315f49e6f5ef73a391b7f3e66cd2d2325 GIT binary patch literal 10982 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 6ff0a2c53..f38717205 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -22,15 +22,15 @@ - - + + - + diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 67af6d9b6..9f2b24ade 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -80,21 +80,37 @@ proc apps::NewApp {appid publicname prefix} { return $ap } -proc apps::getAllApplicationsName {} { +# also_tools => 0 all apps no tools | 1 all apps and tools | 2 only tools +proc apps::getAppsList {{also_tools 1}} { variable appList + set list [list ] + foreach app $appList { + set is_tool [$app isTool] + set pass 0 + switch $also_tools { + 0 { if {!$is_tool} {set pass 1} } + 1 { set pass 1 } + 2 { if {$is_tool} {set pass 1} } + } + if {$pass} { + lappend list $app + } + } + return $list +} +proc apps::getAllApplicationsName {{also_tools 1}} { set appnames [list ] - foreach app $appList { + foreach app [apps::getAppsList $also_tools] { lappend appnames [$app getPublicName] } return $appnames } -proc apps::getAllApplicationsID {} { - variable appList +proc apps::getAllApplicationsID {{also_tools 1}} { set appnames [list ] - foreach app $appList { + foreach app [apps::getAppsList $also_tools] { lappend appnames [$app getName] } return $appnames @@ -192,6 +208,7 @@ oo::class create App { variable writeValidateEvent variable prefix variable release + variable is_tool constructor {n} { variable name @@ -203,6 +220,7 @@ oo::class create App { variable writeValidateEvent variable prefix variable public + variable is_tool set name $n set publicname $n @@ -221,6 +239,7 @@ oo::class create App { append writeValidateEvent "::writeValidateEvent" set prefix "" set public 0 + set is_tool 0 } method activate { } { @@ -258,14 +277,12 @@ oo::class create App { if {[info procs $f] ne ""} {$f {*}$args} } - method setPublic {v} { - variable public - set public $v - } - method isPublic { } { - variable public - return $public - } + method setPublic {v} {variable public; set public $v} + method isPublic { } {variable public; return $public} + + method setIsTool {v} {variable is_tool; set is_tool $v} + method isTool { } {variable is_tool; return $is_tool} + method getKratosApplicationName { } { return [set ::${name}::kratos_name] } diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index b7520e85b..cb2cb8187 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -70,37 +70,41 @@ proc spdAux::CreateWindow {} { variable initwind variable must_open_init_window + # No graphics, no window if { [GidUtils::IsTkDisabled] } { return 0 } + # Sometimes we dont need the window (load event) if {$must_open_init_window == 0} {return ""} + # If we have an active app, dont open this window if {[apps::getActiveApp] ne ""} {return ""} + # Close everything else gid_groups_conds::close_all_windows - spdAux::DestroyInitWindow if {[winfo exist .gid.win_example]} {destroy .gid.win_example} + # Window creation set w .gid.win_example toplevel $w wm withdraw $w - set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] - wm geom $w +$x+$y wm transient $w .gid - InitWindow $w [_ "Kratos Multiphysics"] Kratos "" "" 1 + InitWindow $w [_ "Kratos Multiphysics - Application market"] Kratos "" "" 1 set initwind $w ttk::frame $w.top - ttk::label $w.top.title_text -text [_ " Application market"] - ttk::frame $w.information -relief ridge + # ttk::label $w.top.title_text -text [_ " Application market"] + + # List of applications -> by family + ttk::labelframe $w.information -text " Applications " -relief ridge - set appsid [::apps::getAllApplicationsID] - set appspn [::apps::getAllApplicationsName] + set appsid [::apps::getAllApplicationsID 0] + set appspn [::apps::getAllApplicationsName 0] set col 0 set row 0 @@ -117,22 +121,57 @@ proc spdAux::CreateWindow {} { if {$col >= 5} {set col 0; incr row; incr row} } } + + # List of tools + ttk::labelframe $w.tools -text " Tools " -relief ridge + set toolsid [::apps::getAllApplicationsID 2] + set toolspn [::apps::getAllApplicationsName 2] + set col 0 + set row 0 + foreach toolname $toolspn toolid $toolsid { + if {[apps::isPublic $toolid]} { + set img [::apps::getImgFrom $toolid] + ttk::button $w.tools.img$toolid -image $img -command [list apps::setActiveApp $toolid] + ttk::label $w.tools.text$toolid -text $toolname + + grid $w.tools.img$toolid -column $col -row $row + grid $w.tools.text$toolid -column $col -row [expr $row +1] + + incr col + if {$col >= 5} {set col 0; incr row; incr row} + } + } # More button if {$::Kratos::kratos_private(DevMode) eq "dev"} { set more_path [file nativename [file join $::Kratos::kratos_private(Path) images "more.png"] ] set img [gid_themes::GetImage $more_path Kratos] - ttk::button $w.information.img_more -image $img -command [list VisitWeb "https://github.com/KratosMultiphysics/GiDInterface"] - ttk::label $w.information.text_more -text "More..." - - grid $w.information.img_more -column $col -row $row - grid $w.information.text_more -column $col -row [expr $row +1] + ttk::button $w.tools.img_more -image $img -command [list VisitWeb "https://github.com/KratosMultiphysics/GiDInterface"] + ttk::label $w.tools.text_more -text "More..." + + grid $w.tools.img_more -column $col -row $row + grid $w.tools.text_more -column $col -row [expr $row +1] + incr col + if {$col >= 5} {set col 0; incr row; incr row} } + + # Settings + set settings_path [file nativename [file join $::Kratos::kratos_private(Path) images "settings.png"] ] + set img [gid_themes::GetImage $settings_path Kratos] + if {[GidUtils::VersionCmp "14.1.4d"] <0 } { set cmd [list ChangeVariables kratos_preferences] } {set cmd [list PreferencesWindow kratos_preferences]} + ttk::button $w.tools.img_preferences -image $img -command $cmd + ttk::label $w.tools.text_preferences -text "Preferences" + grid $w.tools.img_preferences -column $col -row $row + grid $w.tools.text_preferences -column $col -row [expr $row +1] + incr col + if {$col >= 5} {set col 0; incr row; incr row} + grid $w.top - grid $w.top.title_text + # grid $w.top.title_text grid $w.information + grid $w.tools -columnspan 5 -sticky w } proc spdAux::DestroyInitWindow { } { diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index ed10dc699..5692c5ef8 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -116,6 +116,8 @@ proc spdAux::processAppIncludes { root } { if {[$elem hasAttribute "public"]} {set public [$elem getAttribute "public"]} set app [apps::NewApp $appid $pn $prefix] $app setPublic $public + if {[$elem hasAttribute "is_tool"] } {$app setIsTool [$elem getAttribute "is_tool"]} + if {$active} { set dir $::Kratos::kratos_private(Path) set f [file join $dir apps $appid xml Main.spd] From 787c08e6a9ac9571883e28c90ba10472c01daf01 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Mon, 2 Nov 2020 03:21:45 +0100 Subject: [PATCH 064/556] Advances in PfemThermic --- .../examples/ThermicConvection.tcl | 179 ++++++++++++++++++ .../PfemThermic/examples/ThermicSloshing.tcl | 85 ++++++--- .../apps/PfemThermic/examples/examples.tcl | 4 +- .../PfemThermic/examples/temp_vs_dens.txt | 2 + .../apps/PfemThermic/images/2D-icon.png | Bin 0 -> 246 bytes kratos.gid/apps/PfemThermic/images/2D.png | Bin 0 -> 2931 bytes kratos.gid/apps/PfemThermic/images/2Da.png | Bin 0 -> 3563 bytes .../apps/PfemThermic/images/2da-icon.png | Bin 0 -> 288 bytes .../apps/PfemThermic/images/3D-icon.png | Bin 0 -> 248 bytes kratos.gid/apps/PfemThermic/images/3D.png | Bin 0 -> 2988 bytes .../apps/PfemThermic/images/Black/2D-icon.png | Bin 0 -> 246 bytes .../apps/PfemThermic/images/Black/2D.png | Bin 0 -> 2931 bytes .../apps/PfemThermic/images/Black/2Da.png | Bin 0 -> 3563 bytes .../PfemThermic/images/Black/2da-icon.png | Bin 0 -> 288 bytes .../apps/PfemThermic/images/Black/3D-icon.png | Bin 0 -> 248 bytes .../apps/PfemThermic/images/Black/3D.png | Bin 0 -> 2988 bytes .../apps/PfemThermic/images/Black/bodies.png | Bin 0 -> 287 bytes .../images/Black/boundaryConditions.png | Bin 0 -> 274 bytes .../images/Black/cancelProcess.png | Bin 0 -> 1863 bytes .../images/Black/contactStrategy.png | Bin 0 -> 291 bytes .../apps/PfemThermic/images/Black/data.png | Bin 0 -> 203 bytes .../PfemThermic/images/Black/doRestart.png | Bin 0 -> 258 bytes .../PfemThermic/images/Black/exampleFluid.png | Bin 0 -> 1538 bytes .../PfemThermic/images/Black/exampleFsi.png | Bin 0 -> 1526 bytes .../apps/PfemThermic/images/Black/folder.png | Bin 0 -> 262 bytes .../PfemThermic/images/Black/groupCreated.png | Bin 0 -> 422 bytes .../apps/PfemThermic/images/Black/logo.png | Bin 0 -> 19177 bytes .../apps/PfemThermic/images/Black/logo_1.png | Bin 0 -> 6332 bytes .../images/Black/meshingStrategies.png | Bin 0 -> 246 bytes .../images/Black/modelProperties.png | Bin 0 -> 1938 bytes .../PfemThermic/images/Black/modelling.png | Bin 0 -> 268 bytes .../PfemThermic/images/Black/pfemData.png | Bin 0 -> 975 bytes .../images/Black/runSimulation.png | Bin 0 -> 1887 bytes .../PfemThermic/images/Black/seeResults.png | Bin 0 -> 265 bytes .../apps/PfemThermic/images/Black/select.png | Bin 0 -> 289 bytes .../apps/PfemThermic/images/Black/setLoad.png | Bin 0 -> 283 bytes .../PfemThermic/images/Black/setUnits.png | Bin 0 -> 237 bytes .../PfemThermic/images/Black/settings.png | Bin 0 -> 294 bytes .../apps/PfemThermic/images/Black/sheets.png | Bin 0 -> 280 bytes .../images/Black/timeIntervals.png | Bin 0 -> 273 bytes .../apps/PfemThermic/images/Black/view.png | Bin 0 -> 1950 bytes kratos.gid/apps/PfemThermic/images/bodies.png | Bin 0 -> 287 bytes .../PfemThermic/images/boundaryConditions.png | Bin 0 -> 274 bytes .../apps/PfemThermic/images/boundingBox.png | Bin 0 -> 203 bytes .../apps/PfemThermic/images/cancelProcess.png | Bin 0 -> 1863 bytes .../PfemThermic/images/contactStrategy.png | Bin 0 -> 291 bytes kratos.gid/apps/PfemThermic/images/data.png | Bin 0 -> 203 bytes .../apps/PfemThermic/images/demData.png | Bin 0 -> 264 bytes .../apps/PfemThermic/images/doRestart.png | Bin 0 -> 258 bytes .../PfemThermic/images/exampleConvection.png | Bin 0 -> 1526 bytes .../PfemThermic/images/exampleSloshing.png | Bin 0 -> 1538 bytes kratos.gid/apps/PfemThermic/images/folder.png | Bin 0 -> 262 bytes .../apps/PfemThermic/images/gravityForce.png | Bin 0 -> 445 bytes .../apps/PfemThermic/images/groupCreated.png | Bin 0 -> 422 bytes .../apps/PfemThermic/images/linear_solver.png | Bin 0 -> 294 bytes kratos.gid/apps/PfemThermic/images/logo.png | Bin 4662 -> 10815 bytes .../PfemThermic/images/meshingStrategies.png | Bin 0 -> 246 bytes .../PfemThermic/images/modelProperties.png | Bin 0 -> 1938 bytes .../apps/PfemThermic/images/modelling.png | Bin 0 -> 268 bytes .../apps/PfemThermic/images/parallel_type.png | Bin 0 -> 335 bytes .../apps/PfemThermic/images/pfemData.png | Bin 0 -> 371 bytes .../apps/PfemThermic/images/runSimulation.png | Bin 0 -> 1887 bytes .../apps/PfemThermic/images/seeResults.png | Bin 0 -> 265 bytes kratos.gid/apps/PfemThermic/images/select.png | Bin 0 -> 289 bytes .../apps/PfemThermic/images/setLoad.png | Bin 0 -> 283 bytes .../apps/PfemThermic/images/setUnits.png | Bin 0 -> 237 bytes .../apps/PfemThermic/images/settings.png | Bin 0 -> 294 bytes kratos.gid/apps/PfemThermic/images/sheets.png | Bin 0 -> 280 bytes .../apps/PfemThermic/images/timeInterval.png | Bin 0 -> 287 bytes .../apps/PfemThermic/images/timeParams.png | Bin 0 -> 273 bytes kratos.gid/apps/PfemThermic/images/view.png | Bin 0 -> 1950 bytes kratos.gid/apps/PfemThermic/start.tcl | 15 +- kratos.gid/apps/PfemThermic/xml/Main.spd | 4 +- .../apps/PfemThermic/xml/NodalConditions.spd | 2 +- .../apps/PfemThermic/xml/NodalConditions.xml | 38 +++- kratos.gid/apps/PfemThermic/xml/Procs.spd | 2 +- .../apps/PfemThermic/xml/XmlController.tcl | 85 +++------ 77 files changed, 323 insertions(+), 93 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt create mode 100644 kratos.gid/apps/PfemThermic/images/2D-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/2D.png create mode 100644 kratos.gid/apps/PfemThermic/images/2Da.png create mode 100644 kratos.gid/apps/PfemThermic/images/2da-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/3D-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/3D.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/2D-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/2D.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/2Da.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/2da-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/3D-icon.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/3D.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/bodies.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/boundaryConditions.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/cancelProcess.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/contactStrategy.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/data.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/doRestart.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/exampleFluid.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/exampleFsi.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/folder.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/groupCreated.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/logo.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/logo_1.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/meshingStrategies.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/modelProperties.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/modelling.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/pfemData.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/runSimulation.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/seeResults.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/select.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/setLoad.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/setUnits.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/settings.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/sheets.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/timeIntervals.png create mode 100644 kratos.gid/apps/PfemThermic/images/Black/view.png create mode 100644 kratos.gid/apps/PfemThermic/images/bodies.png create mode 100644 kratos.gid/apps/PfemThermic/images/boundaryConditions.png create mode 100644 kratos.gid/apps/PfemThermic/images/boundingBox.png create mode 100644 kratos.gid/apps/PfemThermic/images/cancelProcess.png create mode 100644 kratos.gid/apps/PfemThermic/images/contactStrategy.png create mode 100644 kratos.gid/apps/PfemThermic/images/data.png create mode 100644 kratos.gid/apps/PfemThermic/images/demData.png create mode 100644 kratos.gid/apps/PfemThermic/images/doRestart.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleConvection.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleSloshing.png create mode 100644 kratos.gid/apps/PfemThermic/images/folder.png create mode 100644 kratos.gid/apps/PfemThermic/images/gravityForce.png create mode 100644 kratos.gid/apps/PfemThermic/images/groupCreated.png create mode 100644 kratos.gid/apps/PfemThermic/images/linear_solver.png create mode 100644 kratos.gid/apps/PfemThermic/images/meshingStrategies.png create mode 100644 kratos.gid/apps/PfemThermic/images/modelProperties.png create mode 100644 kratos.gid/apps/PfemThermic/images/modelling.png create mode 100644 kratos.gid/apps/PfemThermic/images/parallel_type.png create mode 100644 kratos.gid/apps/PfemThermic/images/pfemData.png create mode 100644 kratos.gid/apps/PfemThermic/images/runSimulation.png create mode 100644 kratos.gid/apps/PfemThermic/images/seeResults.png create mode 100644 kratos.gid/apps/PfemThermic/images/select.png create mode 100644 kratos.gid/apps/PfemThermic/images/setLoad.png create mode 100644 kratos.gid/apps/PfemThermic/images/setUnits.png create mode 100644 kratos.gid/apps/PfemThermic/images/settings.png create mode 100644 kratos.gid/apps/PfemThermic/images/sheets.png create mode 100644 kratos.gid/apps/PfemThermic/images/timeInterval.png create mode 100644 kratos.gid/apps/PfemThermic/images/timeParams.png create mode 100644 kratos.gid/apps/PfemThermic/images/view.png diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl new file mode 100644 index 000000000..49925cbb9 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -0,0 +1,179 @@ +proc ::PfemThermic::examples::ThermicConvection {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + + Kratos::ResetModel + DrawThermicConvectionGeometry$::Model::SpatialDimension + AssignGroupsThermicConvectionGeometry$::Model::SpatialDimension + TreeAssignationThermicConvection$::Model::SpatialDimension + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +# Draw Geometry +proc PfemThermic::examples::DrawThermicConvectionGeometry2D {args} { + ## Layer ## + set layer PfemThermic + GiD_Layers create $layer + GiD_Layers edit to_use $layer + + ## Points ## + set coordinates [list -0.5 -0.5 0 0.5 -0.5 0 0.5 0.5 0 -0.5 0.5 0] + set fluidPoints [list ] + foreach {x y z} $coordinates { + lappend fluidPoints [GiD_Geometry create point append Fluid $x $y $z] + } + + ## Lines ## + set fluidLines [list ] + set initial [lindex $fluidPoints 0] + foreach point [lrange $fluidPoints 1 end] { + lappend fluidLines [GiD_Geometry create line append stline Fluid $initial $point] + set initial $point + } + lappend fluidLines [GiD_Geometry create line append stline Fluid $initial [lindex $fluidPoints 0]] + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface {*}$fluidLines escape escape +} + +proc PfemThermic::examples::DrawThermicConvectionGeometry3D {args} { + # To be implemented +} + +# Group assign +proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create Rigid_Walls + GiD_Groups edit color Rigid_Walls "#e0210fff" + GiD_EntitiesGroups assign Rigid_Walls lines {1 2 3 4} + + GiD_Groups create Heat_Walls + GiD_Groups edit color Heat_Walls "#e0210fff" + GiD_EntitiesGroups assign Heat_Walls lines {1} + + GiD_Groups create Cold_Walls + GiD_Groups edit color Cold_Walls "#e0210fff" + GiD_EntitiesGroups assign Cold_Walls lines {3} + +} +proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry3D {args} { + # To be implemented +} + +# Tree assign +proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { + # Physics + spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name Body2} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name Body3} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name Body4} + + # Fluid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" + set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 TEMPERATURE_vs_DENSITY "temp_vs_dens.txt" CONDUCTIVITY 1000.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 2100000000.0] + spdAux::SetValuesOnBaseNode $fluidNode $props + + # Rigid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='BodyType'\]" {v Rigid} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] + $rigidNode setAttribute ov line + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + + # Heat body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/value\[@n='BodyType'\]" {v Rigid} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Heat_Walls] + $rigidNode setAttribute ov line + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + + # Cold body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/value\[@n='BodyType'\]" {v Rigid} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Cold_Walls] + $rigidNode setAttribute ov line + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + + # Velocity BC + GiD_Groups clone Rigid_Walls Total + GiD_Groups edit parent Total Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//Total" + GiD_Groups edit state "Rigid_Walls//Total" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//Total"] + $fixVelocityNode setAttribute ov line + + # Temperature BC + GiD_Groups clone Heat_Walls TotalH + GiD_Groups edit parent TotalH Heat_Walls + spdAux::AddIntervalGroup Heat_Walls "Heat_Walls//TotalH" + GiD_Groups edit state "Heat_Walls//TotalH" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Heat_Walls//TotalH"] + $fixTemperatureNode setAttribute ov line + set props [list value 373.65 Interval Total] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + GiD_Groups clone Cold_Walls TotalC + GiD_Groups edit parent TotalC Cold_Walls + spdAux::AddIntervalGroup Cold_Walls "Cold_Walls//TotalC" + GiD_Groups edit state "Cold_Walls//TotalC" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Cold_Walls//TotalH"] + $fixTemperatureNode setAttribute ov line + set props [list value 372.65 Interval Total] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + # Temperature IC + GiD_Groups clone Fluid Initial + GiD_Groups edit parent Initial Fluid + spdAux::AddIntervalGroup Fluid "Fluid//Initial" + GiD_Groups edit state "Fluid//Initial" hidden + set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] + $thermalICnode setAttribute ov surface + set props [list value 373.15 Interval Initial] + spdAux::SetValuesOnBaseNode $thermalICnode $props + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 120.00 DeltaTime 0.005 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicConvection3D {args} { + # To be implemented +} + +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index ae1cf6ff6..ca313a902 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -1,4 +1,3 @@ - proc ::PfemThermic::examples::ThermicSloshing {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" @@ -9,7 +8,6 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { Kratos::ResetModel DrawThermicSloshingGeometry$::Model::SpatialDimension AssignGroupsThermicSloshingGeometry$::Model::SpatialDimension - # AssignThermicSloshingMeshSizes$::Model::SpatialDimension TreeAssignationThermicSloshing$::Model::SpatialDimension GiD_Process 'Redraw @@ -18,26 +16,24 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { GiD_Process 'Zoom Frame } - # Draw Geometry -proc PfemThermic::examples::DrawThermicSloshingGeometry3D {args} { - # To be implemented -} - proc PfemThermic::examples::DrawThermicSloshingGeometry2D {args} { - set layer PfemThermic + ## Layer ## + set layer PfemThermic GiD_Layers create $layer GiD_Layers edit to_use $layer - ## Lines ## - set points_inner [list 0 0 0 1.0 0 0 1.0 0.3 0 0 0.7 0] + ## Points ## + set points_inner [list 0 0 0 3.0 0 0 3.0 0.3 0 0 0.5 0] foreach {x y z} $points_inner { GiD_Geometry create point append $layer $x $y $z } - set points_outer [list 0 1.0 0 1.0 1.0 0] + set points_outer [list 0 1.0 0 3.0 1.0 0] foreach {x y z} $points_outer { GiD_Geometry create point append $layer $x $y $z } + + ## Lines ## set lines_inner [list 1 2 2 3 3 4 4 1] foreach {p1 p2} $lines_inner { GiD_Geometry create line append stline $layer $p1 $p2 @@ -51,11 +47,12 @@ proc PfemThermic::examples::DrawThermicSloshingGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape } - +proc PfemThermic::examples::DrawThermicSloshingGeometry3D {args} { + # To be implemented +} # Group assign proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry2D {args} { - # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -70,30 +67,30 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry3D {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicSloshing3D {args} { - # To be implemented -} - proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { -# ONLY ASSIGN VELOCITY X Y EQUAL TO 0 TO THE RIGID LINES (SEE ABOVE) - # Fluid Parts - set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + # Physics + spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name Body2} + + # Fluid body gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} - set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] - set props [list ConstitutiveLaw Newtonian DENSITY 1e3] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 100.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.001 BULK_MODULUS 2100000000.0] spdAux::SetValuesOnBaseNode $fluidNode $props - + + # Rigid body gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='BodyType'\]" {v Rigid} set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/condition\[@n='Parts'\]" set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] $rigidNode setAttribute ov line gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} - - # Velocidad + + # Velocity BC GiD_Groups clone Rigid_Walls Total GiD_Groups edit parent Total Rigid_Walls spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//Total" @@ -101,6 +98,44 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//Total"] $fixVelocityNode setAttribute ov line + + # Temperature BC + GiD_Groups clone Rigid_Walls TotalT + GiD_Groups edit parent TotalT Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalT" + GiD_Groups edit state "Rigid_Walls//TotalT" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalT"] + $fixTemperatureNode setAttribute ov line + set props [list value 263.15 Interval Total] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + # Temperature IC + GiD_Groups clone Fluid Initial + GiD_Groups edit parent Initial Fluid + spdAux::AddIntervalGroup Fluid "Fluid//Initial" + GiD_Groups edit state "Fluid//Initial" hidden + set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] + $thermalICnode setAttribute ov surface + set props [list value 283.15 Interval Initial] + spdAux::SetValuesOnBaseNode $thermalICnode $props + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 0.04 DeltaTime 0.001 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicSloshing3D {args} { + # To be implemented } proc PfemThermic::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index 6aa2cecdb..41548d0c5 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -4,11 +4,13 @@ namespace eval PfemThermic::examples { proc PfemThermic::examples::Init { } { uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicSloshing.tcl]] + uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicConvection.tcl]] } proc PfemThermic::examples::UpdateMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic sloshing" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshing] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic sloshing" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshing] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic convection" ] 7 PRE [list ::PfemThermic::examples::ThermicConvection] "" "" insertafter = GiDMenu::UpdateMenus } diff --git a/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt b/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt new file mode 100644 index 000000000..72e58930d --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt @@ -0,0 +1,2 @@ +99.5 1050 +100.5 950 \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/images/2D-icon.png b/kratos.gid/apps/PfemThermic/images/2D-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..94bcc789f74208e4fa8615c9cda8fa2012e7ba8b GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3-oH7vA{>q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&VEhgt-3y|6f@?a$^6Q6UVPbg*UHVeelWSSBARD^XG1B zZd`Qj>VsW7Pk;RQ)yK2K-a440Ue4;?TF`h1tAr-gQ^jY#9aNuAz)Hy9@`S1Vj z0+W}MGY=>$JAUCdx*c=nW~AnWi0Kj;ifuCDZ521z)~yznYH|zpNOb4YTzFvJ+~A6N tmz-BPE*2~3z0LiT;q>eN^EOO846lnBr-rhwR{+|>;OXk;vd$@?2>|aWVG;lU literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/2D.png b/kratos.gid/apps/PfemThermic/images/2D.png new file mode 100644 index 0000000000000000000000000000000000000000..0531136c8b3eac97e91235137b71f0565ff7e7fb GIT binary patch literal 2931 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/2da-icon.png b/kratos.gid/apps/PfemThermic/images/2da-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bff5726c279dc6fd8c8954d392e90ec592fba755 GIT binary patch literal 288 zcmV+*0pI?KP)f0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh7u@%539tXfxty1C0S zEn~>X)^>B3uRRM-1E0001kNkl6JC zK?q&gr(li}amiyaa|PZ~Mzm#)+bGmzF0BJ>4yxPL4zRB1HtRg#IqZ?zdhY81K(m<7 msoz`16uJJPF*jTIFTenVtpcb7%cUUz0000q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73l`}gt-3y|6f@?a$^6QsPN_!$FDtk{K`-_dF|?hA3uIA zE1qs|oi~5(wrf`(?Am!cBenMv;{{`&#zapS$B>F!YtDP~9Z=w431IvABl~^*9j3f0 zhV;ZUlaDmM@T%Fe(bMvih!4ZECZE@g{bkJ@Qk{*(E$nO5Cp>o)S^S>S(!pxut8=W` v>;+BIHuFCIP7UeTSa3D@t@Z3$CLRXXe8v;GRkBGy%NRUe{an^LB{Ts56Qp9E literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/3D.png b/kratos.gid/apps/PfemThermic/images/3D.png new file mode 100644 index 0000000000000000000000000000000000000000..405a7dc000657a37ba804c25170acf801a30fdd0 GIT binary patch literal 2988 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 ebVVFH+Hvlm()34EUj{hHRNpF4t literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/2D-icon.png b/kratos.gid/apps/PfemThermic/images/Black/2D-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..94bcc789f74208e4fa8615c9cda8fa2012e7ba8b GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3-oH7vA{>q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&VEhgt-3y|6f@?a$^6Q6UVPbg*UHVeelWSSBARD^XG1B zZd`Qj>VsW7Pk;RQ)yK2K-a440Ue4;?TF`h1tAr-gQ^jY#9aNuAz)Hy9@`S1Vj z0+W}MGY=>$JAUCdx*c=nW~AnWi0Kj;ifuCDZ521z)~yznYH|zpNOb4YTzFvJ+~A6N tmz-BPE*2~3z0LiT;q>eN^EOO846lnBr-rhwR{+|>;OXk;vd$@?2>|aWVG;lU literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/2D.png b/kratos.gid/apps/PfemThermic/images/Black/2D.png new file mode 100644 index 0000000000000000000000000000000000000000..0531136c8b3eac97e91235137b71f0565ff7e7fb GIT binary patch literal 2931 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/2da-icon.png b/kratos.gid/apps/PfemThermic/images/Black/2da-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bff5726c279dc6fd8c8954d392e90ec592fba755 GIT binary patch literal 288 zcmV+*0pI?KP)f0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh7u@%539tXfxty1C0S zEn~>X)^>B3uRRM-1E0001kNkl6JC zK?q&gr(li}amiyaa|PZ~Mzm#)+bGmzF0BJ>4yxPL4zRB1HtRg#IqZ?zdhY81K(m<7 msoz`16uJJPF*jTIFTenVtpcb7%cUUz0000q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73l`}gt-3y|6f@?a$^6QsPN_!$FDtk{K`-_dF|?hA3uIA zE1qs|oi~5(wrf`(?Am!cBenMv;{{`&#zapS$B>F!YtDP~9Z=w431IvABl~^*9j3f0 zhV;ZUlaDmM@T%Fe(bMvih!4ZECZE@g{bkJ@Qk{*(E$nO5Cp>o)S^S>S(!pxut8=W` v>;+BIHuFCIP7UeTSa3D@t@Z3$CLRXXe8v;GRkBGy%NRUe{an^LB{Ts56Qp9E literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/3D.png b/kratos.gid/apps/PfemThermic/images/Black/3D.png new file mode 100644 index 0000000000000000000000000000000000000000..405a7dc000657a37ba804c25170acf801a30fdd0 GIT binary patch literal 2988 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 ebVVFH+Hvlm()34EUj{hHRNpF4t literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/bodies.png b/kratos.gid/apps/PfemThermic/images/Black/bodies.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6960759fda449594c8a77d0b406259285b84fe GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*mfD!lo`@oOJHeqFoz;QYDUnj07Scvf7y z`k<_MdPZvR#Qrsgy2(!-zuL9)G*JDfYnK#&+67C3{DOg86u_Xmc4iV#GS${( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kD|KrE6KAsiVu0AL$p1yYVK||f-T{};oIDSo8 zKC-!SQB-*IlgF>@t@9@KubDr0TSjWHQ^l0sK<%ZTE{-7;w|Xvk^ED{&uv|DN!qT<> z_xv!eLx+yIm>pRBa!JRZ=&DDSGr!3$iCUY;E90MFS-j22ak|U?Bdp9!pL~6UGYW2f zkIrgVcoyp4Yq3S7K)UwY;e}hDnr(VgaN&w@^;Bma&NIamZYk_bt8RAKU;jubfuW+7 WDe)uMZgUgULs45r&UR_gCdatg&aezLAYG~^1 zr}ququdJ#@*4D$|$ZBL=L1A%ccOSG8PN8*!ib`th8W1(8S`@mWu?5|PAyd1WT5ug? z+WjFmq@qe9Q#3YX2k$fM(ap53-m>xvIHGoYdmG=@Ay=p?VF)6L3ahTEsjY9p;;EfI z?H!cTG6=S{Ex!Q7;R#XojrSnXIux40cR+6#sYcZH4>A-gO&gIs#Nx6z z{MosAtE?_N-Q$L*SCKrR9|=(+p#Xm6e^hYPG7=+OhFTkw~o74=a^wl}a-_I%b?Q zNu)9!U)a^tXR$0oDk{Zd$@=;_pD*O_1WY#9Xf$!S0=ZmiGMP;?W?)usPv3w*Ae^0h zR8(AwClI%`w;cxsLJ2S{=ix)MLZO;`FlD#f1wzrwmmBRw(&*R(iA*z_=Y&GBL@Jlb z6;xUm7K>LXRYI|p*41M)PDy1747Rng2{SS}ArMJsXXm&)fz56oqz|DRTa44D-u^+Q zO1rbOo0Xlrx%ryGWXlvPJfU5!)hm=53azWNyLWJq&SY`8JRylpO-s+@@%Y&}`5LWm zZEbCJ)vDI$usA%AFM4R6G(7{z=I}HcU20ke2GdGsFee@u zhnVak7RR!3<5Ji!z@6{K*6Hj^%6J z?z*ch3}%be9wc4zak?X9Odda-_3_bE2`3Pnn~)Sd>i&Mr48}FYlNjRC@WbS%3BIM& zN0`NVx9?Mu&zQ|6rIKEMm)`1c5Fi8Y^Uhax|5IMS&;eBpMngOa;Tc{9zgXkt7Z`hS zbmes#atnz>wzt2!wjMJ+5EqMJA1Fk6lBgBb`Y*zcy_j=C#`T3X|N2Cu&bu0Oyz%GA zX=EY%Fnqqz>-@VnPhydw*}mcF$pELXJ>$MQkfE`j2ocU-T=##QdeIHrfJPfSywvLJ ziRaHk&OrbcYv_{E^jq2F5@8{;SQ+&5hHX;G+|)yI>C| zVA_l5n>Uy87gz2+mpBt3#y{NAeK=?QH3Je8VY)oqLd`h!V=?M;);U>f+oNc-7xKt_ z?FWZ}S8h^9qw=1%W8F<1l_TD-2Gc{^;VBfOf zhB6=sn(qI?o07$hjT7O_~B0m$gcjQvZcNAtM$ap+Xq6E{SMW)kS>HK0uN2E;N3PYmcRa; zQojG=9ldU(E2#g^N}prpb+@q20kD? zJlKhh?>?MB^o6?pK1&)xICapx5fyZ>iFl}UV0`M>Ny=THgv@|by1)-Nz?W48Wg#&* yiFF_Caq;T&{l1?+^~?0by5egfcJPhW!tpD0!;@ literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/contactStrategy.png b/kratos.gid/apps/PfemThermic/images/Black/contactStrategy.png new file mode 100644 index 0000000000000000000000000000000000000000..458ad983791c49707b347d788758d04b3a5a8ea7 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kD|HVv58 zW*^UriT!Ju8yBrzeelHbYrA%yo4Qej%W2s;7%% zNX4y`eowvw3Ovl4H#`6Se_rfsfWleDAh(UFhk5_MyvyjLc1n(|Gwvpf?JCZO-~UcF z^-fxP*5JjLM+>?|Ru#M7?z9r(GCdFzrgBK}iVS)*Z=?jpE!PPV*i?`@aB&nzdm{V%HBHf+SLbT#nb28 z`+|&g^K@|xskqhC@5#lWz;k5R&OiT;Hmwa>CU?d#Wr6CigFh1VB8~>~DNZ~kYPU({ yn-XW1K_=58k;NiyM~^V^y?#|vSF?*nf+6h!!{x8SH`#$EGI+ZBxvX{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kD|HScYhPugR#nYALBcD8e6&2px+_-4|+-)B} ze)aLJxOVkHMr!ZG{xxe?AKbO`^p7iMAPX`)T^vIyZuLxX=R07)!Lm|s$CLm2d+&5i znf#qeN|&4IL6~JLSK3CI3!T-B!k&BuQ=Yh_&MbDmc+>TpP2c90t4ZzGIfgYVAs>J7uV-LpaFAep#QQ|j0%#|Lr>mdKI;Vst E09Ht8kN^Mx literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/exampleFluid.png b/kratos.gid/apps/PfemThermic/images/Black/exampleFluid.png new file mode 100644 index 0000000000000000000000000000000000000000..f0a8cc66b5a4ba45101847dfe3c66df4f00cc794 GIT binary patch literal 1538 zcmV+d2L1VoP)U%^r>cpI zj+mOAdwhS0iHxbMu9B3Oij0qgg@~7#oQ8*rtgf-6rKpsanSFkNpP{6hoS%k>i>s}$ zq^7Bkkdugtjd^-~czJwub$E)4j-sTeet&|FkCK9fhlPiVb98sAtgp7Wy0WylsH&}i zfrO^0tA2okZ*X$L!^N(!vxJ3+b#{4ia&)=7y}rQ0frEy;y})*NdU|_)jE#`Ey1c)@ z!?d=!x4659iHxA4rFVFHZEkS0wYaUXvOS;0Y;A9_vbDs;$AyN8gM^2$vb4j*#=XA4 za&vZTY;Li$wQzBCxw^f0d3%3>go})ioSva|c6hI`w7a~&y1c%Lij8S%Y$2r939RYG z#>gV2*1f;MZ;_xpwBl%giLJT6W@l+MtlBi8%PXYOC#u^EuIyE!z=V*OadC4sqs+j< z#KFSECaK$rpsNq4;cASUUW=WctFdZpZoIv}A*9tFtl?X!$780zX@H6qt>A$8v$lksreu(#WwOw%udzdqt+u$jbai))j*$qf z>2Ps#U5T4Gu-)b6=Ul1BFrLSEczSo4s4}3*e5t!AtKG4)wjZL?x4FBLpQe3&fWX1S zETz(1pSe?@zHxGOUW%NVu)FB#>9x1Hc#oQfsJAb& zo;#@0TAjCrvcwps+e5J0BCzF`nVXEGuBX1p#m2{Qhmv!2b~dEW0~nj?0008HNkl+Hl?W~!zXH3`K-QC^Y-QC^Y-M#$*JE)&+ z&#&M6eC|2-!lgM{tF@4$DUt}nxxsvezd0%3SNnDyI&~TH1HPI}CS|73VC85m3E^Bl zKiQn!IkZLl07;THYPGCUDbyBfEP`q*KVBH?)N!*QB!r?Uk%&~wOqp7aMiL&WS1jFz z-52>!fQg~g{X(de8ktFG)kp+f{qg6$0?I0G<^zpJQ>hpXCf$!pQOmGw5pbu&+oXW9 z-P3@Fan<1oeWd{alzFzhM%Y(Jd#xFlfiDEk)HDz+VXydhfYNw+zgv7;p-Go8JBv( zet#gs)V}+_;jOMJ<{9XwEfNGPV0_}khE#h_d9MjM`j zw9{$b>wB-=dk^8p?a3zzo(^B3ZJ=SLiS?Bk>Bs(Ch2cla3^C4C_AQG`%}93? literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/exampleFsi.png b/kratos.gid/apps/PfemThermic/images/Black/exampleFsi.png new file mode 100644 index 0000000000000000000000000000000000000000..419a1453d3b20ad9956aebb6dbd289d5cbd53838 GIT binary patch literal 1526 zcmVA}Lphlq>4zQKZohiYqWx3{>pwYGVVr-rnC6tmUw>v~+cN zv$eS2-{8c>$BT@Q;^O1Ey1nD$3wzs;lvbDOqzHe}Hzq-7>wz#@+a&)@7ymhzHeSUxnuIsh8x=ygx zUZK04sFIZPdUBMap`oOlsjoe%)SI)tW2V4NnYV$1hN!8mDXiY& zgyg|fuJ!Nic9 zqhh4LX`#0fspB}X-m$Z`t*^0vp|Ejra}2NSMV-Hhs=2thxvHwHy1Kg+t>$ZNZftFD zn!Cw@nx($JzrMb}zQ4e}zrkpgr=hsQIHk`}sLE8V&YZr?czJtzhK;eawRf(?K%>b+ zrp&drx3;#oS&^q)l&W=hd3JYtmzkSGn!L2OxN3}>wYRyKq^rEWzP-J_pRBXw<>h{g zk(HL2yS%@+xVkN{;vA{paB*~Ub9KeW$A^iGqNJu*nzS0H-KVIkySu&Pr7z#2n z;@YLV+=QVQ^?`V}S)-a7^g}9@N~g=tHe|$UwnD@EX?WO%*W3{wXEdg&bW;lU0648q z)7v$t(Bm*72tp=PD*47#-3$Pz*1G9!IM^G}a8d?-ff-N2U9DSd3SU+rk|Y%hfz_3K zfDhpGOl!l;*NBN@u}FnL%8&u5>chNHMB$$|h>qj&n3!o&0AqWoPPgG`FT}>Fed#=Z z7C8XgC_Mq<)=>B<4{^C%x!jM9nRyk?5Xvez)sn)lw~$aM3>Jy3%*%m^Qer9mw&Aep zNGz5}qOr@_XCa3aFa|>9A_^Z}Kt8w>u|z1ccZAI>1+5AyTT%Ep9_8l71etwOBzwof z54t}~0N`oE#l^_d&C<71jCoxY^zWmlGq>Q4KT~+D2$hzOkI0`h8KBE7uAi@eceo;J zOX2YlRG3(@>=pj;-cO=Ma`k$EqyO+k2pXO|Xg9#N4M9GVVD7_T(2GViq3|RJg(ro7 z8*}=BC1!_M$ej(2n`jIhHs&Cc$vHeZab$j(Sv+YWz)pN>Ew*Tyu+g})H#u#Z{5kUD5+;s2M2Ii`Ta6p2p>w; zUC7xr`9)!5#P*s~*mNdIBRa2L@NvldnLjybRe54bWQ3*6oMQb1I#VGf_&S3oG)o`b c{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kDUs*o#MXw)e+yrXO_jGX#skl`#!Bgmf0tbua0ao8n|DPXYU0ZP? zX2WeQE`?v*?Wfe2YaC)vf3$Ya;mx6w_N?)14e2s{H{( zJaZG%Q-e|yQz{EjrrH1%B?S0{xc>kDe`5cd_3MuX1-2OKCV%|+b=S_**RDQTyZT^r z<05kEJ2i$||!Ufq7? z#h*FP-`z`HX<7VkRZ_yM4Q(ogGej@smG0Kw-_gObis@C@!ekTW0I9}}?^g3B+<2I_ z;pmOeg4HaEC%6u0C53jz?vk2Yv$E0o%!ATj_c|t6cWjObNcyz2A?aNzkMFl73$j0~ s{@r@kd+(%NvDtfH);gx-{Si%IP+ZF{Ec#l>80dBePgg&ebxsLQ0A_pEa{vGU literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/logo.png b/kratos.gid/apps/PfemThermic/images/Black/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0514b9d0b880796d6735afd37979864a5486da GIT binary patch literal 19177 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 Eg4rYl#{d8T literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/logo_1.png b/kratos.gid/apps/PfemThermic/images/Black/logo_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cff91a03d148a063b8389f40d3691bba95f3fcbc GIT binary patch literal 6332 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 Q{mBBLpwKIVzz6960gDBsi2wiq literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/modelling.png b/kratos.gid/apps/PfemThermic/images/Black/modelling.png new file mode 100644 index 0000000000000000000000000000000000000000..ce73a296ed890e2eebe2bb8512be205cc81eae06 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtRgSw7Oov!bkc`p1u7PaMB??dpSx{cG&4 z^D(u0Gh@xM=>|ZBHJ*iZfrY1k_vP>EaktaVzKiYrX~r4%P$**8Ho#_vbdO zT~Ye)fZasihW$SOybkk+EZVutcMpeP@8Ml@y1c^|N-PfpQEif~-P{hK_8)fr;!& zg(60c6BlwQJ8e8D8g%i4ig8j=6DOCLxP+vXs+zinrk07RnYo3fm9vYho4bdnS8zyZ zSa?KaRB}pcT6#uiR&hybS$RceRdY*gTYE=m*QCi)rcRqaW9F9X@jO*zpr5PhGlvL#-q5m0J ze*fqPlCOR^f1La%{-Ax^{Vn`Q{Cl^})4BF1_tAd_*_ZP_O!R*Ed$0A;dnzAhRcIgj z_PuDvAGLj=+b`K2UJ;wAnY}v8PC@+FnqAGe>yvN4JRm<||5o`w($ha$fa#GY7_t1dVT9YhUsC}fp zU#Q0LVtZF<@#@#R?lTfg`H|q{>qomge-bZ#>F<;}-}pz^a@Qq&-8bo1O}(vm*Z*)@aQ*At;T@I{lcOX6TOVU+vkl?hEMal~z~3{>vWx;q{;JE&D&F T{%7c%eq?g=oqG)Y|8D{SG%0(C literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/runSimulation.png b/kratos.gid/apps/PfemThermic/images/Black/runSimulation.png new file mode 100644 index 0000000000000000000000000000000000000000..32ca7ce81a24f244b18449968c113dbb0c7ad6bc GIT binary patch literal 1887 zcmd^9`BT#e9*uxV5g2r}O1CO?TB`_Jz_pdOOho7cDvO95T3WCia+45*ByuGrKsW;g z0)!g_gd{+YZ%%S@g(Hv>+^3*^H0n{ zAdsb(r@Nnl&;A87W5c%C{HfGHHZYGM*!{#vSZWwF0(3Jx@o|K$SA1AhgkMBhI2@vg z_znaz+V;KU@A2WohZ1~6MkcDLq%1GLu&ko0oIorr#^cK?F}XNgVM$dr=~;SKacMd7 zStd5GAitovwyv?Fvbu)Ukb}*yB-Uo5Fodca6dFscsVglbU~_R<**Vp<_2``3H2AZp zsR(HD)4GP{+`NMN#+HJjQdmk_9}o||8ojm9QHl2vLAslI7oP>~Ev)$8@b zUJ0AS&%xx;yP542T51|HJ|RgU6hojXD=Tj~T*1P^Vo7OvVNt29Zy+%Vs-1n&*whMe z_*|YaIwp?G7fNOFZU%dQfB)d%psj=2&0zH~*(`w9KQJVd^-<|P5^0}EER#rOF|i4K z{eu{6{?^tzdEbCqGc__g#$W+O#rQNh^6l!{xJtdgzCoeV8B9Q-7?nunOcs#x6#nas zwyLVSuWx`@O_CUN3@Kvc5=A1(n>Q;R9TdgzNUun$RE|^W-CJ8*dwP9*0z@R1h$S)( zmrtX2PfgG8_=33j#HH8&-PqXF>2yM&h)_w?YPFf!IV$yJOlV%LZxQ0fbE?f<%Eh#>q<>S zyj@*ob9jp3Q8vJfjEWu|Q{u}BJihQrbgWn+g{7puVXzr2&febM$e40*@ug}~L+@tH%*+mtj2SFesnnaBI!Y&fZhoPI zLR(u~FU42PXlJ$B7XZKoxO{S3hjLuSV6yl2^l|Y?^9ze2v2=cZVRd!Q5P0jd^Ay9A z{14{mbKh|OT?eE=3}zU5;CC&$f4gaicq_NMB$6ZsY8*5#_C*RLjH@A=+``4r6Kd&6AhA04tyx)*iNlrmvr z7ph*GtURKq9Sn$Sh)f$();Cjz`@d*Z%Em99|1zwtY1xGEAt1fJ34O|pSgn1qQxuYA zem<4?8AX8M1A=zhf(e*3tw^+i)-Uv7FA-DBa=47R;u;&0^Fhyd`1%rkbeF160vL&L+~-cYnZ=&rSk zRfVS~$m>7fkjbZqUS2jck%7OMTXLiRL!Py?_PYl(TVn~wOr&8;?Ck8ky`|ujbIqtk z@T^mi{{HFHo9|cp+b=nhoSmH1j{kaa@A!#I3!_Iai^S!N#`3!ku5e6&1%%H(d-gi` zX;aIlGJJ^M;Ygm?%0nHNq2F9C&TwYafrtr z0f6b?>JA-sHB{Xk_o-ri;Qwqoc*N#9a@>Mr2?wY%5UX3Rp1a?3tdIQSJOK@~x!{Tg za0!=lf3_gp4X}!&fwgNcb8ghaQCp7I@rI+x)USfTkH0c`{^k+lOk`-#=4Yc0R%HQI z(B8e@7}++;`rFVy>@xePQ!Mz{Mhsc&1UJEE4JV2 z6=XX2SaE90cMcY?B7aoG&9lZ>yS~N4<+Nmb=QHV}2}qBBB39bXyp7P9Q>X1E->7O1 bTZe*nc89JAvX6Hd$^hi$;p0ws3q}12Cx(06 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/seeResults.png b/kratos.gid/apps/PfemThermic/images/Black/seeResults.png new file mode 100644 index 0000000000000000000000000000000000000000..85f3442098fbcd7f1817d46cfb6ff8452023438c GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*o#Ws{Eh#_&>R!y_tRg|6l3{7+mX^944iGJq)y$ N!PC{xWt~$(69CF`Z>9hM literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/select.png b/kratos.gid/apps/PfemThermic/images/Black/select.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cb04841578dd1b4031d1a4afd1b3636ed75b57 GIT binary patch literal 289 zcmV++0p9+JP)4>OVVfT33Vd z@%4j&qR7YApPjZNA6c!d!AwbbXl0FdbC^ z2t$GJZ=3f1ryZhXs%*+CSdRS!z}K`Z+rBHNnQX#A(m?6{?=D<#B;zF@A;8VzAUKsc z;SoOSZ_o6l4pTte2z0{e>>L niSW*eeIRV(+1uw`egX^t#GeBI23e@V00000NkvXXu0mjfwZM5T literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/setLoad.png b/kratos.gid/apps/PfemThermic/images/Black/setLoad.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb12ba2a43030e0644567e2b3af8af892d1a992 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kDKPtTW#PMs&@{tq!*F1Ur>e|%@^XG1BZd_!j zo4jl1X&=vuwW|->Tj!M(PyhJwYes4>P|LI8-TFWigi3<^f`MFA!0>4Qej%W2tfz}( zNX4x={df5q6gb=*16_1q|BW|$k-ziiH7oJ^M;|8hL_AdYzTzQfDbIFS)J1=p*TsEP z7z7Px6v{C+&DUA-c4-RpCf#QrbHB)z$n9LXG4Xps*yIh1>wZ=XCor%XGp?Q%`f?i3 OA_h-aKbLh*2~7Zu(0soD literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/setUnits.png b/kratos.gid/apps/PfemThermic/images/Black/setUnits.png new file mode 100644 index 0000000000000000000000000000000000000000..95f68e36218081e291016b8bde67b00d1f78232c GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kD-^a7!tK!JnVfyvSJ_P_r--)>wW zQ*Pwr@Wf&rD@RIFu=kUSnCJ6F=I&TCp;IKQdGUoeYgQJX))EoCt(T|zz+lG`q1A@5 kpO;4Hh1u_aCYr!-ON=q^{2h@+KpPl5UHx3vIVCg!0GY{QoB#j- literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/Black/settings.png b/kratos.gid/apps/PfemThermic/images/Black/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..286e690b2c6cbff7ee337ce8f4536114f5d5eb98 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!*Z=?j8|o%Ug*W?nR$ROK;N!=yCyrlJmXFLx?S1n2 z)%>~JCibt{we$4a)d%gZ^U8{+H#aWQoy7AFsJ+wE#WAGfR*%1@&|w3PWaEV9w}1X` zRXkU6E7@{`M-K}_ecOV>|1)i5G&*k2wC>w0GHKmkrOr^7rISuZKFrv{VSdDp>vYwX zyvK^$ydpUpHqH2H62-uMK_{W&D{G1ST#eLuopm|a8de-uf0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh5YEo1TV^^uRPT33U} z$JXTI>OVVfy1C0}WsP=om#wS8Oi6gw)!>7HqMx0%9}^Kx0001cNklS6uPqDeByuGn{B6g4E;N{ ej<+{_1Q-BWTLNZ_w>zT%0000{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtT0P&aw)>Vvy>o}Sph#@;%wta$qTx!bN? zeQ@IVHD&q8=Eg-IKYqmW^`k;JE~fJshW{pp&lVf2@xbj zNQfZB`w>Cn5%PY&CEn4rh*0Kuiy4}tZHUpe=gfbx_nhy$=l*o>58wUr0{neHvOQ)C z002I^c>{QNkDdQFhxYI7BWphq_vllY&m&l1TsSNllmG^JhsFIH>~a$ViU8jQgThkc z`@mNLfIs~n;CIjG!-o&)8R*LDy4w22lG5@tWG02$LawOJ!xKzHhCRfhQ&9D6Wt7&CrYkT{(+05ba z==9d*WfQfD#%6O22BTD_?C50n^!7(Qjnek^J=ee7+}wPYl%iCsmrbUb*;!S$R<9pv zZD%yM&^Ih1zUQDI@RPN$bE zlorbti^K0=bjf52dTYn}`o_TE(7=#RE>}iHLxyz2ZS4%PL@E#nA+hmXo`BNWJTdvo zXq>QGtuIH$lqz)$Bu@8Szq-06k;riQ1f6cUlgSo~r6nZt;LxyKp^A=)eHs}p6p9o| z_1@)Q3U;}**Om{kyZ(WD^8Xls@Eu$b0I>h;O`!KZ_=H~(_{n3CJ+|;k>47_kYYyQ) z#+N-fYL8f{p1Ke|C|vtEWcjXP>JPk`M08raJ{Xp+4d*%TUX1XsB-QSQXViUbSnHHs zN*l!XlwfyK6W-1LRuFu92i5d2|A)3qkC*Q&H>e`>q?bE#{YkKu_xaDiH>MlDEWhn- zDspkBIPNZ^vPh;e+oj0Sxs`_sh$n*dcxWcT&hW-w(ksD zVCEuuxRI82@H9I42Eq!6eesk-bxq|x+A(kR&m078`Yr^Zli#kIH;D4=kx}*-|7s0M}O$xukzm;d(c-47?*sXQ~Q!ic%b9VxPh^x-H zNFrb<`k0$mK!Z|_+rCXj_D&y*D7v!f4fQy?#Dkrlja>aQ>U=0wo2q1FKUXRp{sKerr;KdU}dK|Fu-!M`kqTLZcH z>q9e9yGb?wn09#`;r4RnQ%b227 zjcM$2bXZ|MpIrx+9ZGZeQ=h7eguzD3q(85EYRFFWOxEX?pjXV$eFH^{J!|EtUEsE< c6R;nkE??yM{5Unb_d)!IlX0)X7SUH||9 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/bodies.png b/kratos.gid/apps/PfemThermic/images/bodies.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6960759fda449594c8a77d0b406259285b84fe GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*mfD!lo`@oOJHeqFoz;QYDUnj07Scvf7y z`k<_MdPZvR#Qrsgy2(!-zuL9)G*JDfYnK#&+67C3{DOg86u_Xmc4iV#GS${( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kD|KrE6KAsiVu0AL$p1yYVK||f-T{};oIDSo8 zKC-!SQB-*IlgF>@t@9@KubDr0TSjWHQ^l0sK<%ZTE{-7;w|Xvk^ED{&uv|DN!qT<> z_xv!eLx+yIm>pRBa!JRZ=&DDSGr!3$iCUY;E90MFS-j22ak|U?Bdp9!pL~6UGYW2f zkIrgVcoyp4Yq3S7K)UwY;e}hDnr(VgaN&w@^;Bma&NIamZYk_bt8RAKU;jubfuW+7 WDe)uM-G2co#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5P_o1|q9iy!t)x7$D3!r6B|j-u!8128JvAsb zF{QHbWU38Nk+r9bV~B-+@*jQ{9uX!r4PU_p`xLdf0uy|6q}f(H5_-k1W43%zbKrXc q_KerENjD4(JoY;4Eof5Y;bCaMqjbxz`ltcW7zR&QKbLh*2~7Ysi#Kfm literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/cancelProcess.png b/kratos.gid/apps/PfemThermic/images/cancelProcess.png new file mode 100644 index 0000000000000000000000000000000000000000..c83c56540de7bbe5748204397136581c60b04c8e GIT binary patch literal 1863 zcmd^<`CAi)8OKv7*eY07M}?L-CgM<9tVb=in-5i7rB=r!1&U0RJKO}qVF)B7Kp-4R zNFe0mh8S|+_sMM_7(ki!sfNRm1Vr4poG$%4_I;lB{XXBH-e2C&w=Vp~_wM^Y-46f& z+{3PhMmqe+Z}Wk(W4o;-HapB4bR`xPm759zCl#aszDv%%lj0keos^amnUa)Tnm?BE z7XZNNb@-3bSKhsQR{@3f^bMBZgLd`w--A>ZgUgULs45r&UR_gCdatg&aezLAYG~^1 zr}ququdJ#@*4D$|$ZBL=L1A%ccOSG8PN8*!ib`th8W1(8S`@mWu?5|PAyd1WT5ug? z+WjFmq@qe9Q#3YX2k$fM(ap53-m>xvIHGoYdmG=@Ay=p?VF)6L3ahTEsjY9p;;EfI z?H!cTG6=S{Ex!Q7;R#XojrSnXIux40cR+6#sYcZH4>A-gO&gIs#Nx6z z{MosAtE?_N-Q$L*SCKrR9|=(+p#Xm6e^hYPG7=+OhFTkw~o74=a^wl}a-_I%b?Q zNu)9!U)a^tXR$0oDk{Zd$@=;_pD*O_1WY#9Xf$!S0=ZmiGMP;?W?)usPv3w*Ae^0h zR8(AwClI%`w;cxsLJ2S{=ix)MLZO;`FlD#f1wzrwmmBRw(&*R(iA*z_=Y&GBL@Jlb z6;xUm7K>LXRYI|p*41M)PDy1747Rng2{SS}ArMJsXXm&)fz56oqz|DRTa44D-u^+Q zO1rbOo0Xlrx%ryGWXlvPJfU5!)hm=53azWNyLWJq&SY`8JRylpO-s+@@%Y&}`5LWm zZEbCJ)vDI$usA%AFM4R6G(7{z=I}HcU20ke2GdGsFee@u zhnVak7RR!3<5Ji!z@6{K*6Hj^%6J z?z*ch3}%be9wc4zak?X9Odda-_3_bE2`3Pnn~)Sd>i&Mr48}FYlNjRC@WbS%3BIM& zN0`NVx9?Mu&zQ|6rIKEMm)`1c5Fi8Y^Uhax|5IMS&;eBpMngOa;Tc{9zgXkt7Z`hS zbmes#atnz>wzt2!wjMJ+5EqMJA1Fk6lBgBb`Y*zcy_j=C#`T3X|N2Cu&bu0Oyz%GA zX=EY%Fnqqz>-@VnPhydw*}mcF$pELXJ>$MQkfE`j2ocU-T=##QdeIHrfJPfSywvLJ ziRaHk&OrbcYv_{E^jq2F5@8{;SQ+&5hHX;G+|)yI>C| zVA_l5n>Uy87gz2+mpBt3#y{NAeK=?QH3Je8VY)oqLd`h!V=?M;);U>f+oNc-7xKt_ z?FWZ}S8h^9qw=1%W8F<1l_TD-2Gc{^;VBfOf zhB6=sn(qI?o07$hjT7O_~B0m$gcjQvZcNAtM$ap+Xq6E{SMW)kS>HK0uN2E;N3PYmcRa; zQojG=9ldU(E2#g^N}prpb+@q20kD? zJlKhh?>?MB^o6?pK1&)xICapx5fyZ>iFl}UV0`M>Ny=THgv@|by1)-Nz?W48Wg#&* yiFF_Caq;T&{l1?+^~?0by5egfcJPhW!tpD0!;@ literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/contactStrategy.png b/kratos.gid/apps/PfemThermic/images/contactStrategy.png new file mode 100644 index 0000000000000000000000000000000000000000..458ad983791c49707b347d788758d04b3a5a8ea7 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kD|HVv58 zW*^UriT!Ju8yBrzeelHbYrA%yo4Qej%W2s;7%% zNX4y`eowvw3Ovl4H#`6Se_rfsfWleDAh(UFhk5_MyvyjLc1n(|Gwvpf?JCZO-~UcF z^-fxP*5JjLM+>?|Ru#M7?z9r(GCdFzrgBK}iVS)*Z=?jpE!PPV*i?`@aB&nzdm{V%HBHf+SLbT#nb28 z`+|&g^K@|xskqhC@5#lWz;k5R&OiT;Hmwa>CU?d#Wr6CigFh1VB8~>~DNZ~kYPU({ yn-XW1K_=58k;NiyM~^V^y?#|vSF?*nf+6h!!{x8SH`#$EGI+ZBxvX>GEXgEbHGRD(dOGFG16Ot+}k=e9PRrVm>D>-8UMI{;;aH%%i!ti K=d#Wzp$P!7HD}iV literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/doRestart.png b/kratos.gid/apps/PfemThermic/images/doRestart.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8be7c0bdfc4bdad199891ac8caa0b1e645ca5f GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kD|HScYhPugR#nYALBcD8e6&2px+_-4|+-)B} ze)aLJxOVkHMr!ZG{xxe?AKbO`^p7iMAPX`)T^vIyZuLxX=R07)!Lm|s$CLm2d+&5i znf#qeN|&4IL6~JLSK3CI3!T-B!k&BuQ=Yh_&MbDmc+>TpP2c90t4ZzGIfgYVAs>J7uV-LpaFAep#QQ|j0%#|Lr>mdKI;Vst E09Ht8kN^Mx literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/exampleConvection.png b/kratos.gid/apps/PfemThermic/images/exampleConvection.png new file mode 100644 index 0000000000000000000000000000000000000000..419a1453d3b20ad9956aebb6dbd289d5cbd53838 GIT binary patch literal 1526 zcmVA}Lphlq>4zQKZohiYqWx3{>pwYGVVr-rnC6tmUw>v~+cN zv$eS2-{8c>$BT@Q;^O1Ey1nD$3wzs;lvbDOqzHe}Hzq-7>wz#@+a&)@7ymhzHeSUxnuIsh8x=ygx zUZK04sFIZPdUBMap`oOlsjoe%)SI)tW2V4NnYV$1hN!8mDXiY& zgyg|fuJ!Nic9 zqhh4LX`#0fspB}X-m$Z`t*^0vp|Ejra}2NSMV-Hhs=2thxvHwHy1Kg+t>$ZNZftFD zn!Cw@nx($JzrMb}zQ4e}zrkpgr=hsQIHk`}sLE8V&YZr?czJtzhK;eawRf(?K%>b+ zrp&drx3;#oS&^q)l&W=hd3JYtmzkSGn!L2OxN3}>wYRyKq^rEWzP-J_pRBXw<>h{g zk(HL2yS%@+xVkN{;vA{paB*~Ub9KeW$A^iGqNJu*nzS0H-KVIkySu&Pr7z#2n z;@YLV+=QVQ^?`V}S)-a7^g}9@N~g=tHe|$UwnD@EX?WO%*W3{wXEdg&bW;lU0648q z)7v$t(Bm*72tp=PD*47#-3$Pz*1G9!IM^G}a8d?-ff-N2U9DSd3SU+rk|Y%hfz_3K zfDhpGOl!l;*NBN@u}FnL%8&u5>chNHMB$$|h>qj&n3!o&0AqWoPPgG`FT}>Fed#=Z z7C8XgC_Mq<)=>B<4{^C%x!jM9nRyk?5Xvez)sn)lw~$aM3>Jy3%*%m^Qer9mw&Aep zNGz5}qOr@_XCa3aFa|>9A_^Z}Kt8w>u|z1ccZAI>1+5AyTT%Ep9_8l71etwOBzwof z54t}~0N`oE#l^_d&C<71jCoxY^zWmlGq>Q4KT~+D2$hzOkI0`h8KBE7uAi@eceo;J zOX2YlRG3(@>=pj;-cO=Ma`k$EqyO+k2pXO|Xg9#N4M9GVVD7_T(2GViq3|RJg(ro7 z8*}=BC1!_M$ej(2n`jIhHs&Cc$vHeZab$j(Sv+YWz)pN>Ew*Tyu+g})H#u#Z{5kUD5+;s2M2Ii`Ta6p2p>w; zUC7xr`9)!5#P*s~*mNdIBRa2L@NvldnLjybRe54bWQ3*6oMQb1I#VGf_&S3oG)o`b cU%^r>cpI zj+mOAdwhS0iHxbMu9B3Oij0qgg@~7#oQ8*rtgf-6rKpsanSFkNpP{6hoS%k>i>s}$ zq^7Bkkdugtjd^-~czJwub$E)4j-sTeet&|FkCK9fhlPiVb98sAtgp7Wy0WylsH&}i zfrO^0tA2okZ*X$L!^N(!vxJ3+b#{4ia&)=7y}rQ0frEy;y})*NdU|_)jE#`Ey1c)@ z!?d=!x4659iHxA4rFVFHZEkS0wYaUXvOS;0Y;A9_vbDs;$AyN8gM^2$vb4j*#=XA4 za&vZTY;Li$wQzBCxw^f0d3%3>go})ioSva|c6hI`w7a~&y1c%Lij8S%Y$2r939RYG z#>gV2*1f;MZ;_xpwBl%giLJT6W@l+MtlBi8%PXYOC#u^EuIyE!z=V*OadC4sqs+j< z#KFSECaK$rpsNq4;cASUUW=WctFdZpZoIv}A*9tFtl?X!$780zX@H6qt>A$8v$lksreu(#WwOw%udzdqt+u$jbai))j*$qf z>2Ps#U5T4Gu-)b6=Ul1BFrLSEczSo4s4}3*e5t!AtKG4)wjZL?x4FBLpQe3&fWX1S zETz(1pSe?@zHxGOUW%NVu)FB#>9x1Hc#oQfsJAb& zo;#@0TAjCrvcwps+e5J0BCzF`nVXEGuBX1p#m2{Qhmv!2b~dEW0~nj?0008HNkl+Hl?W~!zXH3`K-QC^Y-QC^Y-M#$*JE)&+ z&#&M6eC|2-!lgM{tF@4$DUt}nxxsvezd0%3SNnDyI&~TH1HPI}CS|73VC85m3E^Bl zKiQn!IkZLl07;THYPGCUDbyBfEP`q*KVBH?)N!*QB!r?Uk%&~wOqp7aMiL&WS1jFz z-52>!fQg~g{X(de8ktFG)kp+f{qg6$0?I0G<^zpJQ>hpXCf$!pQOmGw5pbu&+oXW9 z-P3@Fan<1oeWd{alzFzhM%Y(Jd#xFlfiDEk)HDz+VXydhfYNw+zgv7;p-Go8JBv( zet#gs)V}+_;jOMJ<{9XwEfNGPV0_}khE#h_d9MjM`j zw9{$b>wB-=dk^8p?a3zzo(^B3ZJ=SLiS?Bk>Bs(Ch2cla3^C4C_AQG`%}93? literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/folder.png b/kratos.gid/apps/PfemThermic/images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..86b16d281bfa4759d2dde7f2243d6fe82046f03f GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kDUs*o#MXw)e+yrXO_jGX#skl`#!Bgmf0tbua0ao8n|DPXYU0ZP? zX2WeQE`?v*?Wfe2YaC)vf3$Ya;mx6w_N?)14e2s{HXj~~DOU%UF?|B3x;{y%yA>i>!3*T5Jg4gw&y zvV7$Kvf}A*7qGw#x_<2;Lv%zl-1G(Ww!_&=SJX0?TWG>9ee&cDoXrGdl$Fc?YvAMK zVn|5x1k&6@c?oR5(xFaR=O nJt?^lId8xW2%sc80|XcV!t$A>pv(CQ00000NkvXXu0mjfd404Y literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/groupCreated.png b/kratos.gid/apps/PfemThermic/images/groupCreated.png new file mode 100644 index 0000000000000000000000000000000000000000..628d643f7ee5d8d1794fc3cbed3b9d7825354c05 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%B?S0{xc>kDe`5cd_3MuX1-2OKCV%|+b=S_**RDQTyZT^r z<05kEJ2i$||!Ufq7? z#h*FP-`z`HX<7VkRZ_yM4Q(ogGej@smG0Kw-_gObis@C@!ekTW0I9}}?^g3B+<2I_ z;pmOeg4HaEC%6u0C53jz?vk2Yv$E0o%!ATj_c|t6cWjObNcyz2A?aNzkMFl73$j0~ s{@r@kd+(%NvDtfH);gx-{Si%IP+ZF{Ec#l>80dBePgg&ebxsLQ0A_pEa{vGU literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/linear_solver.png b/kratos.gid/apps/PfemThermic/images/linear_solver.png new file mode 100644 index 0000000000000000000000000000000000000000..286e690b2c6cbff7ee337ce8f4536114f5d5eb98 GIT binary patch literal 294 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 diff --git a/kratos.gid/apps/PfemThermic/images/meshingStrategies.png b/kratos.gid/apps/PfemThermic/images/meshingStrategies.png new file mode 100644 index 0000000000000000000000000000000000000000..188f7e122eb43b729ee5a4efd3d511f732b5f3bf GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%X$AO%xc>kDe`5a{W%lo-ROLNuDl_Ar-fJE_e$u2=cI8_>+>>@;koVCE(2$t*>2| z7z;#CMjmT0RG7HPz4L>}Jf$^%Km5+)e);LwzPn_DB792+EzrNW>;v|qXj%cQw%pT+=P$-AqRmF z?m!Yk2q6avB;-y=Lc$S9Kv+aTF)oMYY!T#&ZQ1ni*f;auH*e<6H}k&t<~d|`OBRg?a}qudn7x!!-K-$Hxhq_r$xdbz@B`F6`T2$6|BMuu zkOu~bdV2fg6Ov-%5_fiXN=nO#C1gq+om^f;t7q0Xuxe^)Wfj%rEUqXk z8%bw0HZ-ys%%*AzwWzq1N^hv8)|Xe-+0nDw#sn)!p0KX?$gUZMDAE={t*vBtfgFyT?vw5Q!yobMwitl%=KRwY7Kk zjK+x4iaHTTk$g|PM(AcV)S~`QNRB4(y{HdvFvABJ5@>Ojey_QPf*w~1RPqI&O zXn3T>E={{su2jpF8ii8bDw4E`By;og6_quXfk91&4xW<6wQDVwG&D9nfv4GPu{Z*w zp>b$vBrQEltJD7+4P`fT<#L5Wp|lg3`ueTb|7tq415byjbVd!OPOmq_#KtR>s@1<* zS<`Cu9UZz}Q@^lP)Ni)52!tw?Mj}&aG}`B5<6?>I-THcCQ**DWZ+>CHWa?LGv`8en zuitE6Rg?MH)_Q-_O9eSHz(&ONaXx5kWL&}x58y?phm_lrMI zm8FVuJq)fs9&R6%Ne=8ekz}1c#}*#)o)k}TN}&k~AW!VzHpg+S01nK|=Y01kdr;;Vx8WqANxqbd3J9_$jJq~?{t?~Jj3#HhP}px4{eShwGO z&sRui6?k;$rvT3VPxC2s|I^`TXMXr#wX)@#Z<)OPz2GnkbIG-F^YM4zK8W5QWzkK1 zIP>>~-&XKpPLI5CJdkZ>=USBr^lnAsR2lvHUz91&@~4Z4anh~ah*!AGMKguH_ zLVKPEUZ$Z~tf^AcQ^xQzG%!$7iFe^PoLPwK{44+}yGaBv%%w=@(=zD=-+uzE^?+d; z=F8v!=$o3F=z>a_voov9CB)wmlTn1t1Q&PddXX{$tQ*Zfw)p@zNberfnBbEf7sT;EU@jM Q{mBBLpwKIVzz6960gDBsi2wiq literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/modelling.png b/kratos.gid/apps/PfemThermic/images/modelling.png new file mode 100644 index 0000000000000000000000000000000000000000..ce73a296ed890e2eebe2bb8512be205cc81eae06 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtRgSw7Oov!bkc`p1u7PaMB??dpSx{cG&4 z^D(u0Gh@xM=>|ZBHJ*iZfrY1k_vP>EaktaVzKiYrX~r4%P$**8Ho#_vbdO zT~Ye)fZasihW$SOybkk+EZVutcMpeP@8Ml@y1c^|N-O~`$cQimh1i3|Kx`IL16^816pS%k5FOD17hJlchV(!@ zdEy!aHp4&w_kXOJ!TuKCaFCobTs~jURL#+qW0pxlC hl$`@8$<6=)1^^*r;Rxj2lk@-p002ovPDHLkV1kmreaQd- literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/pfemData.png b/kratos.gid/apps/PfemThermic/images/pfemData.png new file mode 100644 index 0000000000000000000000000000000000000000..9e70bb3e90bb4bf2d8fd3858fd1038d37ff48733 GIT binary patch literal 371 zcmV-(0gV2MP)_C$ z{+~K^^FJPN9%O(3E?JNPTACSPTvfRcrzuQ8hZr#60MDMig|nX`vC#nw10G;%s>To- z=frU1#uJ8$ics7Nfv$1*Pa$AJHt_W6TMQdE9A_W|K7ans(9y9Pw|AAY2CEH3VkR-n|#WY+MEqG(q{$f!dAT#d7zA3|;)pi{*#MXqV6leHASPlAK#zWOgBU?67D(?0=Z~k5 z{DI8?WB@WmLqis9A>+^3*^H0n{ zAdsb(r@Nnl&;A87W5c%C{HfGHHZYGM*!{#vSZWwF0(3Jx@o|K$SA1AhgkMBhI2@vg z_znaz+V;KU@A2WohZ1~6MkcDLq%1GLu&ko0oIorr#^cK?F}XNgVM$dr=~;SKacMd7 zStd5GAitovwyv?Fvbu)Ukb}*yB-Uo5Fodca6dFscsVglbU~_R<**Vp<_2``3H2AZp zsR(HD)4GP{+`NMN#+HJjQdmk_9}o||8ojm9QHl2vLAslI7oP>~Ev)$8@b zUJ0AS&%xx;yP542T51|HJ|RgU6hojXD=Tj~T*1P^Vo7OvVNt29Zy+%Vs-1n&*whMe z_*|YaIwp?G7fNOFZU%dQfB)d%psj=2&0zH~*(`w9KQJVd^-<|P5^0}EER#rOF|i4K z{eu{6{?^tzdEbCqGc__g#$W+O#rQNh^6l!{xJtdgzCoeV8B9Q-7?nunOcs#x6#nas zwyLVSuWx`@O_CUN3@Kvc5=A1(n>Q;R9TdgzNUun$RE|^W-CJ8*dwP9*0z@R1h$S)( zmrtX2PfgG8_=33j#HH8&-PqXF>2yM&h)_w?YPFf!IV$yJOlV%LZxQ0fbE?f<%Eh#>q<>S zyj@*ob9jp3Q8vJfjEWu|Q{u}BJihQrbgWn+g{7puVXzr2&febM$e40*@ug}~L+@tH%*+mtj2SFesnnaBI!Y&fZhoPI zLR(u~FU42PXlJ$B7XZKoxO{S3hjLuSV6yl2^l|Y?^9ze2v2=cZVRd!Q5P0jd^Ay9A z{14{mbKh|OT?eE=3}zU5;CC&$f4gaicq_NMB$6ZsY8*5#_C*RLjH@A=+``4r6Kd&6AhA04tyx)*iNlrmvr z7ph*GtURKq9Sn$Sh)f$();Cjz`@d*Z%Em99|1zwtY1xGEAt1fJ34O|pSgn1qQxuYA zem<4?8AX8M1A=zhf(e*3tw^+i)-Uv7FA-DBa=47R;u;&0^Fhyd`1%rkbeF160vL&L+~-cYnZ=&rSk zRfVS~$m>7fkjbZqUS2jck%7OMTXLiRL!Py?_PYl(TVn~wOr&8;?Ck8ky`|ujbIqtk z@T^mi{{HFHo9|cp+b=nhoSmH1j{kaa@A!#I3!_Iai^S!N#`3!ku5e6&1%%H(d-gi` zX;aIlGJJ^M;Ygm?%0nHNq2F9C&TwYafrtr z0f6b?>JA-sHB{Xk_o-ri;Qwqoc*N#9a@>Mr2?wY%5UX3Rp1a?3tdIQSJOK@~x!{Tg za0!=lf3_gp4X}!&fwgNcb8ghaQCp7I@rI+x)USfTkH0c`{^k+lOk`-#=4Yc0R%HQI z(B8e@7}++;`rFVy>@xePQ!Mz{Mhsc&1UJEE4JV2 z6=XX2SaE90cMcY?B7aoG&9lZ>yS~N4<+Nmb=QHV}2}qBBB39bXyp7P9Q>X1E->7O1 bTZe*nc89JAvX6Hd$^hi$;p0ws3q}12Cx(06 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/seeResults.png b/kratos.gid/apps/PfemThermic/images/seeResults.png new file mode 100644 index 0000000000000000000000000000000000000000..85f3442098fbcd7f1817d46cfb6ff8452023438c GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*o#Ws{Eh#_&>R!y_tRg|6l3{7+mX^944iGJq)y$ N!PC{xWt~$(69CF`Z>9hM literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/select.png b/kratos.gid/apps/PfemThermic/images/select.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cb04841578dd1b4031d1a4afd1b3636ed75b57 GIT binary patch literal 289 zcmV++0p9+JP)4>OVVfT33Vd z@%4j&qR7YApPjZNA6c!d!AwbbXl0FdbC^ z2t$GJZ=3f1ryZhXs%*+CSdRS!z}K`Z+rBHNnQX#A(m?6{?=D<#B;zF@A;8VzAUKsc z;SoOSZ_o6l4pTte2z0{e>>L niSW*eeIRV(+1uw`egX^t#GeBI23e@V00000NkvXXu0mjfwZM5T literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/setLoad.png b/kratos.gid/apps/PfemThermic/images/setLoad.png new file mode 100644 index 0000000000000000000000000000000000000000..fbb12ba2a43030e0644567e2b3af8af892d1a992 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kDKPtTW#PMs&@{tq!*F1Ur>e|%@^XG1BZd_!j zo4jl1X&=vuwW|->Tj!M(PyhJwYes4>P|LI8-TFWigi3<^f`MFA!0>4Qej%W2tfz}( zNX4x={df5q6gb=*16_1q|BW|$k-ziiH7oJ^M;|8hL_AdYzTzQfDbIFS)J1=p*TsEP z7z7Px6v{C+&DUA-c4-RpCf#QrbHB)z$n9LXG4Xps*yIh1>wZ=XCor%XGp?Q%`f?i3 OA_h-aKbLh*2~7Zu(0soD literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/setUnits.png b/kratos.gid/apps/PfemThermic/images/setUnits.png new file mode 100644 index 0000000000000000000000000000000000000000..95f68e36218081e291016b8bde67b00d1f78232c GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kD-^a7!tK!JnVfyvSJ_P_r--)>wW zQ*Pwr@Wf&rD@RIFu=kUSnCJ6F=I&TCp;IKQdGUoeYgQJX))EoCt(T|zz+lG`q1A@5 kpO;4Hh1u_aCYr!-ON=q^{2h@+KpPl5UHx3vIVCg!0GY{QoB#j- literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/images/settings.png b/kratos.gid/apps/PfemThermic/images/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..286e690b2c6cbff7ee337ce8f4536114f5d5eb98 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!*Z=?j8|o%Ug*W?nR$ROK;N!=yCyrlJmXFLx?S1n2 z)%>~JCibt{we$4a)d%gZ^U8{+H#aWQoy7AFsJ+wE#WAGfR*%1@&|w3PWaEV9w}1X` zRXkU6E7@{`M-K}_ecOV>|1)i5G&*k2wC>w0GHKmkrOr^7rISuZKFrv{VSdDp>vYwX zyvK^$ydpUpHqH2H62-uMK_{W&D{G1ST#eLuopm|a8de-uf0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh5YEo1TV^^uRPT33U} z$JXTI>OVVfy1C0}WsP=om#wS8Oi6gw)!>7HqMx0%9}^Kx0001cNklS6uPqDeByuGn{B6g4E;N{ ej<+{_1Q-BWTLNZ_w>zT%0000@^*J&=wOxg z0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBiw(em)Bp$zuB%K%r7k7sn8e>&XcYY;8?! z0n-u|FiZ*EyPM(AjA>G{%ovY6xRQ{NaFJ!>4JiqUcfQOU&qzpAOnu&5vijcM>X%Qh zFgr}!{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtT0P&aw)>Vvy>o}Sph#@;%wta$qTx!bN? zeQ@IVHD&q8=Eg-IKYqmW^`k;JE~fJshW{pp&lVf2@xbj zNQfZB`w>Cn5%PY&CEn4rh*0Kuiy4}tZHUpe=gfbx_nhy$=l*o>58wUr0{neHvOQ)C z002I^c>{QNkDdQFhxYI7BWphq_vllY&m&l1TsSNllmG^JhsFIH>~a$ViU8jQgThkc z`@mNLfIs~n;CIjG!-o&)8R*LDy4w22lG5@tWG02$LawOJ!xKzHhCRfhQ&9D6Wt7&CrYkT{(+05ba z==9d*WfQfD#%6O22BTD_?C50n^!7(Qjnek^J=ee7+}wPYl%iCsmrbUb*;!S$R<9pv zZD%yM&^Ih1zUQDI@RPN$bE zlorbti^K0=bjf52dTYn}`o_TE(7=#RE>}iHLxyz2ZS4%PL@E#nA+hmXo`BNWJTdvo zXq>QGtuIH$lqz)$Bu@8Szq-06k;riQ1f6cUlgSo~r6nZt;LxyKp^A=)eHs}p6p9o| z_1@)Q3U;}**Om{kyZ(WD^8Xls@Eu$b0I>h;O`!KZ_=H~(_{n3CJ+|;k>47_kYYyQ) z#+N-fYL8f{p1Ke|C|vtEWcjXP>JPk`M08raJ{Xp+4d*%TUX1XsB-QSQXViUbSnHHs zN*l!XlwfyK6W-1LRuFu92i5d2|A)3qkC*Q&H>e`>q?bE#{YkKu_xaDiH>MlDEWhn- zDspkBIPNZ^vPh;e+oj0Sxs`_sh$n*dcxWcT&hW-w(ksD zVCEuuxRI82@H9I42Eq!6eesk-bxq|x+A(kR&m078`Yr^Zli#kIH;D4=kx}*-|7s0M}O$xukzm;d(c-47?*sXQ~Q!ic%b9VxPh^x-H zNFrb<`k0$mK!Z|_+rCXj_D&y*D7v!f4fQy?#Dkrlja>aQ>U=0wo2q1FKUXRp{sKerr;KdU}dK|Fu-!M`kqTLZcH z>q9e9yGb?wn09#`;r4RnQ%b227 zjcM$2bXZ|MpIrx+9ZGZeQ=h7eguzD3q(85EYRFFWOxEX?pjXV$eFH^{J!|EtUEsE< c6R;nkE??yM{5Unb_d)!IlX0)X7SUH||9 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 2d593e86b..af7837182 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -48,8 +48,21 @@ proc ::PfemThermic::GetAttribute {name} { proc ::PfemThermic::CustomToolbarItems { } { variable dir + # Reset the left toolbar + set Kratos::kratos_private(MenuItems) [dict create] + set img_dir [file join $dir images] + if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { + set img_dir [file join $img_dir Black] + } + Kratos::ToolbarAddItem "Model" [file join $img_dir "modelProperties.png"] [list -np- gid_groups_conds::open_conditions menu] [= "Define the model properties"] + Kratos::ToolbarAddItem "Spacer" "" "" "" + Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] + Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] + Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] + Kratos::ToolbarAddItem "Spacer" "" "" "" if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicSloshing] [= "Example\nThermic sloshing"] + Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleSloshing.png"] [list -np- ::PfemThermic::examples::ThermicSloshing] [= "Example\nThermic sloshing"] + Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleConvection.png"] [list -np- ::PfemThermic::examples::ThermicConvection] [= "Example\nThermic convection"] } } diff --git a/kratos.gid/apps/PfemThermic/xml/Main.spd b/kratos.gid/apps/PfemThermic/xml/Main.spd index 31641153e..71b58bcf5 100644 --- a/kratos.gid/apps/PfemThermic/xml/Main.spd +++ b/kratos.gid/apps/PfemThermic/xml/Main.spd @@ -1,6 +1,6 @@ - + @@ -11,7 +11,7 @@ - + diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd index 308c58921..3af787984 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml index fda658515..27045cdee 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml @@ -1,7 +1,37 @@ - - + + + + + + + + + + + + - - + diff --git a/kratos.gid/apps/PfemThermic/xml/Procs.spd b/kratos.gid/apps/PfemThermic/xml/Procs.spd index 4d8d92516..08bacfe77 100644 --- a/kratos.gid/apps/PfemThermic/xml/Procs.spd +++ b/kratos.gid/apps/PfemThermic/xml/Procs.spd @@ -37,7 +37,7 @@ diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index 019fb30d3..a550616c6 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -23,59 +23,49 @@ proc PfemThermic::xml::CustomTree { args } { spdAux::parseRoutes ########## From PfemFluid custom tree ########## - - - - - - - - - foreach node [$root getElementsByTagName container] { if {[$node hasAttribute prefix] && [$node getAttribute prefix] eq "PFEMFLUID_"} {set root $node; break} } + foreach node [$root getElementsByTagName container] { if {[$node hasAttribute prefix] && [$node getAttribute prefix] eq "PFEMTHERMIC_"} {set root $node; break} } foreach node [$root getElementsByTagName value] { $node setAttribute icon data } foreach node [$root getElementsByTagName container] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder} } - spdAux::SetValueOnTreeItem icon sheets Intervals - foreach node [[$root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select } - spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMTHERMIC_NodalConditions VELOCITY - spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMTHERMIC_NodalConditions PRESSURE - foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMTHERMIC_NodalConditions]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated } - if {[spdAux::getRoute PFEMFLUID_Loads] ne ""} { - spdAux::SetValueOnTreeItem icon setLoad PFEMFLUID_Loads - foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Loads]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated } } - + foreach node [[$root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'velocity_linear_solver_settings'\]" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'pressure_linear_solver_settings'\]" ] { $node setAttribute icon select } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]" ] { $node setAttribute icon select } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon data } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'StratParams'\]" ] { $node setAttribute icon data } - - [[$root parent] selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits - - #spdAux::SetValueOnTreeItem v Yes NodalResults VELOCITY - #spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE - #spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT - #spdAux::SetValueOnTreeItem v No NodalResults VELOCITY_REACTION - #spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT_REACTION + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]" ] { $node setAttribute icon select } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon data } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'StratParams'\]" ] { $node setAttribute icon data } + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition" ] { $node setAttribute icon select + $node setAttribute groups_icon groupCreated } + if {[spdAux::getRoute PFEMFLUID_Loads] ne ""} { + spdAux::SetValueOnTreeItem icon setLoad PFEMFLUID_Loads + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Loads]/condition" ] { $node setAttribute icon select $node setAttribute groups_icon groupCreated } } set inlet_result_node [[$root parent] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'INLET'\]"] if { $inlet_result_node ne "" } { $inlet_result_node delete } - spdAux::SetValueOnTreeItem icon doRestart Restart - spdAux::SetValueOnTreeItem icon select Restart RestartOptions - if {$Model::SpatialDimension eq "3D"} { catch { spdAux::SetValueOnTreeItem v -9.81 PFEMFLUID_Gravity Cy spdAux::SetValueOnTreeItem v 0.0 PFEMFLUID_Gravity Cz } } - + + [[$root parent] selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits + + spdAux::SetValueOnTreeItem icon sheets Intervals + spdAux::SetValueOnTreeItem icon doRestart Restart + spdAux::SetValueOnTreeItem icon select Restart RestartOptions + + spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMFLUID_NodalConditions VELOCITY + spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMFLUID_NodalConditions PRESSURE + + spdAux::SetValueOnTreeItem v Yes NodalResults VELOCITY + spdAux::SetValueOnTreeItem v No NodalResults VELOCITY_REACTION + spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE + spdAux::SetValueOnTreeItem v No NodalResults PRESSURE_REACTION + spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT + spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT_REACTION + spdAux::SetValueOnTreeItem v No NodalResults HeatFlux2D ################################################ ConvectionDiffusion::xml::CustomTree @@ -83,7 +73,6 @@ proc PfemThermic::xml::CustomTree { args } { spdAux::SetValueOnTreeItem v linear CNVDFFAnalysisType spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat - Model::ForgetSolutionStrategy stationary set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'ParallelType'\]"] if { $result_node ne "" } {$result_node delete} @@ -116,24 +105,4 @@ proc PfemThermic::xml::ProcGetElementsValues {domNode args} { return $values } -proc PfemThermic::xml::ProcGetConstitutiveLaws {domNode args} { - set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] - set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] - - if {[llength $Claws] == 0} { - set names [list "None"] - } { - set names [list ] - foreach cl $Claws { - lappend names [$cl getName] - } - } - - set values [join $names ","] - - if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]; spdAux::RequestRefresh} - - return $values -} - PfemThermic::xml::Init From 3963a0f39535850723cd62cfb0f86c14e92c34bd Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 2 Nov 2020 14:49:39 +0100 Subject: [PATCH 065/556] Hidden it's not updating the scheme, so element filters are not applied --- kratos.gid/apps/Fluid/xml/AnalysisType.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/Fluid/xml/AnalysisType.spd b/kratos.gid/apps/Fluid/xml/AnalysisType.spd index 9fc90a8ef..bd00ea862 100644 --- a/kratos.gid/apps/Fluid/xml/AnalysisType.spd +++ b/kratos.gid/apps/Fluid/xml/AnalysisType.spd @@ -2,7 +2,7 @@ - + From d6ffa330c230e83e560b824373f8e0d2d8631db0 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 2 Nov 2020 15:34:50 +0100 Subject: [PATCH 066/556] Restore previous circle mesher --- kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index b92b68e67..ef533dfb1 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -15,10 +15,16 @@ proc ::DEM::examples::CirclesDrop {args} { GidUtils::UpdateWindow LAYER GiD_Process 'Zoom Frame - GiD_Process Mescape Utilities Variables CircleMesher 0 escape escape - + # MESH + # TODO: Remove this once the Granular mesher works fine with multiple surfaces + ## Remember the old mesher + set prev_mesher [GiD_Set CircleMesher] + ## Set RBall as circle mesher + GiD_Set CircleMesher 0 + ## Mesh MeshGenerationOKDo 1.0 - + ## Restore previous circle mesher preference + GiD_Set CircleMesher $prev_mesher } proc ::DEM::examples::DrawGeometryCirclesDrop { } { From 376488db35c4604da96e10c099d6b2b9183e4df0 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Mon, 2 Nov 2020 17:20:14 +0100 Subject: [PATCH 067/556] Added built-in tests --- kratos.gid/apps/PfemFluid/xml/Main.spd | 2 +- .../examples/ThermicConvection.tcl | 36 +++++++++---------- kratos.gid/apps/PfemThermic/write/write.tcl | 3 ++ .../write/writeProjectParameters.tcl | 1 - kratos.gid/apps/PfemThermic/xml/Main.spd | 4 +-- 5 files changed, 22 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/Main.spd b/kratos.gid/apps/PfemFluid/xml/Main.spd index 23249a3c8..b22395379 100644 --- a/kratos.gid/apps/PfemFluid/xml/Main.spd +++ b/kratos.gid/apps/PfemFluid/xml/Main.spd @@ -6,7 +6,7 @@ - + diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 49925cbb9..e78d0b0cc 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -24,23 +24,19 @@ proc PfemThermic::examples::DrawThermicConvectionGeometry2D {args} { GiD_Layers edit to_use $layer ## Points ## - set coordinates [list -0.5 -0.5 0 0.5 -0.5 0 0.5 0.5 0 -0.5 0.5 0] - set fluidPoints [list ] - foreach {x y z} $coordinates { - lappend fluidPoints [GiD_Geometry create point append Fluid $x $y $z] + set points [list -0.5 -0.5 0.0 0.5 -0.5 0.0 0.5 0.5 0.0 -0.5 0.5 0.0] + foreach {x y z} $points { + GiD_Geometry create point append $layer $x $y $z } - - ## Lines ## - set fluidLines [list ] - set initial [lindex $fluidPoints 0] - foreach point [lrange $fluidPoints 1 end] { - lappend fluidLines [GiD_Geometry create line append stline Fluid $initial $point] - set initial $point + + ## Lines ## + set lines [list 1 2 2 3 3 4 4 1] + foreach {p1 p2} $lines { + GiD_Geometry create line append stline $layer $p1 $p2 } - lappend fluidLines [GiD_Geometry create line append stline Fluid $initial [lindex $fluidPoints 0]] - + ## Surface ## - GiD_Process Mescape Geometry Create NurbsSurface {*}$fluidLines escape escape + GiD_Process Mescape Geometry Create NurbsSurface 1 2 3 4 escape escape } proc PfemThermic::examples::DrawThermicConvectionGeometry3D {args} { @@ -54,7 +50,7 @@ proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { GiD_EntitiesGroups assign Fluid surfaces 1 GiD_Groups create Rigid_Walls - GiD_Groups edit color Rigid_Walls "#e0210fff" + GiD_Groups edit color Rigid_Walls "#3b3b3bff" GiD_EntitiesGroups assign Rigid_Walls lines {1 2 3 4} GiD_Groups create Heat_Walls @@ -62,7 +58,7 @@ proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { GiD_EntitiesGroups assign Heat_Walls lines {1} GiD_Groups create Cold_Walls - GiD_Groups edit color Cold_Walls "#e0210fff" + GiD_Groups edit color Cold_Walls "#42eb71ff" GiD_EntitiesGroups assign Cold_Walls lines {3} } @@ -88,7 +84,7 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] - set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 TEMPERATURE_vs_DENSITY "temp_vs_dens.txt" CONDUCTIVITY 1000.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 2100000000.0] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 1000.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 2100000000.0] spdAux::SetValuesOnBaseNode $fluidNode $props # Rigid body @@ -129,7 +125,7 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Heat_Walls//TotalH"] $fixTemperatureNode setAttribute ov line - set props [list value 373.65 Interval Total] + set props [list value 373.65 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props GiD_Groups clone Cold_Walls TotalC @@ -137,9 +133,9 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { spdAux::AddIntervalGroup Cold_Walls "Cold_Walls//TotalC" GiD_Groups edit state "Cold_Walls//TotalC" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Cold_Walls//TotalH"] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Cold_Walls//TotalC"] $fixTemperatureNode setAttribute ov line - set props [list value 372.65 Interval Total] + set props [list value 372.65 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 97876e477..c307f0c03 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -5,6 +5,9 @@ namespace eval ::PfemThermic::write { proc ::PfemThermic::write::Init { } { PfemFluid::write::Init ConvectionDiffusion::write::Init + + PfemFluid::write::SetAttribute materials_file PFEMThermicMaterials.json + ConvectionDiffusion::write::SetAttribute materials_file PFEMThermicMaterials.json } # MDPA event diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 4d35ce003..c9217fe8d 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -24,7 +24,6 @@ proc PfemThermic::write::GetSolverSettingsDict { } { dict set solverSettingsDict solver_type "pfem_fluid_thermally_coupled_solver" dict set solverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0] ] - dict set solverSettingsDict materials_filename "PFEMThermicMaterials.json" # "time_stepping" set timeSteppingDict [dict create] diff --git a/kratos.gid/apps/PfemThermic/xml/Main.spd b/kratos.gid/apps/PfemThermic/xml/Main.spd index 71b58bcf5..714e8a41c 100644 --- a/kratos.gid/apps/PfemThermic/xml/Main.spd +++ b/kratos.gid/apps/PfemThermic/xml/Main.spd @@ -8,9 +8,9 @@ - + - + From c715a684f1b1c4b23b3de77953ffc36cd495b72c Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 4 Nov 2020 09:17:12 +0100 Subject: [PATCH 068/556] Fix on material tables --- kratos.gid/apps/PfemThermic/write/write.tcl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index c307f0c03..dd7c5a56c 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -119,8 +119,7 @@ proc PfemThermic::write::GetTable { prop fileName } { set data [split $file_data "\n"] foreach line $data { if {[scan $line %f%f a b] == 2} { - lappend points $a - lappend points $b + lappend points [list $a $b] } } dict set table data $points From bd29a7fac6e5f7f395e5ab663f4427c0439fd7eb Mon Sep 17 00:00:00 2001 From: AFranci Date: Wed, 4 Nov 2020 09:26:52 +0100 Subject: [PATCH 069/556] Fixing icon in solver settings. Icon settings is too big --- kratos.gid/apps/PfemFluid/xml/SolutionStrategy.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemFluid/xml/SolutionStrategy.spd b/kratos.gid/apps/PfemFluid/xml/SolutionStrategy.spd index 999d733d5..dbe5c1dab 100644 --- a/kratos.gid/apps/PfemFluid/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/PfemFluid/xml/SolutionStrategy.spd @@ -1,5 +1,5 @@ - + From f48844860cdb1789587c94a511c8f20f1bf4a1f8 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 6 Nov 2020 22:51:10 +0100 Subject: [PATCH 070/556] Printing list of constitutive laws in project parameters --- .../PfemFluid/write/writeProjectParameters.tcl | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index 5fc41d754..756b2f870 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -121,7 +121,8 @@ proc PfemFluid::write::GetPFEM_SolverSettingsDict { } { # Solution strategy parameters and Solvers set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict PFEMFLUID_SolStrat PFEMFLUID_Scheme PFEMFLUID_StratParams] ] set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict PfemFluid] ] - + + # Body parts list set bodies_parts_list [list ] foreach body $bodies_list { set body_parts [dict get $body parts_list] @@ -129,9 +130,20 @@ proc PfemFluid::write::GetPFEM_SolverSettingsDict { } { lappend bodies_parts_list $part } } - + + # Constitutive laws + set constitutive_list [list] + foreach parts_un [PfemFluid::write::GetPartsUN] { + set parts_path [spdAux::getRoute $parts_un] + set xp1 "$parts_path/group/value\[@n='ConstitutiveLaw'\]" + foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + lappend constitutive_list [get_domnode_attribute $gNode v] + } + } + dict set solverSettingsDict bodies_list $bodies_list dict set solverSettingsDict problem_domain_sub_model_part_list $bodies_parts_list + dict set solverSettingsDict constitutive_laws_list $constitutive_list dict set solverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames "PFEMFLUID_NodalConditions" "PFEMFLUID_Loads"] set materialsDict [dict create] From 8d9a0bc681ced3a4a297cdbd742950e7b160288b Mon Sep 17 00:00:00 2001 From: rlrangel Date: Tue, 10 Nov 2020 19:06:44 +0100 Subject: [PATCH 071/556] Adjustments --- .../apps/PfemThermic/examples/ThermicSloshing.tcl | 14 ++++++++------ .../PfemThermic/write/writeProjectParameters.tcl | 2 +- .../apps/PfemThermic/xml/NodalConditions.spd | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index ca313a902..c78856f8c 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -24,11 +24,11 @@ proc PfemThermic::examples::DrawThermicSloshingGeometry2D {args} { GiD_Layers edit to_use $layer ## Points ## - set points_inner [list 0 0 0 3.0 0 0 3.0 0.3 0 0 0.5 0] + set points_inner [list 0 0 0 1.0 0 0 1.0 0.3 0 0 0.7 0] foreach {x y z} $points_inner { GiD_Geometry create point append $layer $x $y $z } - set points_outer [list 0 1.0 0 3.0 1.0 0] + set points_outer [list 0 1.0 0 1.0 1.0 0] foreach {x y z} $points_outer { GiD_Geometry create point append $layer $x $y $z } @@ -80,7 +80,7 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] - set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 100.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.001 BULK_MODULUS 2100000000.0] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 2000.0 SPECIFIC_HEAT 4000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] spdAux::SetValuesOnBaseNode $fluidNode $props # Rigid body @@ -107,7 +107,7 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalT"] $fixTemperatureNode setAttribute ov line - set props [list value 263.15 Interval Total] + set props [list value 338.15 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC @@ -118,11 +118,11 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] $thermalICnode setAttribute ov surface - set props [list value 283.15 Interval Initial] + set props [list value 293.15 Interval Initial constrained 0] spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters - set time_parameters [list StartTime 0.0 EndTime 0.04 DeltaTime 0.001 UseAutomaticDeltaTime No] + set time_parameters [list StartTime 0.0 EndTime 10 DeltaTime 0.005 UseAutomaticDeltaTime No] set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] spdAux::SetValuesOnBasePath $time_params_path $time_parameters @@ -131,6 +131,8 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { set xpath [spdAux::getRoute "Parallelization"] spdAux::SetValuesOnBasePath $xpath $parameters + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index c9217fe8d..44eeeadc5 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -44,7 +44,7 @@ proc PfemThermic::write::GetThermicSolverSettingsDict { } { set thermicSolverSettingsDict [dict create] # General data - dict set thermicSolverSettingsDict solver_type [write::getValue CNVDFFSolStrat] + dict set thermicSolverSettingsDict solver_type "transient" dict set thermicSolverSettingsDict analysis_type [write::getValue CNVDFFAnalysisType] dict set thermicSolverSettingsDict time_integration_method "implicit" dict set thermicSolverSettingsDict model_part_name [ConvectionDiffusion::write::GetAttribute model_part_name] diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd index 3af787984..477b983d5 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -1,4 +1,4 @@ - + \ No newline at end of file From 1f6968c4047478e38b7109984242e7a8d22e5da1 Mon Sep 17 00:00:00 2001 From: Miguel Date: Wed, 11 Nov 2020 17:10:16 +0100 Subject: [PATCH 072/556] initial commit --- kratos.gid/apps/ShallowWater/images/logo.png | Bin 0 -> 2020 bytes .../ShallowWater/python/shallow_water_main.py | 13 ++++ kratos.gid/apps/ShallowWater/start.tcl | 57 ++++++++++++++++++ kratos.gid/apps/ShallowWater/xml/Main.spd | 9 +++ kratos.gid/apps/ShallowWater/xml/Procs.spd | 38 ++++++++++++ .../apps/ShallowWater/xml/Strategies.xml | 40 ++++++++++++ .../apps/ShallowWater/xml/XmlController.tcl | 38 ++++++++++++ kratos.gid/kratos_default.spd | 1 + 8 files changed, 196 insertions(+) create mode 100644 kratos.gid/apps/ShallowWater/images/logo.png create mode 100644 kratos.gid/apps/ShallowWater/python/shallow_water_main.py create mode 100644 kratos.gid/apps/ShallowWater/start.tcl create mode 100644 kratos.gid/apps/ShallowWater/xml/Main.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Procs.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Strategies.xml create mode 100644 kratos.gid/apps/ShallowWater/xml/XmlController.tcl diff --git a/kratos.gid/apps/ShallowWater/images/logo.png b/kratos.gid/apps/ShallowWater/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b44d924e7c99d3e4bea36d91cd15a59cca8bcaf7 GIT binary patch literal 2020 zcmVTAA2<)xv>5;Z2XRS6 zK~#9!?VV|iU1J!>f9IIDZ4^Zp`w~lwqLjp*ybiH`s8Y2xv6WaWh=c@@h2qOTDR>|)*0eyi!KtEuA;2_`tU^ie8u!DPz2W$ZT0oDMkf#twYK&$&+ z1grzpy)0ds(6pw(!#h!WwIC>qWL z#sVXOJ%J$^{~POo6)u841g06SRuvsFUXc+Igwa6Yc3?a(xWEtQ7WX_8c-Uz5X{G4x zF@~f}*a%Upf7cgGs;lEYBc6;V3N`5=RBgu%PA^O z0G@G?(T8n|Ex;<^8Kc#MS=SgZVosia09R%!W`gyqt&AB7J9!sk>Q@3fO~qQtMEh>r%wux(sWDl-QH8-THq9; z)!bTZ$oarAqFZJR0Im(f$WNy&ufmbl_P}evXwfZGRs$y+ty-%_h|6h*0%wa}nKKx; zAi2b7XGr3k7t3L8Zrl-skxCYKKN%fv(Q=dMlpDJM*CqqPPesSo5*_(RN%9alUDUq^ z4ik-X=Xj&lS3wxHt06;OK^OApsyIrL$H5ngE`@QdJ8y`esPLyFXLO5V@3>UNMSXu@ z57DJChG6$q{#QeWiXnwFG6*A;G-LT1gqD3ia@v+^W z7mF69U``w%&7wu&tOb7ejaD15?YD(uX$CgLEA>U#*4sjHd<(S2hAaeDiYCPxVzi2U z0Hf6cV5w+Q7^{K#K)ai*XYqeidLdty#|Ku)o2}mwT?%8i(dy53`$LRY^MHAxO(DD< zf05qO_LOLoJ1gUPB}Oaaq8|V7RiI5Y%9V$cLD6now9#rK@VID{8*RYkWKgu*7VUV; zE#rmkdERKXu43bWMA)y2CcHMytQEQxIga*ce^|KIo|BcvVB8;bsxK1EWuAt_@fVkff+)tL`mV67r!gNp{OVO~Gn?MVbl?V~)tY*T z-Zy%DcK}QScJC!dYy_SL?s8ujJHER@u{Xd8zz4wQUT|1@h0*Gc`21A8W;D!@RHQ7% zj=C5R{MMdw*bEbFB+}xNt~@{s1cbPlK#hoFzSmP8+RFS@-|||LhLNt$wsRsjZROw z8&V}&24Ux0O#sd*sS&MiZ575w(nReH>1@|qt&^%lg66u1od7?@(TT9I{)D5W8tn6)dm zkMJ;HB(}-(p}?MX{^`iA9p+$n9nS}vjaENaORq)XmB@&#gm7)p`?$yUz<$^+st03- z2MlnJ{!Z}C?s=7atN<2Zw~PJZe%40n_RS(ABF(?BfyBpe?#HzN0000 + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Procs.spd b/kratos.gid/apps/ShallowWater/xml/Procs.spd new file mode 100644 index 000000000..e4acdfbeb --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Procs.spd @@ -0,0 +1,38 @@ + + + + + + + 1} { + foreach group [lrange $childs 1 end] {$group delete} + gid_groups_conds::actualize_conditions_window + error "You can only set one part" + } + ]]> + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml new file mode 100644 index 000000000..356202962 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl new file mode 100644 index 000000000..fd41f3513 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -0,0 +1,38 @@ +namespace eval ShallowWater::xml { + # Namespace variables declaration + variable dir + variable lastImportMeshSize + variable export_dir +} + +proc ShallowWater::xml::Init { } { + # Namespace variables inicialization + variable dir + Model::DestroyEverything + Model::InitVariables dir $ShallowWater::dir + + Model::getSolutionStrategies Strategies.xml + Model::getElements "../../Common/xml/Elements.xml" + Model::getConditions "../../Common/xml/Conditions.xml" + Model::getProcesses "../../Common/xml/Processes.xml" +# Model::getProcesses Processes.xml + Model::getSolvers "../../Common/xml/Solvers.xml" +} + +proc ShallowWater::xml::MultiAppEvent {args} { + if {$args eq "init"} { + spdAux::parseRoutes + spdAux::ConvertAllUniqueNames FL ${::ShallowWater::prefix} + } +} + +proc ShallowWater::xml::getUniqueName {name} { + return ${::ShallowWater::prefix}${name} +} + +proc ShallowWater::xml::CustomTree { args } { + spdAux::SetValueOnTreeItem state hidden SWGravity + spdAux::SetValueOnTreeItem state hidden SWTimeParameters +} + +ShallowWater::xml::Init diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index f38717205..683108721 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -30,6 +30,7 @@ + From c4be41d41667fbd64d2a27b6cf35ebe3a805a5ff Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 11 Nov 2020 17:29:52 +0100 Subject: [PATCH 073/556] Getting the active elements where parts are not conditions but contain them --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 0ac940bb2..50eaeaf00 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -662,8 +662,9 @@ proc spdAux::CheckConstLawOutputState {outnode} { set parts_un [apps::getAppUniqueName $nodeApp Parts] set parts_path [getRoute $parts_un] set xp1 "$parts_path/group/value\[@n='ConstitutiveLaw'\]" + set xp2 "$parts_path/condition/group/value\[@n='Element'\]" set constlawactive [list ] - foreach gNode [$root selectNodes $xp1] { + foreach gNode [concat [$root selectNodes $xp1] [$root selectNodes $xp2]] { lappend constlawactive [get_domnode_attribute $gNode v] } @@ -682,7 +683,8 @@ proc spdAux::CheckElementOutputState {outnode {parts_uns ""}} { foreach parts_un $parts_uns { set parts_path [getRoute $parts_un] set xp1 "$parts_path/group/value\[@n='Element'\]" - foreach gNode [$root selectNodes $xp1] { + set xp2 "$parts_path/condition/group/value\[@n='Element'\]" + foreach gNode [concat [$root selectNodes $xp1] [$root selectNodes $xp2]] { lappend elemsactive [get_domnode_attribute $gNode v] } } @@ -699,7 +701,8 @@ proc spdAux::CheckAnyPartState {domNode {parts_uns ""}} { foreach parts_un $parts_uns { set parts_path [spdAux::getRoute $parts_un] if {$parts_path ne ""} { - lappend parts {*}[$domNode selectNodes "$parts_path/group"] + set parts_base [[customlib::GetBaseRoot] selectNodes $parts_path] + lappend parts {*}[$parts_base getElementsByTagName group] } } if {[llength $parts] > 0} {return true} {return false} From 638b71576e00b6942188f485f68c2b0fb03cef5f Mon Sep 17 00:00:00 2001 From: Miguel Date: Wed, 11 Nov 2020 23:43:06 +0100 Subject: [PATCH 074/556] buildig tree structure 1 --- .../ShallowWater/xml/BoundaryConditions.spd | 4 +++ .../apps/ShallowWater/xml/Conditions.xml | 31 +++++++++++++++++++ .../ShallowWater/xml/InitialConditions.spd | 4 +++ kratos.gid/apps/ShallowWater/xml/Main.spd | 6 ++-- .../apps/ShallowWater/xml/NodalConditions.xml | 9 ++++++ kratos.gid/apps/ShallowWater/xml/Parts.spd | 3 ++ .../apps/ShallowWater/xml/Processes.xml | 20 ++++++++++++ .../apps/ShallowWater/xml/XmlController.tcl | 5 +-- 8 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Conditions.xml create mode 100644 kratos.gid/apps/ShallowWater/xml/InitialConditions.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/NodalConditions.xml create mode 100644 kratos.gid/apps/ShallowWater/xml/Parts.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Processes.xml diff --git a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd new file mode 100644 index 000000000..42871d8f1 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd @@ -0,0 +1,4 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml new file mode 100644 index 000000000..8bb573fad --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd new file mode 100644 index 000000000..fad55467b --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -0,0 +1,4 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 607ca6f22..75366c5b2 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,8 +1,8 @@ - - - + + + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml new file mode 100644 index 000000000..11b85f250 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Parts.spd b/kratos.gid/apps/ShallowWater/xml/Parts.spd new file mode 100644 index 000000000..08e6f3379 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Parts.spd @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml new file mode 100644 index 000000000..89b53de4c --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index fd41f3513..b203d186e 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -13,9 +13,10 @@ proc ShallowWater::xml::Init { } { Model::getSolutionStrategies Strategies.xml Model::getElements "../../Common/xml/Elements.xml" - Model::getConditions "../../Common/xml/Conditions.xml" + Model::getConditions Conditions.xml + Model::getNodalConditions NodalConditions.xml Model::getProcesses "../../Common/xml/Processes.xml" -# Model::getProcesses Processes.xml + Model::getProcesses Processes.xml Model::getSolvers "../../Common/xml/Solvers.xml" } From 6f7a7176d5f41efd4a610f60ed02cb06848d2af4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 12 Nov 2020 00:49:47 +0100 Subject: [PATCH 075/556] add icons on materials --- kratos.gid/apps/Fluid/images/drop.png | Bin 0 -> 491 bytes kratos.gid/apps/Fluid/images/gas.png | Bin 0 -> 561 bytes kratos.gid/apps/Fluid/xml/Materials.xml | 8 ++++---- kratos.gid/scripts/Controllers/TreeInjections.tcl | 4 +++- 4 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 kratos.gid/apps/Fluid/images/drop.png create mode 100644 kratos.gid/apps/Fluid/images/gas.png diff --git a/kratos.gid/apps/Fluid/images/drop.png b/kratos.gid/apps/Fluid/images/drop.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9ebee00c368993c57694e1830f187936605c7c GIT binary patch literal 491 zcmVIs@Jbn+C8b*8uNClSWGXf2Gy0&8?Sq5k~?mof5#Kds5*4ct&1Nd~E z^p(>loo56pxjQG{@Z-fj7fCWeId|S-0WF&tMn*=457&<^xic|7mS_X`bR2Y)QYKtr z;oxQl@&Ek%_V?c0B7;wt_Ff@q024bmqiW%zeLV8I4j|iM;Pa!a2X6PpIQ{$aW0HZ~ps3-Gj z#{1xnMpglFPU(=U37j$-NkA?ORQS*Lr#I(4UDH*fa;qt26XjxH9mvvN7EG z^o}8V-v)-eUp^o!nGG`F4v?V?6JcXwX6OfMQsEP1&=L?~;ACNitKR?MHbcnnH4KcL z>@cCbAOn5_87wdnZ&?+Fh4y|}J^kYIM+S`vjSNhpLJUkiTp*!8CViZZNl3}let z;=yXbk3YW|{1#7VIQ8TK1CtOx12Db(LGePfu{}ekrZL{2pLXIPL)Gq$U^XK!_g$1g zv=x_SSm6}Nz|PEqRr9yszZim-&SW_L_&!W%4x>O%r7^R(2s|43nOGS3KYeHT|K~4; z0dK#3Vfgg(2O=83elx?GkpBPu$MEmEE~SVAnAG1E)g}vEcWe2RYvstw&@g zWB?5ll - + - + - + - + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 50eaeaf00..4f8aa9e61 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -524,8 +524,10 @@ proc spdAux::injectMaterials { basenode args } { foreach mat $materials { set matname [$mat getName] set mathelp [$mat getAttribute help] + set icon [$mat getAttribute icon] + if {$icon eq ""} {set icon material16} set inputs [$mat getInputs] - set matnode "" + set matnode "" foreach {inName in} $inputs { set node [spdAux::GetParameterValueString $in [list base $mat state [$in getAttribute state]] $mat] append matnode $node From 352cbaed65ad98ceb5ea32cc5f494e7c3074231a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 12 Nov 2020 00:50:48 +0100 Subject: [PATCH 076/556] New material select window, tested in Fluid --- kratos.gid/apps/Fluid/xml/Parts.spd | 26 +++---- kratos.gid/kratos_default.spd | 24 ++++++- .../scripts/Controllers/CommonProcs.tcl | 72 +++++++++++++++++++ 3 files changed, 104 insertions(+), 18 deletions(-) diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index f9de1d27a..b4f50cb65 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -1,17 +1,13 @@ - - - - - - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index f38717205..60efcd0d3 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -18,12 +18,12 @@ - + - - + + @@ -312,6 +312,24 @@ return [spdAux::ProcGetFilesValues] ]]> + + + + + + + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 621d98fb0..9953fd4a4 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -753,6 +753,78 @@ proc spdAux::ProcCambioMat {domNode args} { RequestRefresh } +proc spdAux::GetMaterialsList { domNode args } { + set x_path {//container[@n="materials"]} + set dom_materials [$domNode selectNodes $x_path] + if { $dom_materials == "" } { + error [= "xpath '%s' not found in the spd file" $x_path] + } + set image material + set result [list] + foreach dom_material [$dom_materials childNodes] { + set name [$dom_material @name] + # lappend result [list 0 $name $name $image 1] + lappend result $name + } + return [join $result ,] +} + +proc spdAux::EditDatabaseList { domNode dict dict_units boundary_conds args } { + set part [$domNode parent] + set has_container "" + set database materials + set title [= "Material database"] + set list_name [$domNode @n] + set x_path {//container[@n="materials"]} + set dom_materials [$domNode selectNodes $x_path] + if { $dom_materials == "" } { + error [= "xpath '%s' not found in the spd file" $x_path] + } + set primary_level material + if { [dict exists $dict $list_name] } { + set xps $x_path + append xps [format_xpath {/blockdata[@n=%s and @name=%s]} $primary_level [dict get $dict $list_name]] + } else { + set xps "" + } + # Launches the window and gets the selected material in domNodes + set domNodes [gid_groups_conds::edit_tree_parts_window -accepted_n $primary_level -select_only_one 1 $boundary_conds $title $x_path $xps] + + set ret_dict [dict create] + set ret_dict_units [dict create] + if {$domNodes ne ""} { + foreach k [dict keys $dict] { + set Selected_$k [dict get $dict $k] + set has_unit [dict exists $dict_units $k] + if {$has_unit} {set Selected_unit_$k [dict get $dict_units $k]} + + if { [llength $domNodes] } { + set domNode [lindex $domNodes 0] + if { [$domNode @n] == $primary_level } { + dict set ret_dict $list_name [$domNode @name] + } + set Selected_$k [$domNode selectNodes "value\[@n='$k'\]/@v"] + if {$has_unit} {set Selected_unit_$k [$domNode selectNodes "value\[@n='$k'\]/@units"]} + } + + set name Selected_$k + if {$has_unit} {set name_unit Selected_unit_$k} + + set node [$part selectNodes "value\[@n='$k'\]"] + if {$node ne "" && [set $name] ne ""} { + + #dict set ret_dict $k [set $name] + #if {$has_unit} {dict set ret_dict_units $k [set $name_unit]} + gid_groups_conds::setAttributes [gid_groups_conds::nice_xpath $node] {*}[set $name] + if {$has_unit} {gid_groups_conds::setAttributes [gid_groups_conds::nice_xpath $node] {*}[set $name_unit] } + dict set ret_dict $k [dict get [lindex [set $name] 0] v] + if {$has_unit} {dict set ret_dict_units $k [dict get [lindex [set $name_unit] 0] units]} + } + } + } + return [list $ret_dict $ret_dict_units] +} + proc spdAux::ProcOkNewCondition {domNode args} { set cnd_id [$domNode @n] set condition [Model::getCondition $cnd_id] From 896f08d548b0c6013c299222f8a6dc06edc5cae4 Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 12 Nov 2020 13:09:19 +0100 Subject: [PATCH 077/556] adding conditions 2 --- kratos.gid/apps/ShallowWater/start.tcl | 2 +- .../ShallowWater/xml/BoundaryConditions.spd | 4 +-- .../apps/ShallowWater/xml/Conditions.xml | 28 ++++++++++++++++--- .../ShallowWater/xml/InitialConditions.spd | 4 +-- kratos.gid/apps/ShallowWater/xml/Main.spd | 1 + .../apps/ShallowWater/xml/NodalConditions.xml | 7 ++--- .../apps/ShallowWater/xml/Processes.xml | 16 ++++++++++- .../apps/ShallowWater/xml/TopographicData.spd | 4 +++ .../apps/ShallowWater/xml/XmlController.tcl | 16 +++++------ 9 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/xml/TopographicData.spd diff --git a/kratos.gid/apps/ShallowWater/start.tcl b/kratos.gid/apps/ShallowWater/start.tcl index f6d82adc7..339214021 100644 --- a/kratos.gid/apps/ShallowWater/start.tcl +++ b/kratos.gid/apps/ShallowWater/start.tcl @@ -16,7 +16,7 @@ proc ::ShallowWater::Init { } { set app_id "ShallowWater" set kratos_name "ShallowWaterApplication" - apps::LoadAppById "Fluid" +# apps::LoadAppById "Fluid" set dir [apps::getMyDir "ShallowWater"] set attributes [dict create] diff --git a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd index 42871d8f1..da4d960c1 100644 --- a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd @@ -1,4 +1,4 @@ - - + + diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 8bb573fad..3218a09ec 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -1,7 +1,6 @@ - - + @@ -10,7 +9,7 @@ - + @@ -19,7 +18,7 @@ - + @@ -28,4 +27,25 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd index fad55467b..24fc0e016 100644 --- a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -1,4 +1,4 @@ - - + + diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 75366c5b2..0fb332fbd 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,6 +1,7 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 11b85f250..348789ca1 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -1,9 +1,8 @@ - - - + + + - diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index 89b53de4c..39fc835a1 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -10,11 +10,25 @@ - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd new file mode 100644 index 000000000..11fd1ce9b --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd @@ -0,0 +1,4 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index b203d186e..c28a5c666 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -20,20 +20,20 @@ proc ShallowWater::xml::Init { } { Model::getSolvers "../../Common/xml/Solvers.xml" } -proc ShallowWater::xml::MultiAppEvent {args} { - if {$args eq "init"} { - spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL ${::ShallowWater::prefix} - } -} +# proc ShallowWater::xml::MultiAppEvent {args} { +# if {$args eq "init"} { +# spdAux::parseRoutes +# spdAux::ConvertAllUniqueNames FL ${::ShallowWater::prefix} +# } +# } proc ShallowWater::xml::getUniqueName {name} { return ${::ShallowWater::prefix}${name} } proc ShallowWater::xml::CustomTree { args } { - spdAux::SetValueOnTreeItem state hidden SWGravity - spdAux::SetValueOnTreeItem state hidden SWTimeParameters + spdAux::SetValueOnTreeItem state normal FLGravity + spdAux::SetValueOnTreeItem state normal FLTimeParameters } ShallowWater::xml::Init From b4046a1081de0aa3160ab90dbc2f48df809cabfe Mon Sep 17 00:00:00 2001 From: Miguel Date: Fri, 13 Nov 2020 09:03:36 +0100 Subject: [PATCH 078/556] adding conditions 3 --- .../ShallowWater/images/gravity_vector.png | Bin 0 -> 445 bytes .../apps/ShallowWater/images/topography.png | Bin 0 -> 667 bytes kratos.gid/apps/ShallowWater/xml/Main.spd | 4 ++-- .../ShallowWater/xml/SolutionStrategy.spd | 20 ++++++++++++++++++ .../apps/ShallowWater/xml/Strategies.xml | 10 ++++----- .../apps/ShallowWater/xml/TopographicData.spd | 2 +- .../apps/ShallowWater/xml/XmlController.tcl | 8 +++---- 7 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/images/gravity_vector.png create mode 100644 kratos.gid/apps/ShallowWater/images/topography.png create mode 100644 kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd diff --git a/kratos.gid/apps/ShallowWater/images/gravity_vector.png b/kratos.gid/apps/ShallowWater/images/gravity_vector.png new file mode 100644 index 0000000000000000000000000000000000000000..9a582f9ae4f08f983f12c37ca71b95ada0e02e93 GIT binary patch literal 445 zcmV;u0Yd(XP)Xj~~DOU%UF?|B3x;{y%yA>i>!3*T5Jg4gw&y zvV7$Kvf}A*7qGw#x_<2;Lv%zl-1G(Ww!_&=SJX0?TWG>9ee&cDoXrGdl$Fc?YvAMK zVn|5x1k&6@c?oR5(xFaR=O nJt?^lId8xW2%sc80|XcV!t$A>pv(CQ00000NkvXXu0mjfd404Y literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ShallowWater/images/topography.png b/kratos.gid/apps/ShallowWater/images/topography.png new file mode 100644 index 0000000000000000000000000000000000000000..d851fc854818f83a030c2b779c0dacb474396df5 GIT binary patch literal 667 zcmV;M0%ZM(P)H+Tn000McNliruWI1~&ankU#(c0w_sD zK~y-)jgw1HQ&AL!zkTkhErqmAi5f+*jrS^v2{?3$Gk*gn#Kbr^!C#?&!33j2g9GEh z35`1QK|oQYw}J>HgojipvCwj#LzoTmpo(|oZJ(_R+B98(ga0kx|*xaz1Q@f((q9c1dpH6;VoC}})Q=n1_ zr-0#BWN8lSRlJ-sqlTDn&UYqhs0@W+dAd!Y>D=EUCr-fY7eociO6;+zN<+Kp%cgOv zh{%<4IQtmDR4QT6<_u8&1gp!$Juu-CSUei8gWj&>Vd-LSewmrRY=DtAvhiU28BxK* zI{4@;pjc5RH+G0ssmG4_TAep*J0ljj-Xe>@yAtf~67>kHYG?o!A#Emjxjex0#a{?u z%?>H~IcR|khxP(*OT?!H1gdJ9T^162BWKE}u|PzGkU%%v)d_@KJ?g zAH08sx0Hlka9MC7bT$;JgKR@$D+U)sDhavnl7wM70LrZ - + @@ -7,4 +7,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd new file mode 100644 index 000000000..cef45a9b0 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 356202962..8427dc42c 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -1,13 +1,12 @@ - @@ -27,8 +26,9 @@ - + + diff --git a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd index 11fd1ce9b..199784b26 100644 --- a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd +++ b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index c28a5c666..38ad944fe 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -31,9 +31,9 @@ proc ShallowWater::xml::getUniqueName {name} { return ${::ShallowWater::prefix}${name} } -proc ShallowWater::xml::CustomTree { args } { - spdAux::SetValueOnTreeItem state normal FLGravity - spdAux::SetValueOnTreeItem state normal FLTimeParameters -} +# proc ShallowWater::xml::CustomTree { args } { + # spdAux::SetValueOnTreeItem state normal FLGravity + # spdAux::SetValueOnTreeItem state normal FLTimeParameters +# } ShallowWater::xml::Init From 867cc5447a44523c91eb430ae2e2daa5c346ab1a Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 13 Nov 2020 12:19:02 +0100 Subject: [PATCH 079/556] Advances in thermic Pfem --- .../examples/ThermicConvection.tcl | 151 +++++++---- .../PfemThermic/examples/ThermicCubeDrop.tcl | 202 ++++++++++++++ .../examples/ThermicDamBreakFSI.tcl | 203 ++++++++++++++ .../PfemThermic/examples/ThermicFluidDrop.tcl | 172 ++++++++++++ .../PfemThermic/examples/ThermicSloshing.tcl | 28 +- .../examples/ThermicSloshingConvection.tcl | 252 ++++++++++++++++++ .../apps/PfemThermic/examples/examples.tcl | 12 +- .../tables/ThermicConvection_DENSITY.txt | 3 + .../ThermicSloshingConvection_DENSITY.txt | 3 + .../PfemThermic/examples/temp_vs_dens.txt | 2 - .../PfemThermic/images/exampleConvection.png | Bin 1526 -> 0 bytes .../PfemThermic/images/exampleSloshing.png | Bin 1538 -> 0 bytes kratos.gid/apps/PfemThermic/start.tcl | 8 +- kratos.gid/apps/PfemThermic/write/write.tcl | 10 +- .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 26 +- 15 files changed, 996 insertions(+), 76 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl create mode 100644 kratos.gid/apps/PfemThermic/examples/tables/ThermicConvection_DENSITY.txt create mode 100644 kratos.gid/apps/PfemThermic/examples/tables/ThermicSloshingConvection_DENSITY.txt delete mode 100644 kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt delete mode 100644 kratos.gid/apps/PfemThermic/images/exampleConvection.png delete mode 100644 kratos.gid/apps/PfemThermic/images/exampleSloshing.png diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index e78d0b0cc..0c3b58e35 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -48,18 +48,22 @@ proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 - - GiD_Groups create Rigid_Walls - GiD_Groups edit color Rigid_Walls "#3b3b3bff" - GiD_EntitiesGroups assign Rigid_Walls lines {1 2 3 4} - GiD_Groups create Heat_Walls - GiD_Groups edit color Heat_Walls "#e0210fff" - GiD_EntitiesGroups assign Heat_Walls lines {1} + GiD_Groups create Bottom_Wall + GiD_Groups edit color Bottom_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Bottom_Wall lines {1} + + GiD_Groups create Right_Wall + GiD_Groups edit color Right_Wall "#42eb71ff" + GiD_EntitiesGroups assign Right_Wall lines {2} + + GiD_Groups create Top_Wall + GiD_Groups edit color Top_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Top_Wall lines {3} - GiD_Groups create Cold_Walls - GiD_Groups edit color Cold_Walls "#42eb71ff" - GiD_EntitiesGroups assign Cold_Walls lines {3} + GiD_Groups create Left_Wall + GiD_Groups edit color Left_Wall "#e0210fff" + GiD_EntitiesGroups assign Left_Wall lines {4} } proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry3D {args} { @@ -74,68 +78,106 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { # Create bodies set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name Body2} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name Body3} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name BottomWallBody} gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name Body4} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name RightWallBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[5\]" {name TopWallBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[6\]" {name LeftWallBody} + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} # Fluid body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} - set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] - set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 1000.0 SPECIFIC_HEAT 10.0 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 2100000000.0] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 2000.0 SPECIFIC_HEAT 4000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] spdAux::SetValuesOnBaseNode $fluidNode $props + # Add table + set filePath [file join [file join [apps::getMyDir "PfemThermic"] examples] tables] + set fileName ThermicConvection_DENSITY.txt + set fullName [file join $filePath $fileName] + spdAux::UpdateFileField $fullName [$fluidNode selectNodes "./value\[@n = 'TEMPERATURE_vs_DENSITY'\]"] - # Rigid body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='BodyType'\]" {v Rigid} - set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/condition\[@n='Parts'\]" - set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] + # Rigid bodies + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Bottom_Wall] $rigidNode setAttribute ov line - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} - - # Heat body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/value\[@n='BodyType'\]" {v Rigid} - set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/condition\[@n='Parts'\]" - set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Heat_Walls] + + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Right_Wall] + $rigidNode setAttribute ov line + + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Top_Wall] $rigidNode setAttribute ov line - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body3'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} - # Cold body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/value\[@n='BodyType'\]" {v Rigid} - set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/condition\[@n='Parts'\]" - set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Cold_Walls] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Left_Wall] $rigidNode setAttribute ov line - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body4'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} # Velocity BC - GiD_Groups clone Rigid_Walls Total - GiD_Groups edit parent Total Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//Total" - GiD_Groups edit state "Rigid_Walls//Total" hidden + GiD_Groups clone Bottom_Wall TotalVB + GiD_Groups edit parent TotalVB Bottom_Wall + spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalVB" + GiD_Groups edit state "Bottom_Wall//TotalVB" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall//TotalVB"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Right_Wall TotalVR + GiD_Groups edit parent TotalVR Right_Wall + spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalVR" + GiD_Groups edit state "Right_Wall//TotalVR" hidden set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//Total"] + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall//TotalVR"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Top_Wall TotalVT + GiD_Groups edit parent TotalVT Top_Wall + spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalVT" + GiD_Groups edit state "Top_Wall//TotalVT" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall//TotalVT"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Left_Wall TotalVL + GiD_Groups edit parent TotalVL Left_Wall + spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalVL" + GiD_Groups edit state "Left_Wall//TotalVL" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall//TotalVL"] $fixVelocityNode setAttribute ov line # Temperature BC - GiD_Groups clone Heat_Walls TotalH - GiD_Groups edit parent TotalH Heat_Walls - spdAux::AddIntervalGroup Heat_Walls "Heat_Walls//TotalH" - GiD_Groups edit state "Heat_Walls//TotalH" hidden + GiD_Groups clone Right_Wall TotalTR + GiD_Groups edit parent TotalTR Right_Wall + spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalTR" + GiD_Groups edit state "Right_Wall//TotalTR" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Heat_Walls//TotalH"] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall//TotalTR"] $fixTemperatureNode setAttribute ov line - set props [list value 373.65 Interval Total constrained 1] + set props [list value 372.65 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props - GiD_Groups clone Cold_Walls TotalC - GiD_Groups edit parent TotalC Cold_Walls - spdAux::AddIntervalGroup Cold_Walls "Cold_Walls//TotalC" - GiD_Groups edit state "Cold_Walls//TotalC" hidden + GiD_Groups clone Left_Wall TotalTL + GiD_Groups edit parent TotalTL Left_Wall + spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalTL" + GiD_Groups edit state "Left_Wall//TotalTL" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Cold_Walls//TotalC"] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall//TotalTL"] $fixTemperatureNode setAttribute ov line - set props [list value 372.65 Interval Total constrained 1] + set props [list value 373.65 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC @@ -146,11 +188,11 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] $thermalICnode setAttribute ov surface - set props [list value 373.15 Interval Initial] + set props [list value 373.15 Interval Initial constrained 0] spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters - set time_parameters [list StartTime 0.0 EndTime 120.00 DeltaTime 0.005 UseAutomaticDeltaTime No] + set time_parameters [list StartTime 0.0 EndTime 10.0 DeltaTime 0.005 UseAutomaticDeltaTime No] set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] spdAux::SetValuesOnBasePath $time_params_path $time_parameters @@ -159,6 +201,13 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { set xpath [spdAux::getRoute "Parallelization"] spdAux::SetValuesOnBasePath $xpath $parameters + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.1] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl new file mode 100644 index 000000000..2ce9e9884 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -0,0 +1,202 @@ +proc ::PfemThermic::examples::ThermicCubeDrop {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + + Kratos::ResetModel + DrawThermicCubeDropGeometry$::Model::SpatialDimension + AssignGroupsThermicCubeDropGeometry$::Model::SpatialDimension + TreeAssignationThermicCubeDrop$::Model::SpatialDimension + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +# Draw Geometry +proc PfemThermic::examples::DrawThermicCubeDropGeometry2D {args} { + ## Layer ## + set layer PfemThermic + GiD_Layers create $layer + GiD_Layers edit to_use $layer + + ## Points ## + set points_fluid [list 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.5 0.0 0.0 0.5 0.0] + foreach {x y z} $points_fluid { + GiD_Geometry create point append $layer $x $y $z + } + set points_solid [list 0.35 0.7 0.0 0.65 0.7 0.0 0.65 1.0 0.0 0.35 1.0 0.0] + foreach {x y z} $points_solid { + GiD_Geometry create point append $layer $x $y $z + } + set points_rigid [list 0.0 1.2 0.0 1.0 1.2 0.0 ] + foreach {x y z} $points_rigid { + GiD_Geometry create point append $layer $x $y $z + } + + ## Lines ## + set lines_fluid [list 1 2 2 3 3 4 4 1] + foreach {p1 p2} $lines_fluid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_solid [list 5 6 6 7 7 8 8 5] + foreach {p1 p2} $lines_solid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_rigid [list 4 9 9 10 10 3] + foreach {p1 p2} $lines_rigid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape + GiD_Process Mescape Geometry Create NurbsSurface 5 6 7 8 escape escape +} + +proc PfemThermic::examples::DrawThermicCubeDropGeometry3D {args} { + # To be implemented +} + +# Group assign +proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry2D {args} { + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create Solid + GiD_Groups edit color Solid "#3b3b3bff" + GiD_EntitiesGroups assign Solid surfaces 2 + + GiD_Groups create Interface + GiD_Groups edit color Interface "#e0210fff" + GiD_EntitiesGroups assign Interface lines {5 6 7 8} + + GiD_Groups create Rigid_Walls + GiD_Groups edit color Rigid_Walls "#42eb71ff" + GiD_EntitiesGroups assign Rigid_Walls lines {1 2 4 9 10 11} +} +proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry3D {args} { + # To be implemented +} + +# Tree assign +proc PfemThermic::examples::TreeAssignationThermicCubeDrop2D {args} { + # Physics + gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name SolidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name InterfaceBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[5\]" {name RigidWallsBody} + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} + + # Fluid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" + set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 5000 SPECIFIC_HEAT 1000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] + spdAux::SetValuesOnBaseNode $fluidNode $props + + # Solid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='BodyType'\]" {v Solid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set solid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/condition\[@n='Parts'\]" + set solidNode [customlib::AddConditionGroupOnXPath $solid_part_xpath Solid] + set props [list Element UpdatedLagrangianVSolidElement2D ConstitutiveLaw Hypoelastic DENSITY 700 YOUNG_MODULUS 1000000 POISSON_RATIO 0 CONDUCTIVITY 10 SPECIFIC_HEAT 1000] + spdAux::SetValuesOnBaseNode $solidNode $props + + # Interface body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='BodyType'\]" {v Interface} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set interface_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/condition\[@n='Parts'\]" + set interfaceNode [customlib::AddConditionGroupOnXPath $interface_part_xpath Interface] + $interfaceNode setAttribute ov line + + # Rigid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] + $rigidNode setAttribute ov line + + # Velocity BC + GiD_Groups clone Rigid_Walls TotalV + GiD_Groups edit parent TotalV Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalV" + GiD_Groups edit state "Rigid_Walls//TotalV" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//TotalV"] + $fixVelocityNode setAttribute ov line + + # Temperature BC + GiD_Groups clone Rigid_Walls TotalTR + GiD_Groups edit parent TotalTR Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalTR" + GiD_Groups edit state "Rigid_Walls//TotalTR" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalTR"] + $fixTemperatureNode setAttribute ov line + set props [list value 300.00 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + # Temperature IC + GiD_Groups clone Fluid InitialTF + GiD_Groups edit parent InitialTF Fluid + spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" + GiD_Groups edit state "Fluid//InitialTF" hidden + set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] + $thermalFluidICnode setAttribute ov surface + set fluidProps [list value 300.00 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps + + GiD_Groups clone Solid InitialTS + GiD_Groups edit parent InitialTS Solid + spdAux::AddIntervalGroup Solid "Solid//InitialTS" + GiD_Groups edit state "Solid//InitialTS" hidden + set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] + $thermalSolidICnode setAttribute ov surface + set solidProps [list value 380.00 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 5.0 DeltaTime 0.001 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.01] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicCubeDrop3D {args} { + # To be implemented +} + +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl new file mode 100644 index 000000000..bfc26b5c8 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -0,0 +1,203 @@ +proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + + Kratos::ResetModel + DrawThermicDamBreakFSIGeometry$::Model::SpatialDimension + AssignGroupsThermicDamBreakFSIGeometry$::Model::SpatialDimension + TreeAssignationThermicDamBreakFSI$::Model::SpatialDimension + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +# Draw Geometry +proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry2D {args} { + ## Layer ## + set layer PfemThermic + GiD_Layers create $layer + GiD_Layers edit to_use $layer + + ## Points ## + set points_fluid [list 0 0 0 0.146 0 0 0.146 0.350 0 0 0.350 0] + foreach {x y z} $points_fluid { + GiD_Geometry create point append $layer $x $y $z + } + set points_solid [list 0.360 0 0 0.360 0.10 0 0.330 0.10 0 0.330 0 0] + foreach {x y z} $points_solid { + GiD_Geometry create point append $layer $x $y $z + } + set points_rigid [list 0 0.596 0 0.596 0.596 0 0.596 0 0 ] + foreach {x y z} $points_rigid { + GiD_Geometry create point append $layer $x $y $z + } + + ## Lines ## + set lines_fluid [list 1 2 2 3 3 4 4 1] + foreach {p1 p2} $lines_fluid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_solid [list 5 6 6 7 7 8 8 5] + foreach {p1 p2} $lines_solid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_rigid [list 4 9 9 10 10 11 11 5 8 2] + foreach {p1 p2} $lines_rigid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape + GiD_Process Mescape Geometry Create NurbsSurface 5 6 7 8 escape escape +} + +proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry3D {args} { + # To be implemented +} + +# Group assign +proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry2D {args} { + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create Solid + GiD_Groups edit color Solid "#3b3b3bff" + GiD_EntitiesGroups assign Solid surfaces 2 + + GiD_Groups create Interface + GiD_Groups edit color Interface "#e0210fff" + GiD_EntitiesGroups assign Interface lines {5 6 7} + + GiD_Groups create Rigid_Walls + GiD_Groups edit color Rigid_Walls "#42eb71ff" + GiD_EntitiesGroups assign Rigid_Walls lines {1 4 9 10 11 12 13} + +} +proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry3D {args} { + # To be implemented +} + +# Tree assign +proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI2D {args} { + # Physics + gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name SolidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name InterfaceBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[5\]" {name RigidWallsBody} + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} + + # Fluid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" + set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 5000 SPECIFIC_HEAT 5000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] + spdAux::SetValuesOnBaseNode $fluidNode $props + + # Solid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='BodyType'\]" {v Solid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set solid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/condition\[@n='Parts'\]" + set solidNode [customlib::AddConditionGroupOnXPath $solid_part_xpath Solid] + set props [list Element UpdatedLagrangianVSolidElement2D ConstitutiveLaw Hypoelastic DENSITY 2500 YOUNG_MODULUS 1000000 POISSON_RATIO 0 CONDUCTIVITY 10 SPECIFIC_HEAT 1000] + spdAux::SetValuesOnBaseNode $solidNode $props + + # Interface body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='BodyType'\]" {v Interface} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set interface_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/condition\[@n='Parts'\]" + set interfaceNode [customlib::AddConditionGroupOnXPath $interface_part_xpath Interface] + $interfaceNode setAttribute ov line + + # Rigid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] + $rigidNode setAttribute ov line + + # Velocity BC + GiD_Groups clone Rigid_Walls TotalV + GiD_Groups edit parent TotalV Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalV" + GiD_Groups edit state "Rigid_Walls//TotalV" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//TotalV"] + $fixVelocityNode setAttribute ov line + + # Temperature BC + GiD_Groups clone Rigid_Walls TotalTR + GiD_Groups edit parent TotalTR Rigid_Walls + spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalTR" + GiD_Groups edit state "Rigid_Walls//TotalTR" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalTR"] + $fixTemperatureNode setAttribute ov line + set props [list value 330.00 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + # Temperature IC + GiD_Groups clone Fluid InitialTF + GiD_Groups edit parent InitialTF Fluid + spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" + GiD_Groups edit state "Fluid//InitialTF" hidden + set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] + $thermalFluidICnode setAttribute ov surface + set fluidProps [list value 273.15 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps + + GiD_Groups clone Solid InitialTS + GiD_Groups edit parent InitialTS Solid + spdAux::AddIntervalGroup Solid "Solid//InitialTS" + GiD_Groups edit state "Solid//InitialTS" hidden + set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] + $thermalSolidICnode setAttribute ov surface + set solidProps [list value 373.15 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 5.0 DeltaTime 0.001 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.01] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI3D {args} { + # To be implemented +} + +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl new file mode 100644 index 000000000..3146c13a6 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -0,0 +1,172 @@ +proc ::PfemThermic::examples::ThermicFluidDrop {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + + Kratos::ResetModel + DrawThermicFluidDropGeometry$::Model::SpatialDimension + AssignGroupsThermicFluidDropGeometry$::Model::SpatialDimension + TreeAssignationThermicFluidDrop$::Model::SpatialDimension + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +# Draw Geometry +proc PfemThermic::examples::DrawThermicFluidDropGeometry2D {args} { + ## Layer ## + set layer PfemThermic + GiD_Layers create $layer + GiD_Layers edit to_use $layer + + ## Points ## + set points_solid [list 0.00 1.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 1.00 1.00 0.00 0.90 1.00 0.00 0.90 0.10 0.00 0.10 0.10 0.00 0.10 1.00 0.00] + foreach {x y z} $points_solid { + GiD_Geometry create point append $layer $x $y $z + } + set points_fluid [list 0.25 0.15 0.00 0.75 0.15 0.00 0.75 0.65 0.00 0.25 0.65 0.00] + foreach {x y z} $points_fluid { + GiD_Geometry create point append $layer $x $y $z + } + + ## Lines ## + set lines_solid [list 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 1] + foreach {p1 p2} $lines_solid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_fluid [list 9 10 10 11 11 12 12 9] + foreach {p1 p2} $lines_fluid { + GiD_Geometry create line append stline $layer $p1 $p2 + } + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface 9 10 11 12 escape escape + GiD_Process Mescape Geometry Create NurbsSurface 1 2 3 4 5 6 7 8 escape escape +} + +proc PfemThermic::examples::DrawThermicFluidDropGeometry3D {args} { + # To be implemented +} + +# Group assign +proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry2D {args} { + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create Solid + GiD_Groups edit color Solid "#3b3b3bff" + GiD_EntitiesGroups assign Solid surfaces 2 + + GiD_Groups create Interface + GiD_Groups edit color Interface "#e0210fff" + GiD_EntitiesGroups assign Interface lines {1 2 3 4 5 6 7 8} +} +proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry3D {args} { + # To be implemented +} + +# Tree assign +proc PfemThermic::examples::TreeAssignationThermicFluidDrop2D {args} { + # Physics + gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name SolidBody} + + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name InterfaceBody} + + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} + + # Fluid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" + set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 5000 SPECIFIC_HEAT 100 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] + spdAux::SetValuesOnBaseNode $fluidNode $props + + # Solid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='BodyType'\]" {v Solid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set solid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='SolidBody'\]/condition\[@n='Parts'\]" + set solidNode [customlib::AddConditionGroupOnXPath $solid_part_xpath Solid] + set props [list Element UpdatedLagrangianVSolidElement2D ConstitutiveLaw Hypoelastic DENSITY 2500 YOUNG_MODULUS 1000000 POISSON_RATIO 0 CONDUCTIVITY 7000 SPECIFIC_HEAT 100] + spdAux::SetValuesOnBaseNode $solidNode $props + + # Interface body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='BodyType'\]" {v Interface} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set interface_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='InterfaceBody'\]/condition\[@n='Parts'\]" + set interfaceNode [customlib::AddConditionGroupOnXPath $interface_part_xpath Interface] + $interfaceNode setAttribute ov line + + # Velocity BC + GiD_Groups clone Interface TotalV + GiD_Groups edit parent TotalV Interface + spdAux::AddIntervalGroup Interface "Interface//TotalV" + GiD_Groups edit state "Interface//TotalV" hidden + set fixSurfaceVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixSurfaceVelocityNode [customlib::AddConditionGroupOnXPath $fixSurfaceVelocity "Interface//TotalV"] + $fixSurfaceVelocityNode setAttribute ov line + + # Temperature IC + GiD_Groups clone Fluid InitialTF + GiD_Groups edit parent InitialTF Fluid + spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" + GiD_Groups edit state "Fluid//InitialTF" hidden + set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] + $thermalFluidICnode setAttribute ov surface + set fluidProps [list value 310.00 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps + + GiD_Groups clone Solid InitialTS + GiD_Groups edit parent InitialTS Solid + spdAux::AddIntervalGroup Solid "Solid//InitialTS" + GiD_Groups edit state "Solid//InitialTS" hidden + set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] + $thermalSolidICnode setAttribute ov surface + set solidProps [list value 290.00 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 5.0 DeltaTime 0.001 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.01] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicFluidDrop3D {args} { + # To be implemented +} + +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index c78856f8c..8d0a0434d 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -58,7 +58,7 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry2D {args} { GiD_EntitiesGroups assign Fluid surfaces 1 GiD_Groups create Rigid_Walls - GiD_Groups edit color Rigid_Walls "#e0210fff" + GiD_Groups edit color Rigid_Walls "#3b3b3bff" GiD_EntitiesGroups assign Rigid_Walls lines {1 2 4 5 6 7} } @@ -73,23 +73,26 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { # Create bodies set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" - gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name Body2} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name RigidWallsBody} + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} # Fluid body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/value\[@n='BodyType'\]" {v Fluid} - set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]/condition\[@n='Parts'\]" + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 2000.0 SPECIFIC_HEAT 4000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] spdAux::SetValuesOnBaseNode $fluidNode $props # Rigid body - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='BodyType'\]" {v Rigid} - set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/condition\[@n='Parts'\]" + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RigidWallsBody'\]/condition\[@n='Parts'\]" set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Rigid_Walls] $rigidNode setAttribute ov line - gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body2'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} - + # Velocity BC GiD_Groups clone Rigid_Walls Total GiD_Groups edit parent Total Rigid_Walls @@ -122,7 +125,7 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters - set time_parameters [list StartTime 0.0 EndTime 10 DeltaTime 0.005 UseAutomaticDeltaTime No] + set time_parameters [list StartTime 0.0 EndTime 10.0 DeltaTime 0.005 UseAutomaticDeltaTime No] set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] spdAux::SetValuesOnBasePath $time_params_path $time_parameters @@ -131,6 +134,11 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { set xpath [spdAux::getRoute "Parallelization"] spdAux::SetValuesOnBasePath $xpath $parameters + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.01] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + # Others spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl new file mode 100644 index 000000000..b3d8936c4 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -0,0 +1,252 @@ +proc ::PfemThermic::examples::ThermicSloshingConvection {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + + Kratos::ResetModel + DrawThermicSloshingConvectionGeometry$::Model::SpatialDimension + AssignGroupsThermicSloshingConvectionGeometry$::Model::SpatialDimension + TreeAssignationThermicSloshingConvection$::Model::SpatialDimension + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +# Draw Geometry +proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry2D {args} { + ## Layer ## + set layer PfemThermic + GiD_Layers create $layer + GiD_Layers edit to_use $layer + + ## Points ## + set points_inner [list 0 0 0 1.0 0 0 1.0 0.3 0 0 0.7 0] + foreach {x y z} $points_inner { + GiD_Geometry create point append $layer $x $y $z + } + set points_outer [list 0 1.0 0 1.0 1.0 0] + foreach {x y z} $points_outer { + GiD_Geometry create point append $layer $x $y $z + } + + ## Lines ## + set lines_inner [list 1 2 2 3 3 4 4 1] + foreach {p1 p2} $lines_inner { + GiD_Geometry create line append stline $layer $p1 $p2 + } + set lines_outer [list 4 5 5 6 6 3] + foreach {p1 p2} $lines_outer { + GiD_Geometry create line append stline $layer $p1 $p2 + } + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape +} + +proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry3D {args} { + # To be implemented +} + +# Group assign +proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry2D {args} { + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create Bottom_Wall + GiD_Groups edit color Bottom_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Bottom_Wall lines {1} + + GiD_Groups create Top_Wall + GiD_Groups edit color Top_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Top_Wall lines {6} + + GiD_Groups create Right_Wall + GiD_Groups edit color Right_Wall "#e0210fff" + GiD_EntitiesGroups assign Right_Wall lines {2 7} + + GiD_Groups create Left_Wall + GiD_Groups edit color Left_Wall "#e0210fff" + GiD_EntitiesGroups assign Left_Wall lines {4 5} + +} +proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry3D {args} { + # To be implemented +} + +# Tree assign +proc PfemThermic::examples::TreeAssignationThermicSloshingConvection2D {args} { + # Physics + spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType + + # Create bodies + set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[2\]" {name FluidBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[3\]" {name BottomWallBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[4\]" {name RightWallBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[5\]" {name TopWallBody} + gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@n='Body'\]\[6\]" {name LeftWallBody} + gid_groups_conds::setAttributesF $bodies_xpath {state hidden} + + # Fluid body + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/value\[@n='BodyType'\]" {v Fluid} + set fluid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='FluidBody'\]/condition\[@n='Parts'\]" + set fluidNode [customlib::AddConditionGroupOnXPath $fluid_part_xpath Fluid] + set props [list ConstitutiveLaw NewtonianTemperatureDependent2DLaw DENSITY 1000 CONDUCTIVITY 5000 SPECIFIC_HEAT 5000 DYNAMIC_VISCOSITY 0.01 BULK_MODULUS 1000000000] + spdAux::SetValuesOnBaseNode $fluidNode $props + # Add table + set filePath [file join [file join [apps::getMyDir "PfemThermic"] examples] tables] + set fileName ThermicSloshingConvection_DENSITY.txt + set fullName [file join $filePath $fileName] + spdAux::UpdateFileField $fullName [$fluidNode selectNodes "./value\[@n = 'TEMPERATURE_vs_DENSITY'\]"] + + # Rigid bodies + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='BottomWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Bottom_Wall] + $rigidNode setAttribute ov line + + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='RightWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Right_Wall] + $rigidNode setAttribute ov line + + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='TopWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Top_Wall] + $rigidNode setAttribute ov line + + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/value\[@n='BodyType'\]" {v Rigid} + gid_groups_conds::setAttributesF "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/value\[@n='MeshingStrategy'\]" {v "No remesh"} + set rigid_part_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='LeftWallBody'\]/condition\[@n='Parts'\]" + set rigidNode [customlib::AddConditionGroupOnXPath $rigid_part_xpath Left_Wall] + $rigidNode setAttribute ov line + + # Velocity BC + GiD_Groups clone Bottom_Wall TotalVB + GiD_Groups edit parent TotalVB Bottom_Wall + spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalVB" + GiD_Groups edit state "Bottom_Wall//TotalVB" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall//TotalVB"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Right_Wall TotalVR + GiD_Groups edit parent TotalVR Right_Wall + spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalVR" + GiD_Groups edit state "Right_Wall//TotalVR" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall//TotalVR"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Top_Wall TotalVT + GiD_Groups edit parent TotalVT Top_Wall + spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalVT" + GiD_Groups edit state "Top_Wall//TotalVT" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall//TotalVT"] + $fixVelocityNode setAttribute ov line + + GiD_Groups clone Left_Wall TotalVL + GiD_Groups edit parent TotalVL Left_Wall + spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalVL" + GiD_Groups edit state "Left_Wall//TotalVL" hidden + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall//TotalVL"] + $fixVelocityNode setAttribute ov line + + # Temperature BC + GiD_Groups clone Bottom_Wall TotalTB + GiD_Groups edit parent TotalTB Bottom_Wall + spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalTB" + GiD_Groups edit state "Bottom_Wall//TotalTB" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Bottom_Wall//TotalTB"] + $fixTemperatureNode setAttribute ov line + set props [list value 373.65 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + GiD_Groups clone Top_Wall TotalTT + GiD_Groups edit parent TotalTT Top_Wall + spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalTT" + GiD_Groups edit state "Top_Wall//TotalTT" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Top_Wall//TotalTT"] + $fixTemperatureNode setAttribute ov line + set props [list value 373.65 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + GiD_Groups clone Right_Wall TotalTR + GiD_Groups edit parent TotalTR Right_Wall + spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalTR" + GiD_Groups edit state "Right_Wall//TotalTR" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall//TotalTR"] + $fixTemperatureNode setAttribute ov line + set props [list value 372.65 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + GiD_Groups clone Left_Wall TotalTL + GiD_Groups edit parent TotalTL Left_Wall + spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalTL" + GiD_Groups edit state "Left_Wall//TotalTL" hidden + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall//TotalTL"] + $fixTemperatureNode setAttribute ov line + set props [list value 372.65 Interval Total constrained 1] + spdAux::SetValuesOnBaseNode $fixTemperatureNode $props + + # Temperature IC + GiD_Groups clone Fluid Initial + GiD_Groups edit parent Initial Fluid + spdAux::AddIntervalGroup Fluid "Fluid//Initial" + GiD_Groups edit state "Fluid//Initial" hidden + set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] + $thermalICnode setAttribute ov surface + set props [list value 373.15 Interval Initial constrained 0] + spdAux::SetValuesOnBaseNode $thermalICnode $props + + # Time parameters + set time_parameters [list StartTime 0.0 EndTime 10.0 DeltaTime 0.005 UseAutomaticDeltaTime No] + set time_params_path [spdAux::getRoute "PFEMFLUID_TimeParameters"] + spdAux::SetValuesOnBasePath $time_params_path $time_parameters + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 1] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.01] + set xpath [spdAux::getRoute "Results"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Others + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::RequestRefresh +} + +proc PfemThermic::examples::TreeAssignationThermicSloshingConvection3D {args} { + # To be implemented +} + +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index 41548d0c5..1f7ea7b93 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -5,12 +5,20 @@ namespace eval PfemThermic::examples { proc PfemThermic::examples::Init { } { uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicSloshing.tcl]] uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicConvection.tcl]] + uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicSloshingConvection.tcl]] + uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicDamBreakFSI.tcl]] + uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicCubeDrop.tcl]] + uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicFluidDrop.tcl]] } proc PfemThermic::examples::UpdateMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic sloshing" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshing] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic convection" ] 7 PRE [list ::PfemThermic::examples::ThermicConvection] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic sloshing" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshing] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic convection" ] 7 PRE [list ::PfemThermic::examples::ThermicConvection] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic sloshing convection" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshingConvection] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic dam break FSI" ] 7 PRE [list ::PfemThermic::examples::ThermicDamBreakFSI] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic cube drop" ] 7 PRE [list ::PfemThermic::examples::ThermicCubeDrop] "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Thermic fluid drop" ] 7 PRE [list ::PfemThermic::examples::ThermicFluidDrop] "" "" insertafter = GiDMenu::UpdateMenus } diff --git a/kratos.gid/apps/PfemThermic/examples/tables/ThermicConvection_DENSITY.txt b/kratos.gid/apps/PfemThermic/examples/tables/ThermicConvection_DENSITY.txt new file mode 100644 index 000000000..56a0dd952 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/tables/ThermicConvection_DENSITY.txt @@ -0,0 +1,3 @@ +372.65 1050 +373.15 1000 +373.65 950 \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/tables/ThermicSloshingConvection_DENSITY.txt b/kratos.gid/apps/PfemThermic/examples/tables/ThermicSloshingConvection_DENSITY.txt new file mode 100644 index 000000000..c5857225b --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/tables/ThermicSloshingConvection_DENSITY.txt @@ -0,0 +1,3 @@ +372.65 1200 +373.15 1000 +373.65 800 \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt b/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt deleted file mode 100644 index 72e58930d..000000000 --- a/kratos.gid/apps/PfemThermic/examples/temp_vs_dens.txt +++ /dev/null @@ -1,2 +0,0 @@ -99.5 1050 -100.5 950 \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/images/exampleConvection.png b/kratos.gid/apps/PfemThermic/images/exampleConvection.png deleted file mode 100644 index 419a1453d3b20ad9956aebb6dbd289d5cbd53838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1526 zcmVA}Lphlq>4zQKZohiYqWx3{>pwYGVVr-rnC6tmUw>v~+cN zv$eS2-{8c>$BT@Q;^O1Ey1nD$3wzs;lvbDOqzHe}Hzq-7>wz#@+a&)@7ymhzHeSUxnuIsh8x=ygx zUZK04sFIZPdUBMap`oOlsjoe%)SI)tW2V4NnYV$1hN!8mDXiY& zgyg|fuJ!Nic9 zqhh4LX`#0fspB}X-m$Z`t*^0vp|Ejra}2NSMV-Hhs=2thxvHwHy1Kg+t>$ZNZftFD zn!Cw@nx($JzrMb}zQ4e}zrkpgr=hsQIHk`}sLE8V&YZr?czJtzhK;eawRf(?K%>b+ zrp&drx3;#oS&^q)l&W=hd3JYtmzkSGn!L2OxN3}>wYRyKq^rEWzP-J_pRBXw<>h{g zk(HL2yS%@+xVkN{;vA{paB*~Ub9KeW$A^iGqNJu*nzS0H-KVIkySu&Pr7z#2n z;@YLV+=QVQ^?`V}S)-a7^g}9@N~g=tHe|$UwnD@EX?WO%*W3{wXEdg&bW;lU0648q z)7v$t(Bm*72tp=PD*47#-3$Pz*1G9!IM^G}a8d?-ff-N2U9DSd3SU+rk|Y%hfz_3K zfDhpGOl!l;*NBN@u}FnL%8&u5>chNHMB$$|h>qj&n3!o&0AqWoPPgG`FT}>Fed#=Z z7C8XgC_Mq<)=>B<4{^C%x!jM9nRyk?5Xvez)sn)lw~$aM3>Jy3%*%m^Qer9mw&Aep zNGz5}qOr@_XCa3aFa|>9A_^Z}Kt8w>u|z1ccZAI>1+5AyTT%Ep9_8l71etwOBzwof z54t}~0N`oE#l^_d&C<71jCoxY^zWmlGq>Q4KT~+D2$hzOkI0`h8KBE7uAi@eceo;J zOX2YlRG3(@>=pj;-cO=Ma`k$EqyO+k2pXO|Xg9#N4M9GVVD7_T(2GViq3|RJg(ro7 z8*}=BC1!_M$ej(2n`jIhHs&Cc$vHeZab$j(Sv+YWz)pN>Ew*Tyu+g})H#u#Z{5kUD5+;s2M2Ii`Ta6p2p>w; zUC7xr`9)!5#P*s~*mNdIBRa2L@NvldnLjybRe54bWQ3*6oMQb1I#VGf_&S3oG)o`b cU%^r>cpI zj+mOAdwhS0iHxbMu9B3Oij0qgg@~7#oQ8*rtgf-6rKpsanSFkNpP{6hoS%k>i>s}$ zq^7Bkkdugtjd^-~czJwub$E)4j-sTeet&|FkCK9fhlPiVb98sAtgp7Wy0WylsH&}i zfrO^0tA2okZ*X$L!^N(!vxJ3+b#{4ia&)=7y}rQ0frEy;y})*NdU|_)jE#`Ey1c)@ z!?d=!x4659iHxA4rFVFHZEkS0wYaUXvOS;0Y;A9_vbDs;$AyN8gM^2$vb4j*#=XA4 za&vZTY;Li$wQzBCxw^f0d3%3>go})ioSva|c6hI`w7a~&y1c%Lij8S%Y$2r939RYG z#>gV2*1f;MZ;_xpwBl%giLJT6W@l+MtlBi8%PXYOC#u^EuIyE!z=V*OadC4sqs+j< z#KFSECaK$rpsNq4;cASUUW=WctFdZpZoIv}A*9tFtl?X!$780zX@H6qt>A$8v$lksreu(#WwOw%udzdqt+u$jbai))j*$qf z>2Ps#U5T4Gu-)b6=Ul1BFrLSEczSo4s4}3*e5t!AtKG4)wjZL?x4FBLpQe3&fWX1S zETz(1pSe?@zHxGOUW%NVu)FB#>9x1Hc#oQfsJAb& zo;#@0TAjCrvcwps+e5J0BCzF`nVXEGuBX1p#m2{Qhmv!2b~dEW0~nj?0008HNkl+Hl?W~!zXH3`K-QC^Y-QC^Y-M#$*JE)&+ z&#&M6eC|2-!lgM{tF@4$DUt}nxxsvezd0%3SNnDyI&~TH1HPI}CS|73VC85m3E^Bl zKiQn!IkZLl07;THYPGCUDbyBfEP`q*KVBH?)N!*QB!r?Uk%&~wOqp7aMiL&WS1jFz z-52>!fQg~g{X(de8ktFG)kp+f{qg6$0?I0G<^zpJQ>hpXCf$!pQOmGw5pbu&+oXW9 z-P3@Fan<1oeWd{alzFzhM%Y(Jd#xFlfiDEk)HDz+VXydhfYNw+zgv7;p-Go8JBv( zet#gs)V}+_;jOMJ<{9XwEfNGPV0_}khE#h_d9MjM`j zw9{$b>wB-=dk^8p?a3zzo(^B3ZJ=SLiS?Bk>Bs(Ch2cla3^C4C_AQG`%}93? diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index af7837182..d9484cb39 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -61,8 +61,12 @@ proc ::PfemThermic::CustomToolbarItems { } { Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] Kratos::ToolbarAddItem "Spacer" "" "" "" if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleSloshing.png"] [list -np- ::PfemThermic::examples::ThermicSloshing] [= "Example\nThermic sloshing"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleConvection.png"] [list -np- ::PfemThermic::examples::ThermicConvection] [= "Example\nThermic convection"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicSloshing] [= "Example\nThermic sloshing"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicConvection] [= "Example\nThermic convection"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicSloshingConvection] [= "Example\nThermic sloshing convection"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicDamBreakFSI] [= "Example\nThermic dam break FSI"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicCubeDrop] [= "Example\nThermic cube drop"] + Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PfemThermic::examples::ThermicFluidDrop] [= "Example\nThermic fluid drop"] } } diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index dd7c5a56c..48cb3dc35 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -63,7 +63,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] if {$constitutive_law ne ""} { set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT" "TEMPERATURE_vs_VISCOSITY"] + set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON"] set variables_dict [dict create] set tables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $group] ] { @@ -103,12 +103,16 @@ proc PfemThermic::write::GetTable { prop fileName } { if {$prop eq "TEMPERATURE_vs_DENSITY"} { dict set table output_variable "DENSITY" - } elseif {$prop eq "TEMPERATURE_vs_CONDUCTIVITY"} { + } elseif {$prop eq "TEMPERATURE_vs_CONDUCTIVITY"} { dict set table output_variable "CONDUCTIVITY" } elseif {$prop eq "TEMPERATURE_vs_SPECIFIC_HEAT"} { dict set table output_variable "SPECIFIC_HEAT" - } else { + } elseif {$prop eq "TEMPERATURE_vs_VISCOSITY"} { dict set table output_variable "DYNAMIC_VISCOSITY" + } elseif {$prop eq "TEMPERATURE_vs_YOUNG"} { + dict set table output_variable "YOUNG_MODULUS" + } elseif {$prop eq "TEMPERATURE_vs_POISSON"} { + dict set table output_variable "POISSON_RATIO" } set fp [open $fileName r] diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index b6cac8749..ba99c5fb7 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -115,9 +115,16 @@ kratos_module = "PfemFluidDynamicsApplication" type = "Solid"> - - - + + + + + + + + + + @@ -133,9 +140,16 @@ kratos_module = "PfemFluidDynamicsApplication" type = "Solid"> - - - + + + + + + + + + + From b511fe57b0d879a86c0ce48b7d7611759d3c1b58 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 13 Nov 2020 19:39:30 +0100 Subject: [PATCH 080/556] Bug fix --- .../examples/ThermicConvection.tcl | 23 +++++-------------- .../PfemThermic/examples/ThermicCubeDrop.tcl | 23 +++++-------------- .../examples/ThermicDamBreakFSI.tcl | 23 +++++-------------- .../PfemThermic/examples/ThermicFluidDrop.tcl | 23 +++++-------------- .../PfemThermic/examples/ThermicSloshing.tcl | 23 +++++-------------- .../examples/ThermicSloshingConvection.tcl | 23 +++++-------------- kratos.gid/apps/PfemThermic/xml/Main.spd | 2 +- .../SolutionStrategyConvectionDiffusion.spd | 12 ++++++++++ .../apps/PfemThermic/xml/XmlController.tcl | 16 ++++--------- 9 files changed, 53 insertions(+), 115 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/xml/SolutionStrategyConvectionDiffusion.spd diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 0c3b58e35..2fc65edee 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicConvection {args} { } Kratos::ResetModel - DrawThermicConvectionGeometry$::Model::SpatialDimension - AssignGroupsThermicConvectionGeometry$::Model::SpatialDimension - TreeAssignationThermicConvection$::Model::SpatialDimension + DrawThermicConvectionGeometry + AssignGroupsThermicConvectionGeometry + TreeAssignationThermicConvection GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicConvection {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicConvectionGeometry2D {args} { +proc PfemThermic::examples::DrawThermicConvectionGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -39,12 +39,8 @@ proc PfemThermic::examples::DrawThermicConvectionGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 1 2 3 4 escape escape } -proc PfemThermic::examples::DrawThermicConvectionGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -66,12 +62,9 @@ proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry2D {args} { GiD_EntitiesGroups assign Left_Wall lines {4} } -proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { +proc PfemThermic::examples::TreeAssignationThermicConvection {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -211,10 +204,6 @@ proc PfemThermic::examples::TreeAssignationThermicConvection2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicConvection3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index 2ce9e9884..018b7c361 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicCubeDrop {args} { } Kratos::ResetModel - DrawThermicCubeDropGeometry$::Model::SpatialDimension - AssignGroupsThermicCubeDropGeometry$::Model::SpatialDimension - TreeAssignationThermicCubeDrop$::Model::SpatialDimension + DrawThermicCubeDropGeometry + AssignGroupsThermicCubeDropGeometry + TreeAssignationThermicCubeDrop GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicCubeDrop {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicCubeDropGeometry2D {args} { +proc PfemThermic::examples::DrawThermicCubeDropGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -56,12 +56,8 @@ proc PfemThermic::examples::DrawThermicCubeDropGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 5 6 7 8 escape escape } -proc PfemThermic::examples::DrawThermicCubeDropGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -78,12 +74,9 @@ proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry2D {args} { GiD_Groups edit color Rigid_Walls "#42eb71ff" GiD_EntitiesGroups assign Rigid_Walls lines {1 2 4 9 10 11} } -proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicCubeDrop2D {args} { +proc PfemThermic::examples::TreeAssignationThermicCubeDrop {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -189,10 +182,6 @@ proc PfemThermic::examples::TreeAssignationThermicCubeDrop2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicCubeDrop3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index bfc26b5c8..10a752972 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { } Kratos::ResetModel - DrawThermicDamBreakFSIGeometry$::Model::SpatialDimension - AssignGroupsThermicDamBreakFSIGeometry$::Model::SpatialDimension - TreeAssignationThermicDamBreakFSI$::Model::SpatialDimension + DrawThermicDamBreakFSIGeometry + AssignGroupsThermicDamBreakFSIGeometry + TreeAssignationThermicDamBreakFSI GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry2D {args} { +proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -56,12 +56,8 @@ proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 5 6 7 8 escape escape } -proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -79,12 +75,9 @@ proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry2D {args} { GiD_EntitiesGroups assign Rigid_Walls lines {1 4 9 10 11 12 13} } -proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI2D {args} { +proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -190,10 +183,6 @@ proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 3146c13a6..511539784 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicFluidDrop {args} { } Kratos::ResetModel - DrawThermicFluidDropGeometry$::Model::SpatialDimension - AssignGroupsThermicFluidDropGeometry$::Model::SpatialDimension - TreeAssignationThermicFluidDrop$::Model::SpatialDimension + DrawThermicFluidDropGeometry + AssignGroupsThermicFluidDropGeometry + TreeAssignationThermicFluidDrop GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicFluidDrop {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicFluidDropGeometry2D {args} { +proc PfemThermic::examples::DrawThermicFluidDropGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -48,12 +48,8 @@ proc PfemThermic::examples::DrawThermicFluidDropGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 1 2 3 4 5 6 7 8 escape escape } -proc PfemThermic::examples::DrawThermicFluidDropGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -66,12 +62,9 @@ proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry2D {args} { GiD_Groups edit color Interface "#e0210fff" GiD_EntitiesGroups assign Interface lines {1 2 3 4 5 6 7 8} } -proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicFluidDrop2D {args} { +proc PfemThermic::examples::TreeAssignationThermicFluidDrop {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -159,10 +152,6 @@ proc PfemThermic::examples::TreeAssignationThermicFluidDrop2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicFluidDrop3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index 8d0a0434d..e3837b015 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { } Kratos::ResetModel - DrawThermicSloshingGeometry$::Model::SpatialDimension - AssignGroupsThermicSloshingGeometry$::Model::SpatialDimension - TreeAssignationThermicSloshing$::Model::SpatialDimension + DrawThermicSloshingGeometry + AssignGroupsThermicSloshingGeometry + TreeAssignationThermicSloshing GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicSloshingGeometry2D {args} { +proc PfemThermic::examples::DrawThermicSloshingGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -47,12 +47,8 @@ proc PfemThermic::examples::DrawThermicSloshingGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape } -proc PfemThermic::examples::DrawThermicSloshingGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -62,12 +58,9 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry2D {args} { GiD_EntitiesGroups assign Rigid_Walls lines {1 2 4 5 6 7} } -proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { +proc PfemThermic::examples::TreeAssignationThermicSloshing {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -144,10 +137,6 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicSloshing3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index b3d8936c4..a6582b5df 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -6,9 +6,9 @@ proc ::PfemThermic::examples::ThermicSloshingConvection {args} { } Kratos::ResetModel - DrawThermicSloshingConvectionGeometry$::Model::SpatialDimension - AssignGroupsThermicSloshingConvectionGeometry$::Model::SpatialDimension - TreeAssignationThermicSloshingConvection$::Model::SpatialDimension + DrawThermicSloshingConvectionGeometry + AssignGroupsThermicSloshingConvectionGeometry + TreeAssignationThermicSloshingConvection GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +17,7 @@ proc ::PfemThermic::examples::ThermicSloshingConvection {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry2D {args} { +proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -47,12 +47,8 @@ proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape } -proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry3D {args} { - # To be implemented -} - # Group assign -proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry2D {args} { +proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -74,12 +70,9 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry2D {arg GiD_EntitiesGroups assign Left_Wall lines {4 5} } -proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry3D {args} { - # To be implemented -} # Tree assign -proc PfemThermic::examples::TreeAssignationThermicSloshingConvection2D {args} { +proc PfemThermic::examples::TreeAssignationThermicSloshingConvection {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -239,10 +232,6 @@ proc PfemThermic::examples::TreeAssignationThermicSloshingConvection2D {args} { spdAux::RequestRefresh } -proc PfemThermic::examples::TreeAssignationThermicSloshingConvection3D {args} { - # To be implemented -} - proc PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] diff --git a/kratos.gid/apps/PfemThermic/xml/Main.spd b/kratos.gid/apps/PfemThermic/xml/Main.spd index 714e8a41c..6ea3be860 100644 --- a/kratos.gid/apps/PfemThermic/xml/Main.spd +++ b/kratos.gid/apps/PfemThermic/xml/Main.spd @@ -12,7 +12,7 @@ - + diff --git a/kratos.gid/apps/PfemThermic/xml/SolutionStrategyConvectionDiffusion.spd b/kratos.gid/apps/PfemThermic/xml/SolutionStrategyConvectionDiffusion.spd new file mode 100644 index 000000000..0e899c500 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/SolutionStrategyConvectionDiffusion.spd @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index a550616c6..34234abeb 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -33,9 +33,8 @@ proc PfemThermic::xml::CustomTree { args } { foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'velocity_linear_solver_settings'\]" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'pressure_linear_solver_settings'\]" ] { $node setAttribute icon select } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]" ] { $node setAttribute icon select } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon data } - foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'StratParams'\]" ] { $node setAttribute icon data } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFStratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon data } + foreach node [[$root parent] selectNodes "[spdAux::getRoute CNVDFFStratSection]/container\[@n = 'StratParams'\]" ] { $node setAttribute icon data } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition" ] { $node setAttribute icon select $node setAttribute groups_icon groupCreated } if {[spdAux::getRoute PFEMFLUID_Loads] ne ""} { @@ -73,15 +72,8 @@ proc PfemThermic::xml::CustomTree { args } { spdAux::SetValueOnTreeItem v linear CNVDFFAnalysisType spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat - - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'ParallelType'\]"] - if { $result_node ne "" } {$result_node delete} - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'BodyForce'\]"] - if { $result_node ne "" } {$result_node delete} - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFSolutionParameters]/container\[@n = 'TimeParameters'\]"] - if { $result_node ne "" } {$result_node delete} - set result_node [$root selectNodes "[spdAux::getRoute CNVDFFStratParams]/value\[@n='line_search'\]"] - if { $result_node ne "" } {$result_node delete} + spdAux::SetValueOnTreeItem v No CNVDFFStratParams line_search + spdAux::SetValueOnTreeItem state hidden CNVDFFStratParams line_search } proc PfemThermic::xml::ProcGetElementsValues {domNode args} { From 26a528d18dd44fab1deaa7f936e0fbf79674fa05 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 13 Nov 2020 21:57:31 +0100 Subject: [PATCH 081/556] Improvements in built-in examples --- .../examples/ThermicConvection.tcl | 63 +++----------- .../PfemThermic/examples/ThermicCubeDrop.tcl | 36 ++------ .../examples/ThermicDamBreakFSI.tcl | 38 ++------- .../PfemThermic/examples/ThermicFluidDrop.tcl | 29 ++----- .../PfemThermic/examples/ThermicSloshing.tcl | 23 ++--- .../examples/ThermicSloshingConvection.tcl | 85 ++++--------------- 6 files changed, 59 insertions(+), 215 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 2fc65edee..15eb880ca 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -120,68 +120,29 @@ proc PfemThermic::examples::TreeAssignationThermicConvection {args} { $rigidNode setAttribute ov line # Velocity BC - GiD_Groups clone Bottom_Wall TotalVB - GiD_Groups edit parent TotalVB Bottom_Wall - spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalVB" - GiD_Groups edit state "Bottom_Wall//TotalVB" hidden set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall//TotalVB"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Right_Wall TotalVR - GiD_Groups edit parent TotalVR Right_Wall - spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalVR" - GiD_Groups edit state "Right_Wall//TotalVR" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall//TotalVR"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Top_Wall TotalVT - GiD_Groups edit parent TotalVT Top_Wall - spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalVT" - GiD_Groups edit state "Top_Wall//TotalVT" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall//TotalVT"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Left_Wall TotalVL - GiD_Groups edit parent TotalVL Left_Wall - spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalVL" - GiD_Groups edit state "Left_Wall//TotalVL" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall//TotalVL"] - $fixVelocityNode setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall"] setAttribute ov line # Temperature BC - GiD_Groups clone Right_Wall TotalTR - GiD_Groups edit parent TotalTR Right_Wall - spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalTR" - GiD_Groups edit state "Right_Wall//TotalTR" hidden - set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall//TotalTR"] - $fixTemperatureNode setAttribute ov line + set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall"] set props [list value 372.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props - GiD_Groups clone Left_Wall TotalTL - GiD_Groups edit parent TotalTL Left_Wall - spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalTL" - GiD_Groups edit state "Left_Wall//TotalTL" hidden - set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall//TotalTL"] - $fixTemperatureNode setAttribute ov line + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall"] set props [list value 373.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC - GiD_Groups clone Fluid Initial - GiD_Groups edit parent Initial Fluid - spdAux::AddIntervalGroup Fluid "Fluid//Initial" - GiD_Groups edit state "Fluid//Initial" hidden - set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] - $thermalICnode setAttribute ov surface + set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] set props [list value 373.15 Interval Initial constrained 0] + $thermalICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index 018b7c361..48be58e4f 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -122,44 +122,24 @@ proc PfemThermic::examples::TreeAssignationThermicCubeDrop {args} { $rigidNode setAttribute ov line # Velocity BC - GiD_Groups clone Rigid_Walls TotalV - GiD_Groups edit parent TotalV Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalV" - GiD_Groups edit state "Rigid_Walls//TotalV" hidden set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//TotalV"] - $fixVelocityNode setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls"] setAttribute ov line # Temperature BC - GiD_Groups clone Rigid_Walls TotalTR - GiD_Groups edit parent TotalTR Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalTR" - GiD_Groups edit state "Rigid_Walls//TotalTR" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalTR"] - $fixTemperatureNode setAttribute ov line + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls"] set props [list value 300.00 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC - GiD_Groups clone Fluid InitialTF - GiD_Groups edit parent InitialTF Fluid - spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" - GiD_Groups edit state "Fluid//InitialTF" hidden - set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] - $thermalFluidICnode setAttribute ov surface + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Solid"] set fluidProps [list value 300.00 Interval Initial constrained 0] - spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps - - GiD_Groups clone Solid InitialTS - GiD_Groups edit parent InitialTS Solid - spdAux::AddIntervalGroup Solid "Solid//InitialTS" - GiD_Groups edit state "Solid//InitialTS" hidden - set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] - $thermalSolidICnode setAttribute ov surface set solidProps [list value 380.00 Interval Initial constrained 0] + $thermalFluidICnode setAttribute ov surface + $thermalSolidICnode setAttribute ov surface + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps # Time parameters diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index 10a752972..9b0bdad9c 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -123,44 +123,24 @@ proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI {args} { $rigidNode setAttribute ov line # Velocity BC - GiD_Groups clone Rigid_Walls TotalV - GiD_Groups edit parent TotalV Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalV" - GiD_Groups edit state "Rigid_Walls//TotalV" hidden set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//TotalV"] - $fixVelocityNode setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls"] setAttribute ov line # Temperature BC - GiD_Groups clone Rigid_Walls TotalTR - GiD_Groups edit parent TotalTR Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalTR" - GiD_Groups edit state "Rigid_Walls//TotalTR" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalTR"] - $fixTemperatureNode setAttribute ov line - set props [list value 330.00 Interval Total constrained 1] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls"] + set props [list value 330.00 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC - GiD_Groups clone Fluid InitialTF - GiD_Groups edit parent InitialTF Fluid - spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" - GiD_Groups edit state "Fluid//InitialTF" hidden - set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] - $thermalFluidICnode setAttribute ov surface + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Solid"] set fluidProps [list value 273.15 Interval Initial constrained 0] - spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps - - GiD_Groups clone Solid InitialTS - GiD_Groups edit parent InitialTS Solid - spdAux::AddIntervalGroup Solid "Solid//InitialTS" - GiD_Groups edit state "Solid//InitialTS" hidden - set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] - $thermalSolidICnode setAttribute ov surface set solidProps [list value 373.15 Interval Initial constrained 0] + $thermalFluidICnode setAttribute ov surface + $thermalSolidICnode setAttribute ov surface + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps # Time parameters diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 511539784..5e052227b 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -103,33 +103,18 @@ proc PfemThermic::examples::TreeAssignationThermicFluidDrop {args} { $interfaceNode setAttribute ov line # Velocity BC - GiD_Groups clone Interface TotalV - GiD_Groups edit parent TotalV Interface - spdAux::AddIntervalGroup Interface "Interface//TotalV" - GiD_Groups edit state "Interface//TotalV" hidden set fixSurfaceVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixSurfaceVelocityNode [customlib::AddConditionGroupOnXPath $fixSurfaceVelocity "Interface//TotalV"] - $fixSurfaceVelocityNode setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixSurfaceVelocity "Interface"] setAttribute ov line # Temperature IC - GiD_Groups clone Fluid InitialTF - GiD_Groups edit parent InitialTF Fluid - spdAux::AddIntervalGroup Fluid "Fluid//InitialTF" - GiD_Groups edit state "Fluid//InitialTF" hidden - set thermalFluidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalFluidICnode [customlib::AddConditionGroupOnXPath $thermalFluidIC "Fluid//InitialTF"] - $thermalFluidICnode setAttribute ov surface + set InitTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" + set thermalFluidICnode [customlib::AddConditionGroupOnXPath $InitTemperature "Fluid"] + set thermalSolidICnode [customlib::AddConditionGroupOnXPath $InitTemperature "Solid"] set fluidProps [list value 310.00 Interval Initial constrained 0] - spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps - - GiD_Groups clone Solid InitialTS - GiD_Groups edit parent InitialTS Solid - spdAux::AddIntervalGroup Solid "Solid//InitialTS" - GiD_Groups edit state "Solid//InitialTS" hidden - set thermalSolidIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalSolidICnode [customlib::AddConditionGroupOnXPath $thermalSolidIC "Solid//InitialTS"] - $thermalSolidICnode setAttribute ov surface set solidProps [list value 290.00 Interval Initial constrained 0] + $thermalFluidICnode setAttribute ov surface + $thermalSolidICnode setAttribute ov surface + spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps spdAux::SetValuesOnBaseNode $thermalSolidICnode $solidProps # Time parameters diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index e3837b015..13120f8ee 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -87,32 +87,19 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing {args} { $rigidNode setAttribute ov line # Velocity BC - GiD_Groups clone Rigid_Walls Total - GiD_Groups edit parent Total Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//Total" - GiD_Groups edit state "Rigid_Walls//Total" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//Total"] - $fixVelocityNode setAttribute ov line + set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" + set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls"] + $fixVelocityNode setAttribute ov line # Temperature BC - GiD_Groups clone Rigid_Walls TotalT - GiD_Groups edit parent TotalT Rigid_Walls - spdAux::AddIntervalGroup Rigid_Walls "Rigid_Walls//TotalT" - GiD_Groups edit state "Rigid_Walls//TotalT" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls//TotalT"] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Rigid_Walls"] $fixTemperatureNode setAttribute ov line set props [list value 338.15 Interval Total constrained 1] spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC - GiD_Groups clone Fluid Initial - GiD_Groups edit parent Initial Fluid - spdAux::AddIntervalGroup Fluid "Fluid//Initial" - GiD_Groups edit state "Fluid//Initial" hidden - set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] + set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] $thermalICnode setAttribute ov surface set props [list value 293.15 Interval Initial constrained 0] spdAux::SetValuesOnBaseNode $thermalICnode $props diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index a6582b5df..03d41858e 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -128,88 +128,39 @@ proc PfemThermic::examples::TreeAssignationThermicSloshingConvection {args} { $rigidNode setAttribute ov line # Velocity BC - GiD_Groups clone Bottom_Wall TotalVB - GiD_Groups edit parent TotalVB Bottom_Wall - spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalVB" - GiD_Groups edit state "Bottom_Wall//TotalVB" hidden set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall//TotalVB"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Right_Wall TotalVR - GiD_Groups edit parent TotalVR Right_Wall - spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalVR" - GiD_Groups edit state "Right_Wall//TotalVR" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall//TotalVR"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Top_Wall TotalVT - GiD_Groups edit parent TotalVT Top_Wall - spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalVT" - GiD_Groups edit state "Top_Wall//TotalVT" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall//TotalVT"] - $fixVelocityNode setAttribute ov line - - GiD_Groups clone Left_Wall TotalVL - GiD_Groups edit parent TotalVL Left_Wall - spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalVL" - GiD_Groups edit state "Left_Wall//TotalVL" hidden - set fixVelocity "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='VELOCITY'\]" - set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall//TotalVL"] - $fixVelocityNode setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Bottom_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Right_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Top_Wall"] setAttribute ov line + [customlib::AddConditionGroupOnXPath $fixVelocity "Left_Wall"] setAttribute ov line # Temperature BC - GiD_Groups clone Bottom_Wall TotalTB - GiD_Groups edit parent TotalTB Bottom_Wall - spdAux::AddIntervalGroup Bottom_Wall "Bottom_Wall//TotalTB" - GiD_Groups edit state "Bottom_Wall//TotalTB" hidden set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Bottom_Wall//TotalTB"] - $fixTemperatureNode setAttribute ov line + + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Bottom_Wall"] set props [list value 373.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props - GiD_Groups clone Top_Wall TotalTT - GiD_Groups edit parent TotalTT Top_Wall - spdAux::AddIntervalGroup Top_Wall "Top_Wall//TotalTT" - GiD_Groups edit state "Top_Wall//TotalTT" hidden - set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Top_Wall//TotalTT"] - $fixTemperatureNode setAttribute ov line - set props [list value 373.65 Interval Total constrained 1] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Top_Wall"] + set props [list value 373.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props - GiD_Groups clone Right_Wall TotalTR - GiD_Groups edit parent TotalTR Right_Wall - spdAux::AddIntervalGroup Right_Wall "Right_Wall//TotalTR" - GiD_Groups edit state "Right_Wall//TotalTR" hidden - set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall//TotalTR"] - $fixTemperatureNode setAttribute ov line - set props [list value 372.65 Interval Total constrained 1] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Right_Wall"] + set props [list value 372.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props - GiD_Groups clone Left_Wall TotalTL - GiD_Groups edit parent TotalTL Left_Wall - spdAux::AddIntervalGroup Left_Wall "Left_Wall//TotalTL" - GiD_Groups edit state "Left_Wall//TotalTL" hidden - set fixTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall//TotalTL"] - $fixTemperatureNode setAttribute ov line - set props [list value 372.65 Interval Total constrained 1] + set fixTemperatureNode [customlib::AddConditionGroupOnXPath $fixTemperature "Left_Wall"] + set props [list value 372.65 Interval Total constrained 1] + $fixTemperatureNode setAttribute ov line spdAux::SetValuesOnBaseNode $fixTemperatureNode $props # Temperature IC - GiD_Groups clone Fluid Initial - GiD_Groups edit parent Initial Fluid - spdAux::AddIntervalGroup Fluid "Fluid//Initial" - GiD_Groups edit state "Fluid//Initial" hidden - set thermalIC "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" - set thermalICnode [customlib::AddConditionGroupOnXPath $thermalIC "Fluid//Initial"] - $thermalICnode setAttribute ov surface + set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] set props [list value 373.15 Interval Initial constrained 0] + $thermalICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters From d75386385cd41fac4285a656031b1551dc9ca7be Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 14:24:23 +0100 Subject: [PATCH 082/556] Ready to change the rest of apps --- .../apps/ConvectionDiffusion/xml/Parts.spd | 2 +- kratos.gid/apps/Fluid/xml/Parts.spd | 6 +- kratos.gid/kratos_default.spd | 16 +- .../scripts/Controllers/CommonProcs.tcl | 161 ++++++++---------- 4 files changed, 89 insertions(+), 96 deletions(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd index 1213b35e5..32797ebe7 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd @@ -8,7 +8,7 @@ values="[GetConstitutiveLaws]" dict="[GetAllConstitutiveLaws]"> - diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index b4f50cb65..e13f99871 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -1,12 +1,12 @@ - + - + - + diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 60efcd0d3..ae2905946 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -170,12 +170,19 @@ @@ -315,7 +322,7 @@ @@ -324,10 +331,9 @@ foreach node [[$domNode parent] selectNodes value|container/value] { dict set dict [$node @n] [get_domnode_attribute $node v] dict set dict_units [$node @n] [get_domnode_attribute $node units] - } } - spdAux::EditDatabaseList $domNode $dict $dict_units $boundary_conds $args + spdAux::ProcEditDatabaseList $domNode $dict $dict_units $boundary_conds $args ]]> diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 9953fd4a4..0328e70fc 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -582,18 +582,84 @@ proc spdAux::PreChargeTree { } { } } -proc spdAux::ProcGive_materials_list {domNode args} { + +proc spdAux::ProcEdit_database_list {domNode args} { + set root [customlib::GetBaseRoot] + set matname "" + set xnode "[$domNode @n]:" + # TODO: REMOVE THIS CHAPUZA + set baseframe ".gid.central.boundaryconds.gg.data.f0" + set things [winfo children $baseframe] + foreach thing $things { + if {[winfo class $thing] eq "TLabel"} { + set lab [$thing cget -text] + if {$lab eq $xnode} { + set id [string range [lindex [split $thing "."] end] 1 end] + set cbo ${baseframe}.e$id + set matname [$cbo get] + break + } + } + } + if {$matname ne ""} { + foreach thing $things { + set found 0 + #set id "" + if {[winfo class $thing] eq "TPanedwindow"} { + #set id [string range [lindex [split $thing "."] end] 1 end] + set thing "${thing}.e" + } + if {[winfo class $thing] eq "TEntry"} { + #if {$id eq "" } {set id [string range [lindex [split $thing "."] end] 1 end]} + #set prop ${baseframe}.e$id + set varname [$thing cget -textvariable] + set propname [lindex [split [lindex [split [lindex [split $varname "::"] end] "("] end] ")"] 0] + #W $propname + set appid [spdAux::GetAppIdFromNode $domNode] + set mats_un [apps::getAppUniqueName $appid Materials] + set xp3 [spdAux::getRoute $mats_un] + append xp3 [format_xpath {/blockdata[@n="material" and @name=%s]/value} $matname] + + foreach valueNode [$root selectNodes $xp3] { + if {$propname eq [$valueNode getAttribute n] } { + set val [$valueNode getAttribute v] + set $varname $val + #set found 1 + break + } + } + #if {$found} {W "mat $matname value $val"} + + } + } + } + return "" +} + +proc spdAux::ProcCambioMat {domNode args} { + set matname [get_domnode_attribute $domNode v] + set exclusion [list "Element" "ConstitutiveLaw" "Material"] + set nodes [$domNode selectNodes "../value"] + foreach node $nodes { + if {[$node @n] ni $exclusion} { + #W "[$node @n] [CheckPartParamValue $node $matname]" + $node setAttribute v [spdAux::CheckPartParamValue $node $matname] + } + } + RequestRefresh +} + +proc spdAux::ProcGetMaterialsList { domNode args } { set optional { { -has_container container_name "" } { -icon icon_name material16 } { -types_icon types_icon_name ""} { -database database_name materials } } - #W $args set compulsory "" parse_args $optional $compulsory $args set restList "" - + proc database_append_list { parentNode database_name level container_name icon_name types_icon_name filters} { set l "" # We guess the keywords of the levels of the database @@ -660,7 +726,7 @@ proc spdAux::ProcGive_materials_list {domNode args} { } return [list $primary_level $secondary_level] } - #W $database + set appid [spdAux::GetAppIdFromNode $domNode] set mats_un [apps::getAppUniqueName $appid Materials] set xp3 [spdAux::getRoute $mats_un] @@ -683,93 +749,14 @@ proc spdAux::ProcGive_materials_list {domNode args} { set res_raw_list [list ] foreach m $resList {lappend res_raw_list [lindex $m 1]} set v [get_domnode_attribute [$domNode selectNodes "../value\[@n = 'Material'\]"] v] - if {$v ni $res_raw_list} {[$domNode selectNodes "../value\[@n = 'Material'\]"] setAttribute v $v} - return [join $resList ","] -} - -proc spdAux::ProcEdit_database_list {domNode args} { - set root [customlib::GetBaseRoot] - set matname "" - set xnode "[$domNode @n]:" - # TODO: REMOVE THIS CHAPUZA - set baseframe ".gid.central.boundaryconds.gg.data.f0" - set things [winfo children $baseframe] - foreach thing $things { - if {[winfo class $thing] eq "TLabel"} { - set lab [$thing cget -text] - if {$lab eq $xnode} { - set id [string range [lindex [split $thing "."] end] 1 end] - set cbo ${baseframe}.e$id - set matname [$cbo get] - break - } - } + if {$v ni $res_raw_list} { + [$domNode selectNodes "../value\[@n = 'Material'\]"] setAttribute v [lindex $res_raw_list 0] } - if {$matname ne ""} { - foreach thing $things { - set found 0 - #set id "" - if {[winfo class $thing] eq "TPanedwindow"} { - #set id [string range [lindex [split $thing "."] end] 1 end] - set thing "${thing}.e" - } - if {[winfo class $thing] eq "TEntry"} { - #if {$id eq "" } {set id [string range [lindex [split $thing "."] end] 1 end]} - #set prop ${baseframe}.e$id - set varname [$thing cget -textvariable] - set propname [lindex [split [lindex [split [lindex [split $varname "::"] end] "("] end] ")"] 0] - #W $propname - set appid [spdAux::GetAppIdFromNode $domNode] - set mats_un [apps::getAppUniqueName $appid Materials] - set xp3 [spdAux::getRoute $mats_un] - append xp3 [format_xpath {/blockdata[@n="material" and @name=%s]/value} $matname] - - foreach valueNode [$root selectNodes $xp3] { - if {$propname eq [$valueNode getAttribute n] } { - set val [$valueNode getAttribute v] - set $varname $val - #set found 1 - break - } - } - #if {$found} {W "mat $matname value $val"} - - } - } - } - return "" -} + return [join $res_raw_list ","] -proc spdAux::ProcCambioMat {domNode args} { - set matname [get_domnode_attribute $domNode v] - set exclusion [list "Element" "ConstitutiveLaw" "Material"] - set nodes [$domNode selectNodes "../value"] - foreach node $nodes { - if {[$node @n] ni $exclusion} { - #W "[$node @n] [CheckPartParamValue $node $matname]" - $node setAttribute v [spdAux::CheckPartParamValue $node $matname] - } - } - RequestRefresh -} - -proc spdAux::GetMaterialsList { domNode args } { - set x_path {//container[@n="materials"]} - set dom_materials [$domNode selectNodes $x_path] - if { $dom_materials == "" } { - error [= "xpath '%s' not found in the spd file" $x_path] - } - set image material - set result [list] - foreach dom_material [$dom_materials childNodes] { - set name [$dom_material @name] - # lappend result [list 0 $name $name $image 1] - lappend result $name - } - return [join $result ,] } -proc spdAux::EditDatabaseList { domNode dict dict_units boundary_conds args } { +proc spdAux::ProcEditDatabaseList { domNode dict dict_units boundary_conds args } { set part [$domNode parent] set has_container "" set database materials From 29dbedf578ac8353e0158c55df15e764e109bd90 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 14:48:27 +0100 Subject: [PATCH 083/556] buoyancy mat --- kratos.gid/apps/Buoyancy/xml/Parts.spd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/Buoyancy/xml/Parts.spd b/kratos.gid/apps/Buoyancy/xml/Parts.spd index 869f991de..d9f66ff24 100644 --- a/kratos.gid/apps/Buoyancy/xml/Parts.spd +++ b/kratos.gid/apps/Buoyancy/xml/Parts.spd @@ -2,6 +2,8 @@ - + + + \ No newline at end of file From 5f0a942cf04accce1ded25389a9c14bd1daeb20b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 14:53:23 +0100 Subject: [PATCH 084/556] cdem materials --- kratos.gid/apps/CDEM/xml/PartsCont.spd | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/CDEM/xml/PartsCont.spd b/kratos.gid/apps/CDEM/xml/PartsCont.spd index e1d8ae59a..1b96531fc 100644 --- a/kratos.gid/apps/CDEM/xml/PartsCont.spd +++ b/kratos.gid/apps/CDEM/xml/PartsCont.spd @@ -4,14 +4,13 @@ - - - - - - + + + + + From bfa6fac18b38d2d3f451bd460efe5fb85aa6442b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 15:00:45 +0100 Subject: [PATCH 085/556] Convection difussion material --- .../apps/ConvectionDiffusion/xml/Parts.spd | 30 +++++++++---------- kratos.gid/apps/Fluid/xml/Parts.spd | 4 +-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd index 32797ebe7..85c036c28 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd @@ -1,17 +1,17 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index e13f99871..be5782498 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -7,7 +7,7 @@ - - + + \ No newline at end of file From 6077d8a3247e60b02fc4acc4b86c097b0828cbe2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 15:19:14 +0100 Subject: [PATCH 086/556] dam material window --- kratos.gid/apps/Dam/xml/Parts.spd | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/kratos.gid/apps/Dam/xml/Parts.spd b/kratos.gid/apps/Dam/xml/Parts.spd index 420de8173..a54340701 100644 --- a/kratos.gid/apps/Dam/xml/Parts.spd +++ b/kratos.gid/apps/Dam/xml/Parts.spd @@ -1,17 +1,13 @@ - - - - - - - - - - - - + + + + + + + + + + + From 7db6eb95f89a5b6a7831619084522dc7607a62e7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 15:26:05 +0100 Subject: [PATCH 087/556] DEM materials --- kratos.gid/apps/DEM/xml/Parts.spd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Parts.spd b/kratos.gid/apps/DEM/xml/Parts.spd index 6a4e1284b..8516936ee 100644 --- a/kratos.gid/apps/DEM/xml/Parts.spd +++ b/kratos.gid/apps/DEM/xml/Parts.spd @@ -6,12 +6,13 @@ - - + + + - + From 802621463d50f0d06e5d67d4b8ddcdb1080e091b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 15:46:06 +0100 Subject: [PATCH 088/556] Materials in structural --- kratos.gid/apps/EmbeddedFluid/xml/Parts.spd.bak | 17 ----------------- .../scripts/Controllers/TreeInjections.tcl | 11 +++++------ 2 files changed, 5 insertions(+), 23 deletions(-) delete mode 100644 kratos.gid/apps/EmbeddedFluid/xml/Parts.spd.bak diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Parts.spd.bak b/kratos.gid/apps/EmbeddedFluid/xml/Parts.spd.bak deleted file mode 100644 index a2d1b0a2f..000000000 --- a/kratos.gid/apps/EmbeddedFluid/xml/Parts.spd.bak +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 4f8aa9e61..1c22545ab 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -870,19 +870,18 @@ proc spdAux::injectPartsByElementType {domNode args} { #if {[lsearch $ov point] != -1 && [lsearch $ov Point] != -1 } {set ovm "node,element"} set condition_string " - + - + - - - + + " + $base appendXML $condition_string set orig [$base lastChild] set new [$orig cloneNode -deep] From 44eedf5f86cbf5009e8a7c77065dfe9d4a4789bc Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 16:29:39 +0100 Subject: [PATCH 089/556] Hotfix FSI example --- kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl index 8050de56d..d249f0fa2 100644 --- a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl @@ -79,7 +79,7 @@ proc FSI::examples::TreeAssignationHighRiseBuilding {args} { set fluidParts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.225 DYNAMIC_VISCOSITY 1.846e-5] - spdAux::SetValuesOnBaseNode $fluidNode $flux_props + spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions {container[@n='FSI']/container[@n='Fluid']/container[@n='BoundaryConditions']} From abc4aa9c27c182df696787f2502dff5231f3ca97 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 17:03:51 +0100 Subject: [PATCH 090/556] Move files to controller --- kratos.gid/apps/Examples/start.tcl | 126 +----------------- kratos.gid/kratos.tcl | 2 +- .../scripts/Controllers/ExamplesWindow.tcl | 125 +++++++++++++++++ 3 files changed, 127 insertions(+), 126 deletions(-) create mode 100644 kratos.gid/scripts/Controllers/ExamplesWindow.tcl diff --git a/kratos.gid/apps/Examples/start.tcl b/kratos.gid/apps/Examples/start.tcl index e0f3bd995..37c03046b 100644 --- a/kratos.gid/apps/Examples/start.tcl +++ b/kratos.gid/apps/Examples/start.tcl @@ -1,125 +1 @@ -namespace eval ::Examples { - # Variable declaration - variable dir - variable doc - variable examples_window -} - -proc ::Examples::Init { } { - # Variable initialization - variable dir - variable examples_window - set examples_window .gid.examples_window - - set dir [apps::getMyDir "Examples"] - - # Don't open the tree - set ::spdAux::TreeVisibility 0 - set ::spdAux::must_open_dim_window 0 - - LoadMyFiles - - after 200 [list ::Examples::StartWindow] -} - -proc ::Examples::LoadMyFiles { } { - variable dir - variable doc - - # uplevel #0 [list source [file join $dir xml GetFromXML.tcl]] - set xmlfd [tDOM::xmlOpenFile [file join $dir xml examples.xml]] - set doc [dom parse -channel $xmlfd] - close $xmlfd -} - -proc ::Examples::StartWindow { } { - variable doc - variable examples_window - - if { [GidUtils::IsTkDisabled] } { - return 0 - } - set root [$doc documentElement] - - spdAux::DestroyInitWindow - Examples::DestroyExamplesWindow - toplevel $examples_window - wm withdraw $examples_window - - set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $examples_window]/2] - set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $examples_window]/2] - - wm geom $examples_window +$x+$y - wm transient $examples_window .gid - - InitWindow $examples_window [_ "Kratos Multiphysics - Examples"] Kratos "" "" 1 - set initwind $examples_window - - set c_to_scroll [CreateScrolledCanvas $initwind.center] - set fcenter [tk::frame $c_to_scroll.fcenter] - AddToScrolledCanvas $initwind.center $fcenter - grid $initwind.center -sticky nsew - - set groups [$root getElementsByTagName "Group"] - foreach group $groups { - set group_id [$group @id] - set group_name [$group @name] - #set title_frame [ttk::frame $examples_window.information_$group_id] - #grid [ttk::labelframe $examples_window.title_text$group_id -text $group_name] - - set parent [ttk::labelframe $fcenter.title_text$group_id -text $group_name] - set buttons_frame [ttk::frame $parent.buttonframe] - set examples [$group getElementsByTagName "Example"] - set col 0 - set row 0 - foreach example $examples { - set example_id [$example @id] - set example_name [subst -nocommands -novariables [$example @name]] - set example_logo [$example @logo] - set example_dim [$example @dim] - set example_app [$example @app] - set example_cmd [$example @cmd] - set img [Examples::getImgFrom $group_id $example_logo] - ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] - ttk::label $buttons_frame.text$example_id -text $example_name - grid $buttons_frame.img$example_id -column $col -row $row - grid $buttons_frame.text$example_id -column $col -row [expr $row +1] - - incr col - if {$col >= 7} {set col 0; incr row; incr row} - } - #grid $title_frame - grid $parent -sticky ew - grid $buttons_frame - grid columnconfigure $parent 0 -weight 1 - } - - grid columnconfigure $initwind 0 -weight 1 - grid rowconfigure $initwind 0 -weight 1 - wm minsize $initwind 900 500 - #wm maxsize $initwind 500 500 -} - -proc ::Examples::getImgFrom {group_name example_logo} { - - return [apps::getImgFrom "Examples" [file join $group_name $example_logo]] -} - -proc ::Examples::LaunchExample {example_app example_dim example_cmd} { - Examples::DestroyExamplesWindow - spdAux::SetSpatialDimmension $example_dim - apps::setActiveApp $example_app - $example_cmd - spdAux::OpenTree - -} - -proc ::Examples::DestroyExamplesWindow {} { - - variable examples_window - if { ![GidUtils::IsTkDisabled] } { - if {[winfo exists $examples_window]} {destroy $examples_window} - } -} - -::Examples::Init +::Examples::StartWindow \ No newline at end of file diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index cc115ea87..32aab4cdd 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -176,7 +176,7 @@ proc Kratos::LoadCommonScripts { } { uplevel #0 [list source [file join $kratos_private(Path) scripts $filename]] } # Common controllers - foreach filename {ApplicationMarketWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl} { + foreach filename {ApplicationMarketWindow.tcl ExamplesWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl} { uplevel #0 [list source [file join $kratos_private(Path) scripts Controllers $filename]] } # Model class diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl new file mode 100644 index 000000000..7a9614f15 --- /dev/null +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -0,0 +1,125 @@ +namespace eval ::Examples { + # Variable declaration + variable dir + variable doc + variable examples_window +} + +proc ::Examples::Init { } { + # Variable initialization + variable dir + variable examples_window + set examples_window .gid.examples_window + + set dir [apps::getMyDir "Examples"] + + # Don't open the tree + set ::spdAux::TreeVisibility 0 + set ::spdAux::must_open_dim_window 0 + + LoadMyFiles + +} + +proc ::Examples::LoadMyFiles { } { + variable dir + variable doc + + # uplevel #0 [list source [file join $dir xml GetFromXML.tcl]] + set xmlfd [tDOM::xmlOpenFile [file join $dir xml examples.xml]] + set doc [dom parse -channel $xmlfd] + close $xmlfd +} + +proc ::Examples::StartWindow { } { + variable doc + variable examples_window + + if { [GidUtils::IsTkDisabled] } { + return 0 + } + set root [$doc documentElement] + + spdAux::DestroyInitWindow + Examples::DestroyExamplesWindow + toplevel $examples_window + wm withdraw $examples_window + + set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $examples_window]/2] + set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $examples_window]/2] + + wm geom $examples_window +$x+$y + wm transient $examples_window .gid + + InitWindow $examples_window [_ "Kratos Multiphysics - Examples"] Kratos "" "" 1 + set initwind $examples_window + + set c_to_scroll [CreateScrolledCanvas $initwind.center] + set fcenter [tk::frame $c_to_scroll.fcenter] + AddToScrolledCanvas $initwind.center $fcenter + grid $initwind.center -sticky nsew + + set groups [$root getElementsByTagName "Group"] + foreach group $groups { + set group_id [$group @id] + set group_name [$group @name] + #set title_frame [ttk::frame $examples_window.information_$group_id] + #grid [ttk::labelframe $examples_window.title_text$group_id -text $group_name] + + set parent [ttk::labelframe $fcenter.title_text$group_id -text $group_name] + set buttons_frame [ttk::frame $parent.buttonframe] + set examples [$group getElementsByTagName "Example"] + set col 0 + set row 0 + foreach example $examples { + set example_id [$example @id] + set example_name [subst -nocommands -novariables [$example @name]] + set example_logo [$example @logo] + set example_dim [$example @dim] + set example_app [$example @app] + set example_cmd [$example @cmd] + set img [Examples::getImgFrom $group_id $example_logo] + ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] + ttk::label $buttons_frame.text$example_id -text $example_name + grid $buttons_frame.img$example_id -column $col -row $row + grid $buttons_frame.text$example_id -column $col -row [expr $row +1] + + incr col + if {$col >= 7} {set col 0; incr row; incr row} + } + #grid $title_frame + grid $parent -sticky ew + grid $buttons_frame + grid columnconfigure $parent 0 -weight 1 + } + + grid columnconfigure $initwind 0 -weight 1 + grid rowconfigure $initwind 0 -weight 1 + wm minsize $initwind 900 500 + #wm maxsize $initwind 500 500 +} + +proc ::Examples::getImgFrom {group_name example_logo} { + + return [apps::getImgFrom "Examples" [file join $group_name $example_logo]] +} + +proc ::Examples::LaunchExample {example_app example_dim example_cmd} { + Examples::DestroyExamplesWindow + spdAux::SetSpatialDimmension $example_dim + apps::setActiveApp $example_app + $example_cmd + spdAux::OpenTree + +} + +proc ::Examples::DestroyExamplesWindow {} { + + variable examples_window + if { ![GidUtils::IsTkDisabled] } { + if {[winfo exists $examples_window]} {destroy $examples_window} + } +} + + +::Examples::Init From 8de6511a7abf242bcf64b21a87afe69fc69b055e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 20:00:04 +0100 Subject: [PATCH 091/556] Examples window with filter --- kratos.gid/apps/Examples/xml/examples.xml | 15 +- kratos.gid/apps/Fluid/examples/examples.xml | 6 + .../Controllers/ApplicationMarketWindow.tcl | 2 + .../scripts/Controllers/ExamplesWindow.tcl | 174 +++++++++++++----- kratos.gid/scripts/spdAuxiliar.tcl | 20 +- 5 files changed, 153 insertions(+), 64 deletions(-) create mode 100644 kratos.gid/apps/Fluid/examples/examples.xml diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index e25245bb6..84732aad8 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -1,20 +1,7 @@ - - - - - - + diff --git a/kratos.gid/apps/Fluid/examples/examples.xml b/kratos.gid/apps/Fluid/examples/examples.xml new file mode 100644 index 000000000..9dd04b3d4 --- /dev/null +++ b/kratos.gid/apps/Fluid/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index cb2cb8187..32823dcdd 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -98,6 +98,7 @@ proc spdAux::CreateWindow {} { InitWindow $w [_ "Kratos Multiphysics - Application market"] Kratos "" "" 1 set initwind $w ttk::frame $w.top + spdAux::RegisterWindow $initwind # ttk::label $w.top.title_text -text [_ " Application market"] # List of applications -> by family @@ -217,6 +218,7 @@ proc spdAux::CreateDimensionWindow { } { InitWindow $w [_ "Kratos Multiphysics"] Kratos "" "" 1 set initwind $w + spdAux::RegisterWindow $examples_window ttk::frame $w.top ttk::label $w.top.title_text -text [_ " Dimension selection"] diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 7a9614f15..736df23f8 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -3,9 +3,13 @@ namespace eval ::Examples { variable dir variable doc variable examples_window + variable filter_entry + variable groups_of_examples + + variable _canvas_scroll } -proc ::Examples::Init { } { +proc Examples::Init { } { # Variable initialization variable dir variable examples_window @@ -19,9 +23,13 @@ proc ::Examples::Init { } { LoadMyFiles + variable filter_entry + set filter_entry "" + variable groups_of_examples + set groups_of_examples [dict create] } -proc ::Examples::LoadMyFiles { } { +proc Examples::LoadMyFiles { } { variable dir variable doc @@ -29,16 +37,16 @@ proc ::Examples::LoadMyFiles { } { set xmlfd [tDOM::xmlOpenFile [file join $dir xml examples.xml]] set doc [dom parse -channel $xmlfd] close $xmlfd + ResolveLinks } -proc ::Examples::StartWindow { } { - variable doc +proc Examples::StartWindow { {filter ""} } { variable examples_window + variable _canvas_scroll if { [GidUtils::IsTkDisabled] } { return 0 } - set root [$doc documentElement] spdAux::DestroyInitWindow Examples::DestroyExamplesWindow @@ -52,59 +60,119 @@ proc ::Examples::StartWindow { } { wm transient $examples_window .gid InitWindow $examples_window [_ "Kratos Multiphysics - Examples"] Kratos "" "" 1 - set initwind $examples_window + + spdAux::RegisterWindow $examples_window - set c_to_scroll [CreateScrolledCanvas $initwind.center] + set c_to_scroll [CreateScrolledCanvas $examples_window.center] set fcenter [tk::frame $c_to_scroll.fcenter] - AddToScrolledCanvas $initwind.center $fcenter - grid $initwind.center -sticky nsew + set _canvas_scroll $fcenter + AddToScrolledCanvas $examples_window.center $fcenter + grid $examples_window.center -sticky nsew - set groups [$root getElementsByTagName "Group"] - foreach group $groups { - set group_id [$group @id] - set group_name [$group @name] - #set title_frame [ttk::frame $examples_window.information_$group_id] - #grid [ttk::labelframe $examples_window.title_text$group_id -text $group_name] + set $Examples::filter_entry $filter + set filter_txt [ttk::label $fcenter.filter_text -text [_ "Search a test:"]] + set filter_ent [ttk::entry $fcenter.filter_entry -textvariable Examples::filter_entry] + set filter_btn [ttk::button $fcenter.filter_button -text "Filter" -command [list Examples::PrintGroups]] + grid $filter_txt $filter_ent $filter_btn -sticky ew + + set groups [GetGroupsFromXML] + PrintGroups + +} + +proc Examples::getImgFrom {group_name example_logo} { + return [apps::getImgFrom "Examples" [file join $group_name $example_logo]] +} + +proc Examples::PrintGroups { } { + variable groups_of_examples + variable examples_window + variable _canvas_scroll + variable filter_entry + + set filter $filter_entry + + foreach group_id [dict keys $groups_of_examples] { + set group [dict get $groups_of_examples $group_id] + set group_name [dict get $group name] - set parent [ttk::labelframe $fcenter.title_text$group_id -text $group_name] + if {[winfo exists $_canvas_scroll.title_text$group_id]} {destroy $_canvas_scroll.title_text$group_id} + set parent [ttk::labelframe $_canvas_scroll.title_text$group_id -text $group_name] set buttons_frame [ttk::frame $parent.buttonframe] - set examples [$group getElementsByTagName "Example"] set col 0 set row 0 - foreach example $examples { - set example_id [$example @id] - set example_name [subst -nocommands -novariables [$example @name]] - set example_logo [$example @logo] - set example_dim [$example @dim] - set example_app [$example @app] - set example_cmd [$example @cmd] - set img [Examples::getImgFrom $group_id $example_logo] - ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] - ttk::label $buttons_frame.text$example_id -text $example_name - grid $buttons_frame.img$example_id -column $col -row $row - grid $buttons_frame.text$example_id -column $col -row [expr $row +1] - - incr col - if {$col >= 7} {set col 0; incr row; incr row} + foreach example_id [dict keys [dict get $group examples]] { + set example [dict get $group examples $example_id] + if {[IsAproved $example $group_name $filter]} { + set example_name [subst -nocommands -novariables [dict get $example name]] + set example_logo [dict get $example logo] + set example_dim [dict get $example dim] + set example_app [dict get $example app] + set example_cmd [dict get $example cmd] + set img [Examples::getImgFrom $group_id $example_logo] + ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] + ttk::label $buttons_frame.text$example_id -text $example_name + grid $buttons_frame.img$example_id -column $col -row $row + grid $buttons_frame.text$example_id -column $col -row [expr $row +1] + + incr col + if {$col >= 7} {set col 0; incr row; incr row} + } + } + if {$col > 0 || $row > 0 } { + grid $parent -sticky ew -columnspan 3 + grid $buttons_frame + grid columnconfigure $parent 0 -weight 1 } - #grid $title_frame - grid $parent -sticky ew - grid $buttons_frame - grid columnconfigure $parent 0 -weight 1 } - grid columnconfigure $initwind 0 -weight 1 - grid rowconfigure $initwind 0 -weight 1 - wm minsize $initwind 900 500 - #wm maxsize $initwind 500 500 + grid columnconfigure $examples_window 0 -weight 1 + grid rowconfigure $examples_window 0 -weight 1 + wm minsize $examples_window 500 500 } -proc ::Examples::getImgFrom {group_name example_logo} { - - return [apps::getImgFrom "Examples" [file join $group_name $example_logo]] +proc Examples::IsAproved {example group filter} { + # if empty, no filter, go + if {$filter eq ""} {return 1} + set filter [string tolower $filter] + # filter by app id + set app_name [string tolower [dict get $example app]] + if {[string first $filter $app_name] > -1} {return 2} + # filter by app name + set group [string tolower $group] + if {[string first $filter $group] > -1} {return 3} + # filter by example name + set example_name [string tolower [dict get $example name]] + if {[string first $filter $example_name] > -1} {return 4} + + return 0 } -proc ::Examples::LaunchExample {example_app example_dim example_cmd} { +proc Examples::GetGroupsFromXML {} { + variable doc + variable groups_of_examples + + set root [$doc documentElement] + set groups [$root getElementsByTagName "Group"] + foreach group $groups { + set group_id [$group @id] + dict set groups_of_examples $group_id name [$group @name] + set examples [$group getElementsByTagName "Example"] + foreach example $examples { + set example_id [$example @id] + dict set groups_of_examples $group_id examples $example_id name [subst -nocommands -novariables [$example @name]] + dict set groups_of_examples $group_id examples $example_id logo [$example @logo] + dict set groups_of_examples $group_id examples $example_id dim [$example @dim] + dict set groups_of_examples $group_id examples $example_id app [$example @app] + dict set groups_of_examples $group_id examples $example_id cmd [$example @cmd] + } + } +} + + + + +proc Examples::LaunchExample {example_app example_dim example_cmd} { Examples::DestroyExamplesWindow spdAux::SetSpatialDimmension $example_dim apps::setActiveApp $example_app @@ -113,7 +181,7 @@ proc ::Examples::LaunchExample {example_app example_dim example_cmd} { } -proc ::Examples::DestroyExamplesWindow {} { +proc Examples::DestroyExamplesWindow {} { variable examples_window if { ![GidUtils::IsTkDisabled] } { @@ -121,5 +189,19 @@ proc ::Examples::DestroyExamplesWindow {} { } } +proc Examples::ResolveLinks { } { + variable doc + + set examples_node [$doc selectNodes "/Examples"] + foreach link [$examples_node getElementsByTagName link] { + catch { + set xmlfd [tDOM::xmlOpenFile [file join $::Kratos::kratos_private(Path) [$link @path]]] + set node [[dom parse -channel $xmlfd] getElementsByTagName Group] + close $xmlfd + $examples_node replaceChild $node $link + } + } + +} -::Examples::Init +Examples::Init diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 5692c5ef8..394097a4f 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -17,6 +17,8 @@ namespace eval spdAux { variable must_open_init_window variable must_open_dim_window + + variable list_of_windows } proc spdAux::Init { } { @@ -29,16 +31,19 @@ proc spdAux::Init { } { variable GroupsEdited variable must_open_init_window variable must_open_dim_window + variable list_of_windows set uniqueNames "" dict set uniqueNames "dummy" 0 set initwind "" - set currentexternalfile "" + set currentexternalfile "" set refreshTreeTurn 0 set TreeVisibility 0 set GroupsEdited [dict create] set must_open_init_window 1 set must_open_dim_window 1 + + set list_of_windows [list ] } proc spdAux::StartAsNewProject { } { @@ -173,10 +178,13 @@ proc spdAux::DestroyWindow {} { if { [GidUtils::IsTkDisabled] } { return 0 } - variable initwind - if {[winfo exists $initwind]} { - destroy $initwind + variable list_of_windows + foreach window $list_of_windows { + if {[winfo exists $window]} { + destroy $window + } } + set list_of_windows [list ] } # Routes @@ -439,5 +447,9 @@ proc spdAux::UpdateFileField { fileid domNode} { } } +proc spdAux::RegisterWindow {window_name} { + variable list_of_windows + lappend list_of_windows $window_name +} spdAux::Init From ccb6e58880997b6705d27297c80f51e17cd53561 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 20:12:38 +0100 Subject: [PATCH 092/556] Example images moved to apps --- .../images}/MokChannelWithFlexibleWall2D.png | Bin .../images}/MokChannelWithFlexibleWall3D.png | Bin .../images/FSI => FSI/images}/TurekBenchmark2D.png | Bin .../Fluid => Fluid/images}/CylinderInFlow2D.png | Bin .../Fluid => Fluid/images}/CylinderInFlow3D.png | Bin .../images}/EmbeddedCylinderInFlow3D.png | Bin .../Solid => Solid/images}/CircularTank2Da.png | Bin .../Solid => Solid/images}/CircularTank3D.png | Bin .../images/Solid => Solid/images}/DynamicBeam.png | Bin .../images/Solid => Solid/images}/DynamicRod2D.png | Bin .../images/Solid => Solid/images}/DynamicRod3D.png | Bin .../Solid => Solid/images}/EccentricColumn.png | Bin .../images/Solid => Solid/images}/NotchedBeam.png | Bin .../images}/TrussCantilever2D.png | Bin .../images}/TrussCantilever3D.png | Bin kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 4 ++-- 16 files changed, 2 insertions(+), 2 deletions(-) rename kratos.gid/apps/{Examples/images/FSI => FSI/images}/MokChannelWithFlexibleWall2D.png (100%) rename kratos.gid/apps/{Examples/images/FSI => FSI/images}/MokChannelWithFlexibleWall3D.png (100%) rename kratos.gid/apps/{Examples/images/FSI => FSI/images}/TurekBenchmark2D.png (100%) rename kratos.gid/apps/{Examples/images/Fluid => Fluid/images}/CylinderInFlow2D.png (100%) rename kratos.gid/apps/{Examples/images/Fluid => Fluid/images}/CylinderInFlow3D.png (100%) rename kratos.gid/apps/{Examples/images/Fluid => Fluid/images}/EmbeddedCylinderInFlow3D.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/CircularTank2Da.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/CircularTank3D.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/DynamicBeam.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/DynamicRod2D.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/DynamicRod3D.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/EccentricColumn.png (100%) rename kratos.gid/apps/{Examples/images/Solid => Solid/images}/NotchedBeam.png (100%) rename kratos.gid/apps/{Examples/images/Structural => Structural/images}/TrussCantilever2D.png (100%) rename kratos.gid/apps/{Examples/images/Structural => Structural/images}/TrussCantilever3D.png (100%) diff --git a/kratos.gid/apps/Examples/images/FSI/MokChannelWithFlexibleWall2D.png b/kratos.gid/apps/FSI/images/MokChannelWithFlexibleWall2D.png similarity index 100% rename from kratos.gid/apps/Examples/images/FSI/MokChannelWithFlexibleWall2D.png rename to kratos.gid/apps/FSI/images/MokChannelWithFlexibleWall2D.png diff --git a/kratos.gid/apps/Examples/images/FSI/MokChannelWithFlexibleWall3D.png b/kratos.gid/apps/FSI/images/MokChannelWithFlexibleWall3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/FSI/MokChannelWithFlexibleWall3D.png rename to kratos.gid/apps/FSI/images/MokChannelWithFlexibleWall3D.png diff --git a/kratos.gid/apps/Examples/images/FSI/TurekBenchmark2D.png b/kratos.gid/apps/FSI/images/TurekBenchmark2D.png similarity index 100% rename from kratos.gid/apps/Examples/images/FSI/TurekBenchmark2D.png rename to kratos.gid/apps/FSI/images/TurekBenchmark2D.png diff --git a/kratos.gid/apps/Examples/images/Fluid/CylinderInFlow2D.png b/kratos.gid/apps/Fluid/images/CylinderInFlow2D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Fluid/CylinderInFlow2D.png rename to kratos.gid/apps/Fluid/images/CylinderInFlow2D.png diff --git a/kratos.gid/apps/Examples/images/Fluid/CylinderInFlow3D.png b/kratos.gid/apps/Fluid/images/CylinderInFlow3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Fluid/CylinderInFlow3D.png rename to kratos.gid/apps/Fluid/images/CylinderInFlow3D.png diff --git a/kratos.gid/apps/Examples/images/Fluid/EmbeddedCylinderInFlow3D.png b/kratos.gid/apps/Fluid/images/EmbeddedCylinderInFlow3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Fluid/EmbeddedCylinderInFlow3D.png rename to kratos.gid/apps/Fluid/images/EmbeddedCylinderInFlow3D.png diff --git a/kratos.gid/apps/Examples/images/Solid/CircularTank2Da.png b/kratos.gid/apps/Solid/images/CircularTank2Da.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/CircularTank2Da.png rename to kratos.gid/apps/Solid/images/CircularTank2Da.png diff --git a/kratos.gid/apps/Examples/images/Solid/CircularTank3D.png b/kratos.gid/apps/Solid/images/CircularTank3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/CircularTank3D.png rename to kratos.gid/apps/Solid/images/CircularTank3D.png diff --git a/kratos.gid/apps/Examples/images/Solid/DynamicBeam.png b/kratos.gid/apps/Solid/images/DynamicBeam.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/DynamicBeam.png rename to kratos.gid/apps/Solid/images/DynamicBeam.png diff --git a/kratos.gid/apps/Examples/images/Solid/DynamicRod2D.png b/kratos.gid/apps/Solid/images/DynamicRod2D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/DynamicRod2D.png rename to kratos.gid/apps/Solid/images/DynamicRod2D.png diff --git a/kratos.gid/apps/Examples/images/Solid/DynamicRod3D.png b/kratos.gid/apps/Solid/images/DynamicRod3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/DynamicRod3D.png rename to kratos.gid/apps/Solid/images/DynamicRod3D.png diff --git a/kratos.gid/apps/Examples/images/Solid/EccentricColumn.png b/kratos.gid/apps/Solid/images/EccentricColumn.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/EccentricColumn.png rename to kratos.gid/apps/Solid/images/EccentricColumn.png diff --git a/kratos.gid/apps/Examples/images/Solid/NotchedBeam.png b/kratos.gid/apps/Solid/images/NotchedBeam.png similarity index 100% rename from kratos.gid/apps/Examples/images/Solid/NotchedBeam.png rename to kratos.gid/apps/Solid/images/NotchedBeam.png diff --git a/kratos.gid/apps/Examples/images/Structural/TrussCantilever2D.png b/kratos.gid/apps/Structural/images/TrussCantilever2D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Structural/TrussCantilever2D.png rename to kratos.gid/apps/Structural/images/TrussCantilever2D.png diff --git a/kratos.gid/apps/Examples/images/Structural/TrussCantilever3D.png b/kratos.gid/apps/Structural/images/TrussCantilever3D.png similarity index 100% rename from kratos.gid/apps/Examples/images/Structural/TrussCantilever3D.png rename to kratos.gid/apps/Structural/images/TrussCantilever3D.png diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 736df23f8..65630412f 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -81,7 +81,7 @@ proc Examples::StartWindow { {filter ""} } { } proc Examples::getImgFrom {group_name example_logo} { - return [apps::getImgFrom "Examples" [file join $group_name $example_logo]] + return [apps::getImgFrom $group_name $example_logo] } proc Examples::PrintGroups { } { @@ -109,7 +109,7 @@ proc Examples::PrintGroups { } { set example_dim [dict get $example dim] set example_app [dict get $example app] set example_cmd [dict get $example cmd] - set img [Examples::getImgFrom $group_id $example_logo] + set img [Examples::getImgFrom $example_app $example_logo] ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] ttk::label $buttons_frame.text$example_id -text $example_name grid $buttons_frame.img$example_id -column $col -row $row From fbc68380cbc0cd7978f7190287eeb9cf18dfb587 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 20:15:17 +0100 Subject: [PATCH 093/556] examples moved to xml files in apps --- kratos.gid/apps/Examples/xml/examples.xml | 11 ++--------- kratos.gid/apps/FSI/examples/examples.xml | 6 ++++++ kratos.gid/apps/Structural/examples/examples.xml | 6 ++++++ 3 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 kratos.gid/apps/FSI/examples/examples.xml create mode 100644 kratos.gid/apps/Structural/examples/examples.xml diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 84732aad8..b787cdb9e 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -2,13 +2,6 @@ - - - - - - - - - + + diff --git a/kratos.gid/apps/FSI/examples/examples.xml b/kratos.gid/apps/FSI/examples/examples.xml new file mode 100644 index 000000000..bde5f1d95 --- /dev/null +++ b/kratos.gid/apps/FSI/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Structural/examples/examples.xml b/kratos.gid/apps/Structural/examples/examples.xml new file mode 100644 index 000000000..16a04a897 --- /dev/null +++ b/kratos.gid/apps/Structural/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 968d16b132e2e82f8ec9c99534f2b623a001aebf Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 21:08:50 +0100 Subject: [PATCH 094/556] More examples --- kratos.gid/apps/Buoyancy/examples/examples.tcl | 6 +----- kratos.gid/apps/Buoyancy/examples/examples.xml | 4 ++++ kratos.gid/apps/CDEM/examples/examples.tcl | 6 ------ kratos.gid/apps/CDEM/examples/examples.xml | 5 +++++ .../apps/ConjugateHeatTransfer/examples/examples.tcl | 8 -------- .../apps/ConjugateHeatTransfer/examples/examples.xml | 6 ++++++ .../apps/ConvectionDiffusion/examples/examples.tcl | 9 --------- .../apps/ConvectionDiffusion/examples/examples.xml | 4 ++++ kratos.gid/apps/Dam/examples/examples.tcl | 3 --- kratos.gid/apps/Dam/examples/examples.xml | 5 +++++ kratos.gid/apps/Examples/xml/examples.xml | 5 +++++ kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 2 +- 12 files changed, 31 insertions(+), 32 deletions(-) create mode 100644 kratos.gid/apps/Buoyancy/examples/examples.xml create mode 100644 kratos.gid/apps/CDEM/examples/examples.xml create mode 100644 kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml create mode 100644 kratos.gid/apps/ConvectionDiffusion/examples/examples.xml create mode 100644 kratos.gid/apps/Dam/examples/examples.xml diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index 409c5dbf5..c88b1adca 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -7,11 +7,7 @@ proc Buoyancy::examples::Init { } { } proc Buoyancy::examples::UpdateMenus { } { - if {$::Model::SpatialDimension eq "2D"} { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Heated square" ] 8 PRE [list ::Buoyancy::examples::HeatedSquare] "" "" insertafter = - GiDMenu::UpdateMenus - } + } Buoyancy::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/examples/examples.xml b/kratos.gid/apps/Buoyancy/examples/examples.xml new file mode 100644 index 000000000..03051d3d8 --- /dev/null +++ b/kratos.gid/apps/Buoyancy/examples/examples.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/examples/examples.tcl b/kratos.gid/apps/CDEM/examples/examples.tcl index 72ee4ba92..4afc28d62 100644 --- a/kratos.gid/apps/CDEM/examples/examples.tcl +++ b/kratos.gid/apps/CDEM/examples/examples.tcl @@ -9,12 +9,6 @@ proc CDEM::examples::Init { } { proc CDEM::examples::UpdateMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - if {$::Model::SpatialDimension eq "2D"} { - GiDMenu::InsertOption "Kratos" [list "Stone block and sand" ] 8 PRE [list ::CDEM::examples::ContinuumDrop2D] "" "" insertafter = - } - if {$::Model::SpatialDimension eq "3D"} { - GiDMenu::InsertOption "Kratos" [list "Stone block and sand" ] 8 PRE [list ::CDEM::examples::ContSpheresDrop3D] "" "" insertafter = - } GiDMenu::InsertOption "Kratos" [list "Bulk groups" ] 8 PRE [list ::CDEM::xml::BulkGroup] "" "" insertafter = GiDMenu::UpdateMenus } diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml new file mode 100644 index 000000000..f7d5cb948 --- /dev/null +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl index 4691a7fa4..f0dc9f04b 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl @@ -8,12 +8,4 @@ proc ConjugateHeatTransfer::examples::Init { } { uplevel #0 [list source [file join $::ConjugateHeatTransfer::dir examples BFS.tcl]] } -proc ConjugateHeatTransfer::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Heated square" ] 8 PRE [list ::ConjugateHeatTransfer::examples::HeatedSquare] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Cylinder cooling" ] 8 PRE [list ::ConjugateHeatTransfer::examples::CylinderCooling] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "BFS" ] 8 PRE [list ::ConjugateHeatTransfer::examples::BFS] "" "" insertafter = - GiDMenu::UpdateMenus -} - ConjugateHeatTransfer::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml new file mode 100644 index 000000000..1d6481038 --- /dev/null +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl index e46658a79..d56503911 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl @@ -4,15 +4,6 @@ namespace eval ConvectionDiffusion::examples { proc ConvectionDiffusion::examples::Init { } { uplevel #0 [list source [file join $::ConvectionDiffusion::dir examples HeatedSquare.tcl]] - #uplevel #0 [list source [file join $::FSI::dir examples HorizontalFlexibleBar.tcl]] -} - -proc ConvectionDiffusion::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - if {$::Model::SpatialDimension eq "2D"} { - GiDMenu::InsertOption "Kratos" [list "Cylinder in air flow" ] 8 PRE [list ::ConvectionDiffusion::examples::HeatedSquare] "" "" insertafter = - } - GiDMenu::UpdateMenus } ConvectionDiffusion::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml new file mode 100644 index 000000000..5f6bca90a --- /dev/null +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Dam/examples/examples.tcl b/kratos.gid/apps/Dam/examples/examples.tcl index 7f9e4ac53..9601b2ef7 100644 --- a/kratos.gid/apps/Dam/examples/examples.tcl +++ b/kratos.gid/apps/Dam/examples/examples.tcl @@ -5,9 +5,6 @@ namespace eval Dam::examples { proc Dam::examples::Init { } { uplevel #0 [list source [file join $::Dam::dir examples ThermoMechaDam2D.tcl]] uplevel #0 [list source [file join $::Dam::dir examples ThermoMechaDam3D.tcl]] - GiDMenu::InsertOption "Kratos" [list "---"] 6 PRE "" "" "" replace = - GiDMenu::InsertOption "Kratos" [list "Thermo-Mechanical Dam" ] 7 PRE [list ::Dam::examples::ThermoMechaDam] "" "" replace = - GiDMenu::UpdateMenus } proc ::Dam::examples::ThermoMechaDam { } { diff --git a/kratos.gid/apps/Dam/examples/examples.xml b/kratos.gid/apps/Dam/examples/examples.xml new file mode 100644 index 000000000..5f7f25bde --- /dev/null +++ b/kratos.gid/apps/Dam/examples/examples.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index b787cdb9e..35d0775aa 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -4,4 +4,9 @@ + + + + + diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 65630412f..12d3beb76 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -128,7 +128,7 @@ proc Examples::PrintGroups { } { grid columnconfigure $examples_window 0 -weight 1 grid rowconfigure $examples_window 0 -weight 1 - wm minsize $examples_window 500 500 + wm minsize $examples_window 750 500 } proc Examples::IsAproved {example group filter} { From 2d0cbdc82ca6092847a90b184f931f0f45b7f3a9 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 16 Nov 2020 21:38:26 +0100 Subject: [PATCH 095/556] more examples --- kratos.gid/apps/DEM/examples/examples.tcl | 7 +------ kratos.gid/apps/DEM/examples/examples.xml | 5 +++++ kratos.gid/apps/DEMPFEM/examples/examples.xml | 9 +++++++++ kratos.gid/apps/Examples/xml/examples.xml | 2 ++ kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 8 ++++++-- 5 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 kratos.gid/apps/DEM/examples/examples.xml create mode 100644 kratos.gid/apps/DEMPFEM/examples/examples.xml diff --git a/kratos.gid/apps/DEM/examples/examples.tcl b/kratos.gid/apps/DEM/examples/examples.tcl index cd64a1d24..27e0f8072 100644 --- a/kratos.gid/apps/DEM/examples/examples.tcl +++ b/kratos.gid/apps/DEM/examples/examples.tcl @@ -8,12 +8,7 @@ proc DEM::examples::Init { } { } proc DEM::examples::UpdateMenus { } { - if {$::Model::SpatialDimension eq "3D"} { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Spheres drop" ] 8 PRE [list ::DEM::examples::SpheresDrop] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Circles drop" ] 8 PRE [list ::DEM::examples::CirclesDrop] "" "" insertafter = - } - GiDMenu::UpdateMenus + } DEM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/examples.xml b/kratos.gid/apps/DEM/examples/examples.xml new file mode 100644 index 000000000..3c53e1820 --- /dev/null +++ b/kratos.gid/apps/DEM/examples/examples.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.xml b/kratos.gid/apps/DEMPFEM/examples/examples.xml new file mode 100644 index 000000000..0bc785d2f --- /dev/null +++ b/kratos.gid/apps/DEMPFEM/examples/examples.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 35d0775aa..fa2445a11 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -8,5 +8,7 @@ + + diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 12d3beb76..f732a7433 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -156,6 +156,7 @@ proc Examples::GetGroupsFromXML {} { set groups [$root getElementsByTagName "Group"] foreach group $groups { set group_id [$group @id] + W $group_id dict set groups_of_examples $group_id name [$group @name] set examples [$group getElementsByTagName "Example"] foreach example $examples { @@ -196,9 +197,12 @@ proc Examples::ResolveLinks { } { foreach link [$examples_node getElementsByTagName link] { catch { set xmlfd [tDOM::xmlOpenFile [file join $::Kratos::kratos_private(Path) [$link @path]]] - set node [[dom parse -channel $xmlfd] getElementsByTagName Group] + set nodes [[dom parse -channel $xmlfd] getElementsByTagName Group] close $xmlfd - $examples_node replaceChild $node $link + foreach node $nodes { + $examples_node insertBefore $node $link + } + $link delete } } From bea0c2d6fce7459096f4175440607ccd24a03388 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 00:14:44 +0100 Subject: [PATCH 096/556] More examples --- .../apps/EmbeddedFluid/examples/examples.tcl | 3 --- .../apps/EmbeddedFluid/examples/examples.xml | 6 +++++ kratos.gid/apps/Examples/xml/examples.xml | 3 +++ kratos.gid/apps/FSI/examples/examples.xml | 22 ++++++++++++++----- kratos.gid/apps/Fluid/examples/examples.tcl | 4 ---- .../apps/FluidDEM/examples/examples.tcl | 3 --- .../apps/FluidDEM/examples/examples.xml | 11 ++++++++++ kratos.gid/apps/MPM/examples/examples.tcl | 3 --- kratos.gid/apps/MPM/examples/examples.xml | 4 ++++ .../scripts/Controllers/ExamplesWindow.tcl | 7 +++--- 10 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 kratos.gid/apps/EmbeddedFluid/examples/examples.xml create mode 100644 kratos.gid/apps/FluidDEM/examples/examples.xml create mode 100644 kratos.gid/apps/MPM/examples/examples.xml diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl index a352a7266..727e81cae 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl @@ -7,9 +7,6 @@ proc EmbeddedFluid::examples::Init { } { } proc EmbeddedFluid::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Embedded cylinder test" ] 8 PRE [list ::EmbeddedFluid::examples::CylinderInFlow] "" "" insertafter = - GiDMenu::UpdateMenus } EmbeddedFluid::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml new file mode 100644 index 000000000..837b3ec0a --- /dev/null +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index fa2445a11..c23244b42 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -11,4 +11,7 @@ + + + diff --git a/kratos.gid/apps/FSI/examples/examples.xml b/kratos.gid/apps/FSI/examples/examples.xml index bde5f1d95..35bef85c0 100644 --- a/kratos.gid/apps/FSI/examples/examples.xml +++ b/kratos.gid/apps/FSI/examples/examples.xml @@ -1,6 +1,18 @@ - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/examples/examples.tcl b/kratos.gid/apps/Fluid/examples/examples.tcl index c99d8c7c8..630d34653 100644 --- a/kratos.gid/apps/Fluid/examples/examples.tcl +++ b/kratos.gid/apps/Fluid/examples/examples.tcl @@ -8,10 +8,6 @@ proc Fluid::examples::Init { } { } proc Fluid::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Cylinder in air flow" ] 7 PRE [list ::Fluid::examples::CylinderInFlow] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "High-rise building" ] 7 PRE [list ::Fluid::examples::HighRiseBuilding] "" "" insertafter = - GiDMenu::UpdateMenus } Fluid::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.tcl b/kratos.gid/apps/FluidDEM/examples/examples.tcl index c9d26f0bd..530515d52 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.tcl +++ b/kratos.gid/apps/FluidDEM/examples/examples.tcl @@ -7,9 +7,6 @@ proc FluidDEM::examples::Init { } { } proc FluidDEM::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "FluidDEM CylinderInFlow" ] 8 PRE [list ::FluidDEM::examples::CylinderInFlow] "" "" insertafter = - GiDMenu::UpdateMenus } FluidDEM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.xml b/kratos.gid/apps/FluidDEM/examples/examples.xml new file mode 100644 index 000000000..5cbee90e9 --- /dev/null +++ b/kratos.gid/apps/FluidDEM/examples/examples.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/MPM/examples/examples.tcl b/kratos.gid/apps/MPM/examples/examples.tcl index 5a8c20f67..cd75c8f07 100644 --- a/kratos.gid/apps/MPM/examples/examples.tcl +++ b/kratos.gid/apps/MPM/examples/examples.tcl @@ -7,9 +7,6 @@ proc MPM::examples::Init { } { } proc MPM::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Falling sand ball" ] 7 PRE [list ::MPM::examples::FallingSandBall] "" "" insertafter = - GiDMenu::UpdateMenus } MPM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/MPM/examples/examples.xml b/kratos.gid/apps/MPM/examples/examples.xml new file mode 100644 index 000000000..757d99712 --- /dev/null +++ b/kratos.gid/apps/MPM/examples/examples.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index f732a7433..be564be31 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -70,7 +70,7 @@ proc Examples::StartWindow { {filter ""} } { grid $examples_window.center -sticky nsew set $Examples::filter_entry $filter - set filter_txt [ttk::label $fcenter.filter_text -text [_ "Search a test:"]] + set filter_txt [ttk::label $fcenter.filter_text -text [_ "Search an example:"]] set filter_ent [ttk::entry $fcenter.filter_entry -textvariable Examples::filter_entry] set filter_btn [ttk::button $fcenter.filter_button -text "Filter" -command [list Examples::PrintGroups]] grid $filter_txt $filter_ent $filter_btn -sticky ew @@ -116,7 +116,7 @@ proc Examples::PrintGroups { } { grid $buttons_frame.text$example_id -column $col -row [expr $row +1] incr col - if {$col >= 7} {set col 0; incr row; incr row} + if {$col >= 5} {set col 0; incr row; incr row} } } if {$col > 0 || $row > 0 } { @@ -156,8 +156,7 @@ proc Examples::GetGroupsFromXML {} { set groups [$root getElementsByTagName "Group"] foreach group $groups { set group_id [$group @id] - W $group_id - dict set groups_of_examples $group_id name [$group @name] + if {[$group hasAttribute name]} {dict set groups_of_examples $group_id name [$group @name]} set examples [$group getElementsByTagName "Example"] foreach example $examples { set example_id [$example @id] From 5a483cd7758b96d630c9ba5869530dec1086c31d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 00:33:36 +0100 Subject: [PATCH 097/556] More examples :) --- kratos.gid/apps/Examples/xml/examples.xml | 1 + kratos.gid/apps/PfemFluid/examples/examples.tcl | 4 ---- kratos.gid/apps/PfemFluid/examples/examples.xml | 5 +++++ kratos.gid/apps/Structural/examples/examples.tcl | 8 -------- kratos.gid/apps/Structural/examples/examples.xml | 3 +++ 5 files changed, 9 insertions(+), 12 deletions(-) create mode 100644 kratos.gid/apps/PfemFluid/examples/examples.xml diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index c23244b42..b46bb979d 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -14,4 +14,5 @@ + diff --git a/kratos.gid/apps/PfemFluid/examples/examples.tcl b/kratos.gid/apps/PfemFluid/examples/examples.tcl index 0b266fc51..f9e15e098 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.tcl +++ b/kratos.gid/apps/PfemFluid/examples/examples.tcl @@ -8,10 +8,6 @@ proc PfemFluid::examples::Init { } { } proc PfemFluid::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Water dam break" ] 7 PRE [list ::PfemFluid::examples::WaterDamBreak] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Dam break FSI" ] 7 PRE [list ::PfemFluid::examples::DamBreakFSI] "" "" insertafter = - GiDMenu::UpdateMenus } PfemFluid::examples::Init diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml new file mode 100644 index 000000000..5e465015f --- /dev/null +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Structural/examples/examples.tcl b/kratos.gid/apps/Structural/examples/examples.tcl index f428c82ae..3dfcd42e1 100644 --- a/kratos.gid/apps/Structural/examples/examples.tcl +++ b/kratos.gid/apps/Structural/examples/examples.tcl @@ -9,14 +9,6 @@ proc Structural::examples::Init { } { } proc Structural::examples::UpdateMenus { } { - set menu_id 7 - GiDMenu::InsertOption "Kratos" [list "Truss cantilever" ] [incr menu_id] PRE [list ::Structural::examples::TrussCantilever] "" "" insertbefore = - if {$::Model::SpatialDimension eq "2D"} { - GiDMenu::InsertOption "Kratos" [list "High-rise building" ] [incr menu_id] PRE [list ::Structural::examples::HighRiseBuilding] "" "" insertbefore = - } - GiDMenu::InsertOption "Kratos" [list "Incompressible Cook membrane" ] [incr menu_id] PRE [list ::Structural::examples::IncompressibleCookMembrane] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "---"] [incr menu_id] PRE "" "" "" insertbefore = - GiDMenu::UpdateMenus } Structural::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/Structural/examples/examples.xml b/kratos.gid/apps/Structural/examples/examples.xml index 16a04a897..8ef31240e 100644 --- a/kratos.gid/apps/Structural/examples/examples.xml +++ b/kratos.gid/apps/Structural/examples/examples.xml @@ -1,6 +1,9 @@ + + + \ No newline at end of file From 18a484c2ca8a0ecb7f7eaf03215cdc5ff8ffd813 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 01:48:32 +0100 Subject: [PATCH 098/556] more examples... and some fixing in the window names --- .../apps/Buoyancy/examples/examples.tcl | 3 - kratos.gid/apps/Buoyancy/start.tcl | 7 +- kratos.gid/apps/DEMLauncher/start.tcl | 7 +- .../apps/EmbeddedFluid/examples/examples.xml | 4 +- .../images/EmbeddedCylinderInFlow3D.png | Bin kratos.gid/apps/Examples/xml/examples.xml | 7 +- .../apps/Fluid/images/HighRiseBuilding2D.png | Bin 0 -> 4970 bytes kratos.gid/apps/FluidLauncher/start.tcl | 5 +- kratos.gid/apps/PfemLauncher/start.tcl | 8 +- .../apps/PotentialFluid/examples/examples.tcl | 6 - .../apps/PotentialFluid/examples/examples.xml | 5 + .../apps/PotentialFluid/images/NACA0012.png | Bin 0 -> 2556 bytes kratos.gid/apps/ThermicLauncher/start.tcl | 7 +- kratos.gid/images/losta.png | Bin 0 -> 2151 bytes .../Controllers/ApplicationMarketWindow.tcl | 162 +++++++++--------- .../scripts/Controllers/ExamplesWindow.tcl | 3 +- kratos.gid/scripts/Utils.tcl | 2 +- kratos.gid/scripts/spdAuxiliar.tcl | 2 +- 18 files changed, 111 insertions(+), 117 deletions(-) rename kratos.gid/apps/{Fluid => EmbeddedFluid}/images/EmbeddedCylinderInFlow3D.png (100%) create mode 100644 kratos.gid/apps/Fluid/images/HighRiseBuilding2D.png create mode 100644 kratos.gid/apps/PotentialFluid/examples/examples.xml create mode 100644 kratos.gid/apps/PotentialFluid/images/NACA0012.png create mode 100644 kratos.gid/images/losta.png diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index c88b1adca..e2f1b5ef9 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -6,8 +6,5 @@ proc Buoyancy::examples::Init { } { uplevel #0 [list source [file join $::Buoyancy::dir examples HeatedSquare.tcl]] } -proc Buoyancy::examples::UpdateMenus { } { - -} Buoyancy::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index efaac2fa2..1ac5379d3 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -58,10 +58,9 @@ proc ::Buoyancy::GetAttribute {name} { proc ::Buoyancy::CustomToolbarItems { } { variable dir - - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Buoyancy::examples::HeatedSquare] [= "Example\nBuoyancy driven cavity flow (Ra = 1e6 - Pr = 0.71)"] - } + + Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow Buoyancy] [= "Examples window"] + } ::Buoyancy::Init diff --git a/kratos.gid/apps/DEMLauncher/start.tcl b/kratos.gid/apps/DEMLauncher/start.tcl index 998b73de2..6aa2b55d0 100644 --- a/kratos.gid/apps/DEMLauncher/start.tcl +++ b/kratos.gid/apps/DEMLauncher/start.tcl @@ -27,10 +27,9 @@ proc ::DemLauncher::AppSelectorWindow { } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait set dir $::Kratos::kratos_private(Path) - set initwind .gid.win_example - if { [ winfo exist $initwind]} { - destroy $initwind - } + set initwind .gid.win_dem_launcher + spdAux::DestroyWindows + spdAux::RegisterWindow $initwind toplevel $initwind wm withdraw $initwind diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml index 837b3ec0a..5b0ca2ea5 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -1,6 +1,4 @@ - - - + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/images/EmbeddedCylinderInFlow3D.png b/kratos.gid/apps/EmbeddedFluid/images/EmbeddedCylinderInFlow3D.png similarity index 100% rename from kratos.gid/apps/Fluid/images/EmbeddedCylinderInFlow3D.png rename to kratos.gid/apps/EmbeddedFluid/images/EmbeddedCylinderInFlow3D.png diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index b46bb979d..1a7e6b6ae 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -1,17 +1,22 @@ + + + - + + + diff --git a/kratos.gid/apps/Fluid/images/HighRiseBuilding2D.png b/kratos.gid/apps/Fluid/images/HighRiseBuilding2D.png new file mode 100644 index 0000000000000000000000000000000000000000..74982cb6dd1605dc1ff1f8d348621f37d1b085b9 GIT binary patch literal 4970 zcmb_gXEz%F7dDF^R)yM%+M}&ev5J~SYsa1`sZqN|ZDPmXN)c&o(i){ksiHAGk zGV*^!>TjZ>LDDeJwfRp_xTzbelaMs0(_T1H{?jx*x>o)qB*6avf^_i3yMN`(*LsiC z&4TT>i^58B%|8xCMny$exGz2psh1dYVUs(6SPwpKGtILbn^aB+7+sBbDboM5{ita6 zA=4Bc%O@l|%>JokXhHyq@khM{C)(5~0GN*LBLVwl=}6+(n*n&Rsp54NHoJaC_&!?t zvIlRqbQC6q#|exKs;T%vZfOI>`-hyM?22`C0tvZJYfbl3xh&wB{oiE%U&%@V$m2Ut z?99}fGmOOMb2QFPa=UDG-{yMd%@Z`hZ5dJ`NLse46gFi1N0^g^bwMTwg^Cx2Ihj}o zt4bmvn*5g@{Nd#pe#GJ5oc=vtsS0P96xEPQhwpDW04x`(3u$3~>zk@0o@L(UoWS-m z|HwZ%xPFx7S?Yk|+|N(VEGYvk78G7OI!&Q-wCHB^o_95&4Xp Ff-z>L%RA3ZYq` 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 + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/images/NACA0012.png b/kratos.gid/apps/PotentialFluid/images/NACA0012.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c8ef3c71792421845a997ec2c521a759a58c32 GIT binary patch literal 2556 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index 32823dcdd..2dfcb7970 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -1,71 +1,4 @@ -proc spdAux::reactiveApp { } { - #W "Reactive" - variable initwind - if { ![GidUtils::IsTkDisabled] } { - if { [winfo exists $initwind] } { - destroy $initwind - } - } - set root [customlib::GetBaseRoot] - set ::Model::SpatialDimension [[$root selectNodes "value\[@n='nDim'\]"] getAttribute v ] - set appname [[$root selectNodes "hiddenfield\[@n='activeapp'\]"] @v ] - - apps::setActiveApp $appname -} - -proc spdAux::deactiveApp { appid } { - - set root [customlib::GetBaseRoot] - [$root selectNodes "hiddenfield\[@n='activeapp'\]"] setAttribute v "" - foreach elem [$root getElementsByTagName "appLink"] { - if {$appid eq [$elem getAttribute "appid"] && [$elem getAttribute "active"] eq "1"} { - $elem setAttribute "active" 0 - break - } - } -} -proc spdAux::activeApp { appid } { - #W "Active $appid" - variable initwind - catch { - set root [customlib::GetBaseRoot] - [$root selectNodes "hiddenfield\[@n='activeapp'\]"] setAttribute v $appid - foreach elem [$root getElementsByTagName "appLink"] { - if {$appid eq [$elem getAttribute "appid"] && [$elem getAttribute "active"] eq "0"} { - $elem setAttribute "active" 1 - set must_open_init_window 0 - } else { - $elem setAttribute "active" 0 - } - } - } - - set nd [$root selectNodes "value\[@n='nDim'\]"] - if {[$nd getAttribute v] ne "wait"} { - if {[$nd getAttribute v] ne "undefined"} { - set ::Model::SpatialDimension [$nd getAttribute v] - spdAux::SwitchDimAndCreateWindow $::Model::SpatialDimension - spdAux::TryRefreshTree - } { - ::spdAux::CreateDimensionWindow - } - } -} - -proc spdAux::SetActiveAppFromDOM { } { - set activeapp_dom "" - set root [customlib::GetBaseRoot] - set activeapp_node [$root selectNodes "//hiddenfield\[@n='activeapp'\]"] - if {$activeapp_node ne ""} { - set activeapp_dom [get_domnode_attribute $activeapp_node v] - if { $activeapp_dom != "" } { - apps::setActiveApp $activeapp_dom - } - } - return $activeapp_dom -} - proc spdAux::CreateWindow {} { variable initwind variable must_open_init_window @@ -81,13 +14,14 @@ proc spdAux::CreateWindow {} { # If we have an active app, dont open this window if {[apps::getActiveApp] ne ""} {return ""} + + # Window creation + set w .gid.win_app_selection + set initwind $w # Close everything else gid_groups_conds::close_all_windows spdAux::DestroyInitWindow - if {[winfo exist .gid.win_example]} {destroy .gid.win_example} - - # Window creation - set w .gid.win_example + if {[winfo exist $initwind]} {destroy $initwind} toplevel $w wm withdraw $w set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] @@ -96,11 +30,10 @@ proc spdAux::CreateWindow {} { wm transient $w .gid InitWindow $w [_ "Kratos Multiphysics - Application market"] Kratos "" "" 1 - set initwind $w + ttk::frame $w.top spdAux::RegisterWindow $initwind - # ttk::label $w.top.title_text -text [_ " Application market"] - + # List of applications -> by family ttk::labelframe $w.information -text " Applications " -relief ridge @@ -181,12 +114,11 @@ proc spdAux::DestroyInitWindow { } { } proc spdAux::CreateDimensionWindow { } { - #package require anigif 1.3 - variable initwind variable must_open_dim_window if {$must_open_dim_window == 0} {return ""} - + + spdAux::DestroyWindows set root [customlib::GetBaseRoot] set nd [ [$root selectNodes "value\[@n='nDim'\]"] getAttribute v] @@ -201,7 +133,7 @@ proc spdAux::CreateDimensionWindow { } { } set dir $::Kratos::kratos_private(Path) - set initwind .gid.win_example + set initwind .gid.win_dimension if { [ winfo exist $initwind]} { destroy $initwind } @@ -218,7 +150,7 @@ proc spdAux::CreateDimensionWindow { } { InitWindow $w [_ "Kratos Multiphysics"] Kratos "" "" 1 set initwind $w - spdAux::RegisterWindow $examples_window + spdAux::RegisterWindow $initwind ttk::frame $w.top ttk::label $w.top.title_text -text [_ " Dimension selection"] @@ -253,9 +185,8 @@ proc spdAux::SetSpatialDimmension {ndim} { proc spdAux::SwitchDimAndCreateWindow { ndim } { variable TreeVisibility - SetSpatialDimmension $ndim - spdAux::DestroyWindow + spdAux::DestroyWindows processIncludes parseRoutes @@ -275,4 +206,71 @@ proc spdAux::SwitchDimAndCreateWindow { ndim } { } ::Kratos::CreatePreprocessModelTBar ::Kratos::UpdateMenus -} \ No newline at end of file +} + + +proc spdAux::reactiveApp { } { + #W "Reactive" + variable initwind + if { ![GidUtils::IsTkDisabled] } { + if { [winfo exists $initwind] } { + destroy $initwind + } + } + set root [customlib::GetBaseRoot] + set ::Model::SpatialDimension [[$root selectNodes "value\[@n='nDim'\]"] getAttribute v ] + set appname [[$root selectNodes "hiddenfield\[@n='activeapp'\]"] @v ] + + apps::setActiveApp $appname +} + +proc spdAux::deactiveApp { appid } { + + set root [customlib::GetBaseRoot] + [$root selectNodes "hiddenfield\[@n='activeapp'\]"] setAttribute v "" + foreach elem [$root getElementsByTagName "appLink"] { + if {$appid eq [$elem getAttribute "appid"] && [$elem getAttribute "active"] eq "1"} { + $elem setAttribute "active" 0 + break + } + } +} +proc spdAux::activeApp { appid } { + #W "Active $appid" + catch { + set root [customlib::GetBaseRoot] + [$root selectNodes "hiddenfield\[@n='activeapp'\]"] setAttribute v $appid + foreach elem [$root getElementsByTagName "appLink"] { + if {$appid eq [$elem getAttribute "appid"] && [$elem getAttribute "active"] eq "0"} { + $elem setAttribute "active" 1 + set must_open_init_window 0 + } else { + $elem setAttribute "active" 0 + } + } + } + + set nd [$root selectNodes "value\[@n='nDim'\]"] + if {[$nd getAttribute v] ne "wait"} { + if {[$nd getAttribute v] ne "undefined"} { + set ::Model::SpatialDimension [$nd getAttribute v] + spdAux::SwitchDimAndCreateWindow $::Model::SpatialDimension + spdAux::TryRefreshTree + } { + ::spdAux::CreateDimensionWindow + } + } +} + +proc spdAux::SetActiveAppFromDOM { } { + set activeapp_dom "" + set root [customlib::GetBaseRoot] + set activeapp_node [$root selectNodes "//hiddenfield\[@n='activeapp'\]"] + if {$activeapp_node ne ""} { + set activeapp_dom [get_domnode_attribute $activeapp_node v] + if { $activeapp_dom != "" } { + apps::setActiveApp $activeapp_dom + } + } + return $activeapp_dom +} diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index be564be31..94d4f3769 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -19,7 +19,6 @@ proc Examples::Init { } { # Don't open the tree set ::spdAux::TreeVisibility 0 - set ::spdAux::must_open_dim_window 0 LoadMyFiles @@ -44,6 +43,8 @@ proc Examples::StartWindow { {filter ""} } { variable examples_window variable _canvas_scroll + set ::spdAux::must_open_dim_window 0 + if { [GidUtils::IsTkDisabled] } { return 0 } diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 8e8a53f85..46ad25b55 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -15,7 +15,7 @@ proc Kratos::ForceRun { } { proc Kratos::DestroyWindows { } { gid_groups_conds::close_all_windows - spdAux::DestroyWindow + spdAux::DestroyWindows if {[info exists ::Kratos::kratos_private(UseWizard)] && $::Kratos::kratos_private(UseWizard)} { smart_wizard::DestroyWindow } diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 394097a4f..00629e1e9 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -174,7 +174,7 @@ proc spdAux::getImagePathDim { dim } { set imagepath [file nativename [file join $::Model::dir images "$dim.png"] ] return $imagepath } -proc spdAux::DestroyWindow {} { +proc spdAux::DestroyWindows {} { if { [GidUtils::IsTkDisabled] } { return 0 } From c6c35aba240b192c4f0f82a7b2c9fd4c205b5c8e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 02:22:50 +0100 Subject: [PATCH 099/556] Images an naming --- kratos.gid/apps/Buoyancy/examples/examples.xml | 2 +- kratos.gid/apps/CDEM/examples/examples.xml | 4 ++-- .../ConvectionDiffusion/examples/examples.xml | 2 +- kratos.gid/apps/Dam/examples/examples.xml | 4 ++-- .../apps/EmbeddedFluid/examples/examples.xml | 2 +- kratos.gid/apps/FluidDEM/examples/examples.xml | 4 ++-- kratos.gid/apps/FluidDEM/xml/XmlController.tcl | 7 +++---- kratos.gid/apps/Structural/examples/examples.xml | 4 ++-- .../Structural/images/HighRiseBuilding2D.png | Bin 0 -> 873 bytes .../images/IncompressibleCookMembrane2D.png | Bin 0 -> 1356 bytes .../images/IncompressibleCookMembrane3D.png | Bin 0 -> 1308 bytes .../scripts/Controllers/ExamplesWindow.tcl | 8 +++++--- 12 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 kratos.gid/apps/Structural/images/HighRiseBuilding2D.png create mode 100644 kratos.gid/apps/Structural/images/IncompressibleCookMembrane2D.png create mode 100644 kratos.gid/apps/Structural/images/IncompressibleCookMembrane3D.png diff --git a/kratos.gid/apps/Buoyancy/examples/examples.xml b/kratos.gid/apps/Buoyancy/examples/examples.xml index 03051d3d8..e4c6047ac 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.xml +++ b/kratos.gid/apps/Buoyancy/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml index f7d5cb948..30ac472fb 100644 --- a/kratos.gid/apps/CDEM/examples/examples.xml +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml index 5f6bca90a..5006c6e8a 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/Dam/examples/examples.xml b/kratos.gid/apps/Dam/examples/examples.xml index 5f7f25bde..84c42ebf6 100644 --- a/kratos.gid/apps/Dam/examples/examples.xml +++ b/kratos.gid/apps/Dam/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml index 5b0ca2ea5..7f4070aa6 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.xml b/kratos.gid/apps/FluidDEM/examples/examples.xml index 5cbee90e9..234ef29d0 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.xml +++ b/kratos.gid/apps/FluidDEM/examples/examples.xml @@ -1,11 +1,11 @@ - + - + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl index b17f4f54c..80335781a 100644 --- a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl @@ -25,12 +25,11 @@ proc FluidDEM::xml::Init { } { # Change the inlet injector element type set inlet_element_type_param [$inlet_process getInputPn InletElementType] if {$inlet_element_type_param ne ""} { - $inlet_element_type_param setValues "SphericSwimmingParticle3D" - $inlet_element_type_param setPValues "Spheres" - $inlet_element_type_param setDv "SphericSwimmingParticle3D" + $inlet_element_type_param setValues "SphericSwimmingParticle3D" + $inlet_element_type_param setPValues "Spheres" + $inlet_element_type_param setDv "SphericSwimmingParticle3D" } - set element [::Model::getElement "SphericPartDEMElement3D"] $element addInputDone $parameter spdAux::parseRoutes diff --git a/kratos.gid/apps/Structural/examples/examples.xml b/kratos.gid/apps/Structural/examples/examples.xml index 8ef31240e..7232baab8 100644 --- a/kratos.gid/apps/Structural/examples/examples.xml +++ b/kratos.gid/apps/Structural/examples/examples.xml @@ -4,6 +4,6 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/Structural/images/HighRiseBuilding2D.png b/kratos.gid/apps/Structural/images/HighRiseBuilding2D.png new file mode 100644 index 0000000000000000000000000000000000000000..abfb308f83858f7b39a8f8695ec561d1eb04d172 GIT binary patch literal 873 zcmeAS@N?(olHy`uVBq!ia0vp^DIm!lvI6;>1s;*b3=DjSL74G){tBRWrhlF;jv*CsZ|`jMRW%f8eW-1vu#hu|tHReo zu*BhznBx{9)(QDMvJ);aUes`oews+{CmS*;;ggAL-|wr>_F|ym&N&cU*F&6ljgQ& zE!S#mRfs_Go<+-+>&r=9+iAY|+e#oy;##ONx48Qn)152Ru3Qq+*>268yfu2S4D;b# zviZuzJRI4T3bw8Pv`mjr*zm5}I7{93jgZi_$8~PHy%Cy~d3(-;=^sC^fp6NLn0n5} zmaj(l+@47bU5n1IHoYIPVcPSy?;BnC)Z71eYoll!|MHZoTlxZPmVfM; zHSZfY%j?7qvU9+UJbUM9Zfmx(o%Y%LWlOw5#P#;*lMMf?d0DQNPI#APWcx~r{zs`La|63CUtZUkbX7U* zrSge`lf(}>hn@K^bl=hKbjp!izXXk)#g?n@E#7zhlkVjNprWghebcTQeA;(>`j_-8 z22Mv;x$C@*?VGk2BsBX=_{2sV^CJNpKXrswO$=!~>2e#lu#{|g!Ya&gZDr&!ujZ3qwT`Wj-RL#(aoL8m+|N5ro>hr5 zU+IfjdZN%c;+xZ{uV!p3te5QBxQk8%)9pW> zKJ9<>#l&r1#IX}S5vtCY?|z!nFS1eX)A3t-*OkWp>xj7Jq16wPm@C)XiAaLLba|(B jf-+jd?D+cH=?DL}fI{hghm7t6vj>BxtDnm{r-UW|On#B? literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/Structural/images/IncompressibleCookMembrane2D.png b/kratos.gid/apps/Structural/images/IncompressibleCookMembrane2D.png new file mode 100644 index 0000000000000000000000000000000000000000..56c783be8d76222cf52f9d2c30e79447d09525a7 GIT binary patch literal 1356 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 I&MBb@0Ke-;FaQ7m literal 0 HcmV?d00001 diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 94d4f3769..64dae8052 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -112,12 +112,14 @@ proc Examples::PrintGroups { } { set example_cmd [dict get $example cmd] set img [Examples::getImgFrom $example_app $example_logo] ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] + ttk::label $buttons_frame.title$example_id -text $example_app -font {bold} ttk::label $buttons_frame.text$example_id -text $example_name grid $buttons_frame.img$example_id -column $col -row $row - grid $buttons_frame.text$example_id -column $col -row [expr $row +1] + grid $buttons_frame.title$example_id -column $col -row [expr $row +1] + grid $buttons_frame.text$example_id -column $col -row [expr $row +2] incr col - if {$col >= 5} {set col 0; incr row; incr row} + if {$col >= 4} {set col 0; incr row; incr row; incr row} } } if {$col > 0 || $row > 0 } { @@ -129,7 +131,7 @@ proc Examples::PrintGroups { } { grid columnconfigure $examples_window 0 -weight 1 grid rowconfigure $examples_window 0 -weight 1 - wm minsize $examples_window 750 500 + wm minsize $examples_window 700 500 } proc Examples::IsAproved {example group filter} { From 73a2844efc30747c1d3b3df41825fb9637461539 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 12:18:30 +0100 Subject: [PATCH 100/556] Launch example creates new GiD Project --- kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 64dae8052..9021d79cd 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -70,7 +70,7 @@ proc Examples::StartWindow { {filter ""} } { AddToScrolledCanvas $examples_window.center $fcenter grid $examples_window.center -sticky nsew - set $Examples::filter_entry $filter + set Examples::filter_entry $filter set filter_txt [ttk::label $fcenter.filter_text -text [_ "Search an example:"]] set filter_ent [ttk::entry $fcenter.filter_entry -textvariable Examples::filter_entry] set filter_btn [ttk::button $fcenter.filter_button -text "Filter" -command [list Examples::PrintGroups]] @@ -172,11 +172,16 @@ proc Examples::GetGroupsFromXML {} { } } - - - proc Examples::LaunchExample {example_app example_dim example_cmd} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry. You should save your work first.\nDo you want to lose your unsaved work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } Examples::DestroyExamplesWindow + + GiD_Process escape escape escape escape escape Mescape Files New No + spdAux::SetSpatialDimmension $example_dim apps::setActiveApp $example_app $example_cmd From 62d2fe08884570c636951c6cbc0592d0be999ff7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 12:37:29 +0100 Subject: [PATCH 101/556] Remove examples from toolbar --- kratos.gid/apps/Buoyancy/start.tcl | 7 ------- kratos.gid/apps/CDEM/start.tcl | 11 ----------- kratos.gid/apps/ConjugateHeatTransfer/start.tcl | 12 ------------ kratos.gid/apps/ConvectionDiffusion/start.tcl | 11 ----------- kratos.gid/apps/DEM/start.tcl | 14 -------------- kratos.gid/apps/DEMPFEM/examples/examples.xml | 6 +++--- kratos.gid/apps/DEMPFEM/start.tcl | 5 ----- kratos.gid/apps/DEMPFEM/xml/Main.spd | 2 +- kratos.gid/apps/Dam/start.tcl | 7 ------- kratos.gid/apps/EmbeddedFluid/start.tcl | 12 ------------ kratos.gid/apps/FSI/start.tcl | 9 --------- kratos.gid/apps/Fluid/start.tcl | 12 ------------ kratos.gid/apps/FluidDEM/start.tcl | 6 ------ kratos.gid/apps/MPM/start.tcl | 12 ------------ kratos.gid/apps/Pfem/xml/Solution.spd | 2 +- .../images/{settings.png => dmsettings.png} | Bin kratos.gid/apps/PfemFluid/start.tcl | 10 ++-------- kratos.gid/apps/PfemFluid/xml/MeshBoxes.spd | 2 +- kratos.gid/apps/PotentialFluid/start.tcl | 6 ------ kratos.gid/apps/Structural/start.tcl | 8 -------- kratos.gid/scripts/Menus.tcl | 2 ++ 21 files changed, 10 insertions(+), 146 deletions(-) rename kratos.gid/apps/PfemFluid/images/{settings.png => dmsettings.png} (100%) diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index 1ac5379d3..01d5166ac 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -56,11 +56,4 @@ proc ::Buoyancy::GetAttribute {name} { return $value } -proc ::Buoyancy::CustomToolbarItems { } { - variable dir - - Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow Buoyancy] [= "Examples window"] - -} - ::Buoyancy::Init diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index 6b7b28770..989108827 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -60,17 +60,6 @@ proc ::CDEM::GetAttribute {name} { return $value } -proc ::CDEM::CustomToolbarItems { } { - variable dir - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" [file join $dir images drop.png] [list -np- ::CDEM::examples::ContinuumDrop2D] [= "Example2D\nRocks fall"] - } - if {$::Model::SpatialDimension eq "3D"} { - Kratos::ToolbarAddItem "Example" [file join $dir images drop.png] [list -np- ::CDEM::examples::ContSpheresDrop3D] [= "Example3D\nContinuum spheres drop"] - } - Kratos::ToolbarAddItem "Bulk grouping" [file join $dir images stone.png] [list -np- ::CDEM::xml::BulkGroup] [= "Plugin\nBulk grouping"] -} - proc ::CDEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index ce5fb5351..2cd5bdb3c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -45,23 +45,11 @@ proc ::ConjugateHeatTransfer::LoadMyFiles { } { } } -proc ::ConjugateHeatTransfer::CustomToolbarItems { } { - variable dir - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::ConjugateHeatTransfer::examples::HeatedSquare] [= "Example\nSquare heat source"] - Kratos::ToolbarAddItem "ExampleCylinderCooling" "example.png" [list -np- ::ConjugateHeatTransfer::examples::CylinderCooling] [= "Example\nCylinder cooling (Re = 100 - Pr = 2)"] - Kratos::ToolbarAddItem "ExampleBFS" "example.png" [list -np- ::ConjugateHeatTransfer::examples::BFS] [= "Example\nBackward Facing Step (BFS)"] - } -} - proc ::ConjugateHeatTransfer::GetAttribute {name} { variable attributes set value "" if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} return $value } -proc ::ConjugateHeatTransfer::CustomMenus { } { - ConjugateHeatTransfer::examples::UpdateMenus -} ::ConjugateHeatTransfer::Init diff --git a/kratos.gid/apps/ConvectionDiffusion/start.tcl b/kratos.gid/apps/ConvectionDiffusion/start.tcl index 5d4260ffe..9801fa4eb 100644 --- a/kratos.gid/apps/ConvectionDiffusion/start.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/start.tcl @@ -52,15 +52,4 @@ proc ::ConvectionDiffusion::GetAttribute {name} { return $value } -proc ::ConvectionDiffusion::CustomToolbarItems { } { - variable dir - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::ConvectionDiffusion::examples::HeatedSquare] [= "Example\nSquare heat flow"] - } -} - -proc ::ConvectionDiffusion::CustomMenus { } { - #ConvectionDiffusion::examples::UpdateMenus -} - ::ConvectionDiffusion::Init diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 3ebc4d090..7816466af 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -48,20 +48,6 @@ proc ::DEM::GetAttribute {name} { return $value } -proc ::DEM::CustomToolbarItems { } { - variable dir - if {$::Model::SpatialDimension eq "3D"} { - Kratos::ToolbarAddItem "Example3D" [file join $dir images drop.png] [list -np- ::DEM::examples::SpheresDrop] [= "Example3D\nSpheres drop"] - } - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example2D" [file join $dir images drop.png] [list -np- ::DEM::examples::CirclesDrop] [= "Example2D\nCircles drop"] - } -} - -proc ::DEM::CustomMenus { } { - DEM::examples::UpdateMenus -} - proc ::DEM::BeforeMeshGeneration {elementsize} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute DEMParts]/group" diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.xml b/kratos.gid/apps/DEMPFEM/examples/examples.xml index 0bc785d2f..7127f9910 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.xml +++ b/kratos.gid/apps/DEMPFEM/examples/examples.xml @@ -1,9 +1,9 @@ - - + + - + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/start.tcl b/kratos.gid/apps/DEMPFEM/start.tcl index 6a6c15d8f..c02e29459 100644 --- a/kratos.gid/apps/DEMPFEM/start.tcl +++ b/kratos.gid/apps/DEMPFEM/start.tcl @@ -59,11 +59,6 @@ proc ::DEMPFEM::GetAttribute {name} { return $value } -proc ::DEMPFEM::CustomToolbarItems { } { - variable dir - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::DEMPFEM::examples::InnerSphere] [= "Example\nInnerSphere"] -} - proc ::DEMPFEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } diff --git a/kratos.gid/apps/DEMPFEM/xml/Main.spd b/kratos.gid/apps/DEMPFEM/xml/Main.spd index 7f2ae3a4f..00db06a74 100644 --- a/kratos.gid/apps/DEMPFEM/xml/Main.spd +++ b/kratos.gid/apps/DEMPFEM/xml/Main.spd @@ -17,7 +17,7 @@ - + diff --git a/kratos.gid/apps/Dam/start.tcl b/kratos.gid/apps/Dam/start.tcl index 551d57d1e..5c7a32b9a 100644 --- a/kratos.gid/apps/Dam/start.tcl +++ b/kratos.gid/apps/Dam/start.tcl @@ -29,11 +29,4 @@ proc ::Dam::LoadMyFiles { } { uplevel #0 [list source [file join $dir examples examples.tcl]] } - -proc ::Dam::CustomToolbarItems { } { - variable dir - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Dam::examples::ThermoMechaDam] [= "Example\nThermo-mechanical Dam"] -} - - ::Dam::Init diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 24a9d347c..01f24a553 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -55,18 +55,6 @@ proc ::EmbeddedFluid::GetAttribute {name} { return $value } -proc ::EmbeddedFluid::CustomToolbarItems { } { - Kratos::ToolbarAddItem "ImportMesh" "Import.png" [list -np- EmbeddedFluid::xml::ImportMeshWindow] [= "Import embedded mesh"] - Kratos::ToolbarAddItem "Move" "move.png" [list -np- CopyMove Move] [= "Move the geometry/mesh"] - Kratos::ToolbarAddItem "Box" "box.png" [list -np- EmbeddedFluid::xml::BoundingBox::CreateWindow] [= "Generate the bounding box"] - Kratos::ToolbarAddItem "Spacer" "" "" "" - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::EmbeddedFluid::examples::CylinderInFlow] [= "Example\nEmbedded cylinder test"] -} - -proc ::EmbeddedFluid::CustomMenus { } { - EmbeddedFluid::examples::UpdateMenus -} - proc ::EmbeddedFluid::BeforeMeshGeneration {elementsize} { variable oldMeshType diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index 5ff52455f..8044e0086 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -45,15 +45,6 @@ proc ::FSI::LoadMyFiles { } { uplevel #0 [list source [file join $FSI::dir examples examples.tcl]] } -proc ::FSI::CustomToolbarItems { } { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::FSI::examples::MokChannelFlexibleWall] [= "Example\nMOK - Channel with flexible wall"] - # TODO: REMOVE THIS IF STATEMENT ONCE THE 3D MOK BENCHMARK IS IMPLEMENTED - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::FSI::examples::TurekBenchmark] [= "Example\nTurek benchmark - FSI2"] - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::FSI::examples::HighRiseBuilding] [= "Example\nHigh-rise building"] - } -} - proc ::FSI::CustomMenus { } { FSI::examples::UpdateMenus } diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index 6bcbea730..bd8a4c93a 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -49,16 +49,4 @@ proc ::Fluid::GetAttribute {name} { return $value } -proc ::Fluid::CustomToolbarItems { } { - variable dir - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Fluid::examples::CylinderInFlow] [= "Example\nCylinder in air flow"] - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Fluid::examples::HighRiseBuilding] [= "Example\nHigh-rise building"] - } -} - -proc ::Fluid::CustomMenus { } { - Fluid::examples::UpdateMenus -} - ::Fluid::Init diff --git a/kratos.gid/apps/FluidDEM/start.tcl b/kratos.gid/apps/FluidDEM/start.tcl index 5a53d913e..097d1bb19 100644 --- a/kratos.gid/apps/FluidDEM/start.tcl +++ b/kratos.gid/apps/FluidDEM/start.tcl @@ -59,12 +59,6 @@ proc ::FluidDEM::GetAttribute {name} { return $value } -proc ::FluidDEM::CustomToolbarItems { } { - variable dir - #Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::FluidDEM::examples::InnerSphere] [= "Example\nInnerSphere"] - Kratos::ToolbarAddItem "Example" [file join $dir images drop.png] [list -np- ::FluidDEM::examples::CylinderInFlow] [= "Example\nCylinderInFlow"] -} - proc ::FluidDEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } diff --git a/kratos.gid/apps/MPM/start.tcl b/kratos.gid/apps/MPM/start.tcl index 951f1f074..525848bc1 100644 --- a/kratos.gid/apps/MPM/start.tcl +++ b/kratos.gid/apps/MPM/start.tcl @@ -52,16 +52,4 @@ proc ::MPM::GetAttribute {name} { return $value } -proc ::MPM::CustomToolbarItems { } { - variable dir - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::MPM::examples::FallingSandBall] [= "Example\nFalling sand ball"] - } -} - -proc ::MPM::CustomMenus { } { - MPM::examples::UpdateMenus -} - - ::MPM::Init diff --git a/kratos.gid/apps/Pfem/xml/Solution.spd b/kratos.gid/apps/Pfem/xml/Solution.spd index 75f15cb59..40947675f 100644 --- a/kratos.gid/apps/Pfem/xml/Solution.spd +++ b/kratos.gid/apps/Pfem/xml/Solution.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/apps/PfemFluid/images/settings.png b/kratos.gid/apps/PfemFluid/images/dmsettings.png similarity index 100% rename from kratos.gid/apps/PfemFluid/images/settings.png rename to kratos.gid/apps/PfemFluid/images/dmsettings.png diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index c89e51f9f..ef9b17365 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -52,15 +52,9 @@ proc ::PfemFluid::CustomToolbarItems { } { Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] - Kratos::ToolbarAddItem "SpacerApp" "" "" "" Kratos::ToolbarAddItem "Spacer" "" "" "" - Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleFluid.png"] [list -np- ::PfemFluid::examples::WaterDamBreak] [= "Example\nWater dam break"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "exampleFsi.png"] [list -np- ::PfemFluid::examples::DamBreakFSI] [= "Example\nDam break FSI"] - - # Solo para JG - if {[GiD_Info problemtypepath] eq "E:/PROYECTOS/Kratos/interfaces/GiD/kratos.gid"} { - Kratos::ToolbarAddItem "Conditions" "list.png" [list -np- PfemFluid::xml::StartSortingWindow] [= "Sort the conditions"] - } + Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] + Kratos::ToolbarAddItem "SpacerApp" "" "" "" } ::PfemFluid::Init diff --git a/kratos.gid/apps/PfemFluid/xml/MeshBoxes.spd b/kratos.gid/apps/PfemFluid/xml/MeshBoxes.spd index 7e3532609..e3abe947f 100644 --- a/kratos.gid/apps/PfemFluid/xml/MeshBoxes.spd +++ b/kratos.gid/apps/PfemFluid/xml/MeshBoxes.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/apps/PotentialFluid/start.tcl b/kratos.gid/apps/PotentialFluid/start.tcl index 474431ac7..dfd022e56 100644 --- a/kratos.gid/apps/PotentialFluid/start.tcl +++ b/kratos.gid/apps/PotentialFluid/start.tcl @@ -53,10 +53,4 @@ proc ::PotentialFluid::GetAttribute {name} { return $value } -proc ::PotentialFluid::CustomToolbarItems { } { - variable dir - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::PotentialFluid::examples::NACA0012] [= "Example\nNACA 0012"] -} - - ::PotentialFluid::Init diff --git a/kratos.gid/apps/Structural/start.tcl b/kratos.gid/apps/Structural/start.tcl index 456d82055..5ea35723a 100644 --- a/kratos.gid/apps/Structural/start.tcl +++ b/kratos.gid/apps/Structural/start.tcl @@ -40,14 +40,6 @@ proc ::Structural::LoadMyFiles { } { uplevel #0 [list source [file join $dir examples examples.tcl]] } -proc ::Structural::CustomToolbarItems { } { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Structural::examples::TrussCantilever] [= "Example\nTruss cantilever"] - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Structural::examples::HighRiseBuilding] [= "Example\nHigh-rise building"] - } - Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::Structural::examples::IncompressibleCookMembrane] [= "Example\nIncompressible Cook membrane"] -} - proc ::Structural::CustomMenus { } { Structural::examples::UpdateMenus diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index 4edb2d9a7..990d3736c 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -42,6 +42,8 @@ proc Kratos::CreatePreprocessModelTBar { {type "DEFAULT INSIDELEFT"} } { Kratos::ToolbarAddItem "Output" "output.png" [list -np- PWViewOutput] [= "View process info"] Kratos::ToolbarAddItem "Stop" "stop.png" {Utilities CancelProcess} [= "Cancel process"] Kratos::ToolbarAddItem "SpacerApp" "" "" "" + Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] + Kratos::ToolbarAddItem "SpacerApp" "" "" "" set app_items_toolbar [apps::ExecuteOnCurrentApp CustomToolbarItems] if {$app_items_toolbar < 1} { From 41320bd600488cea463d9b9523a5b406ee630d63 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 12:59:08 +0100 Subject: [PATCH 102/556] naming and images --- kratos.gid/apps/Dam/examples/examples.xml | 4 ++-- .../apps/EmbeddedFluid/examples/examples.xml | 2 +- kratos.gid/apps/FluidDEM/examples/examples.xml | 4 ++-- .../apps/FluidDEM/images/CylinderInFlow3D.png | Bin 0 -> 3263 bytes .../scripts/Controllers/ExamplesWindow.tcl | 6 ++++-- 5 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 kratos.gid/apps/FluidDEM/images/CylinderInFlow3D.png diff --git a/kratos.gid/apps/Dam/examples/examples.xml b/kratos.gid/apps/Dam/examples/examples.xml index 84c42ebf6..7acd04bb0 100644 --- a/kratos.gid/apps/Dam/examples/examples.xml +++ b/kratos.gid/apps/Dam/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml index 7f4070aa6..fe9c88d68 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.xml b/kratos.gid/apps/FluidDEM/examples/examples.xml index 234ef29d0..430760a74 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.xml +++ b/kratos.gid/apps/FluidDEM/examples/examples.xml @@ -2,10 +2,10 @@ - + - + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/images/CylinderInFlow3D.png b/kratos.gid/apps/FluidDEM/images/CylinderInFlow3D.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2226ee86997f6dfe0254ec720d6a7b398f0577 GIT binary patch literal 3263 zcmb_f_d6R57md_jQ7T4jm)5FQ%^DT6c8d}*W5;X-wO8%gYC@}|#z$>I)hsVDTLh^+ zTGG_!4Y5Z*@B1%&-w)@W=RD87_lNVtea=mOY@)})$jb--09f=NX`5ZL%Rit8Ue-U+ zz$=$Tg*4OC1k{Y&Si2O|?hs=L08p37bOxun)C|uaSt9`eR@^_J>h~+V9A~!B*M?XG z+i&HbT5-7Z_8Uc%` zd!j&Idn_2l1W}cuCS%!paGGrYH*qGXtbFma3%?0s>cNFh o$6G1;UtX*6zEl^+D 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 D-=0KW literal 0 HcmV?d00001 diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 9021d79cd..3767834df 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -77,8 +77,8 @@ proc Examples::StartWindow { {filter ""} } { grid $filter_txt $filter_ent $filter_btn -sticky ew set groups [GetGroupsFromXML] + PrintGroups - } proc Examples::getImgFrom {group_name example_logo} { @@ -132,6 +132,9 @@ proc Examples::PrintGroups { } { grid columnconfigure $examples_window 0 -weight 1 grid rowconfigure $examples_window 0 -weight 1 wm minsize $examples_window 700 500 + update + + ResizeScrolledCanvas $_canvas_scroll } proc Examples::IsAproved {example group filter} { @@ -186,7 +189,6 @@ proc Examples::LaunchExample {example_app example_dim example_cmd} { apps::setActiveApp $example_app $example_cmd spdAux::OpenTree - } proc Examples::DestroyExamplesWindow {} { From e91dd26a300978a3bdb0e48874bb3536c2985aeb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 13:23:40 +0100 Subject: [PATCH 103/556] hotfix mpm 2d condition --- kratos.gid/apps/MPM/xml/Conditions.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/MPM/xml/Conditions.xml b/kratos.gid/apps/MPM/xml/Conditions.xml index bd92c566a..75a2559ca 100644 --- a/kratos.gid/apps/MPM/xml/Conditions.xml +++ b/kratos.gid/apps/MPM/xml/Conditions.xml @@ -97,7 +97,7 @@ WorkingSpaceDimension="2D" LocalSpaceDimension="1" RequiresLocalAxes="False" LargeDeformation="False" ElementType="Line" ProcessName="ApplyMPMSlipBoundaryProcess" help=""> - + @@ -110,7 +110,7 @@ WorkingSpaceDimension="2Da" LocalSpaceDimension="1" RequiresLocalAxes="False" LargeDeformation="False" ElementType="Line" ProcessName="ApplyMPMSlipBoundaryProcess" help=""> - + From 5d0598adb5659fa4cf9396e5e22f8dbfbf2442c0 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 13:23:49 +0100 Subject: [PATCH 104/556] dam examples fix --- kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG | Bin 0 -> 1005 bytes kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG | Bin 0 -> 3722 bytes kratos.gid/apps/Dam/start.tcl | 6 ++---- .../xml/{GetFromXML.tcl => XmlController.tcl} | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG create mode 100644 kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG rename kratos.gid/apps/Dam/xml/{GetFromXML.tcl => XmlController.tcl} (99%) diff --git a/kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG b/kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f0bb18f836f406266ab384d280963d52d0bcd568 GIT binary patch literal 1005 zcmeAS@N?(olHy`uVBq!ia0vp^DImupr;f)hHVmn-NU4(UVI$BwU$}(J}9_@2nebmV{>MDoVk}qmY&y=Li zG5&mQoz>NpPkZv``F~2Y+JDpJ`R(F!G3TzFW>+v#dKTuP!6C`2xL6@Yq@|~6LZE;V zmy?_030#7|`U~dAygpQMKG@~a$43g&op&vhlJ1w$yI0QhSMF2x4_%?X=L2s4U$jA} z_WZ<`)oF62{Ivq>mDqk9y!Y^T{dDvF+bukvquHUu`)FqL_XtUq*{5gCzmpt0p~j@^ z$_C9;f^4ptORz(L@Y%RCXsoj2hr@~JU7T-eoyT5OpJ)(DxRddBE zm(YBBHaT0MNjoG}0&d=ES;)+8nEmedp_>XnAFM1`W!D+K``e68**UyIr+yczu(w|< zzBTnmEag>dMCa#Z960QI`)q@B?Su|-&N|Qa1(ApU>xG0Y z$gC0SKNrvQK2ZDRYmVgmY0dUqK5g$-uetNef^GfpvWF|*6tyI(+4m*AJ^MOhYnth% z;^L$1rxflSxR~(SRPFDh2l8UPpK>3W@7sT~ukF~>6Hib5m)thrVVA_qmeiE+5u46MAMkUg Xr8B?wopu$NMHxI@{an^LB{Ts5^oG5C literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG b/kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG new file mode 100644 index 0000000000000000000000000000000000000000..074fccdeeebaa277e43467bc5eee91931ac795b9 GIT binary patch literal 3722 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%0A?^351p;qVnk@JGVR8 zmBLwy^}(WMv9GGAmXBjtoC9hChcm!YU@GlP+Q}%7&JWuk2xn=0&O>-hBiy z)tABHB9x{~4#PXuqm5hoHJL9_ak4%NJe)s@ZOsFk8R9YGkdk@LepU42*qgcEM8*G( z$*FJcrGZowF9IL9D}={3y7Tdj4urkiZA>_}Hq3c)CldFe{0$6ehAthC>SI-mOc&H; zBy{Q#PH3rbzzqiavW4Y(%v^djjrSL9>ue=urr8(gf z3Hh9G5db2ZQW=AepBJsv?EZM`iT3gNPQl z#3uLk@Aa+`j_?xVI0o7h55GL8Azol#G+2CZj|aS z(1>JGNlG{LbdL4v_{#s(qBL)IIqdenoO^8GG#EPQ2u~SMJMT;<32w>yj2F5z)j9K~ zkRN^j$*H~hfgriP7FoR7PHKsE z-lzb~J~e!|1ETI0mg0*AjC#VG5t&=7=@+ z=H}DC3E1w4*~>46G;Y3-z7jAp{R_#xwR|K4+7Wf=`# zPMdsVW#!ai6!4i;|LKhw?p-KMS2>Yj8Qrru6S5#02TL;oZVW%40WQuoGG~qXoIhsP z3BO_or(8MWe!KoHGppi7E#rFG8Q1XHZmQrqK>th}b^!nw~ zp!!raJ-KMyRSS_6Fh5&3Ucu1jV)06Ie05sGN98>5YM!-dg{Q31C(=bYB@xE-M%lI3 k|Lzu|!(~Ok`7S;q_YC*ZGk|TU`(FPSpncKmHl-`~Uy| literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/Dam/start.tcl b/kratos.gid/apps/Dam/start.tcl index 5c7a32b9a..23b20875a 100644 --- a/kratos.gid/apps/Dam/start.tcl +++ b/kratos.gid/apps/Dam/start.tcl @@ -15,15 +15,13 @@ proc ::Dam::Init { } { # Allow to open the tree set ::spdAux::TreeVisibility 1 - LoadMyFiles - ::spdAux::CreateDimensionWindow - + LoadMyFiles } proc ::Dam::LoadMyFiles { } { variable dir - uplevel #0 [list source [file join $dir xml GetFromXML.tcl]] + uplevel #0 [list source [file join $dir xml XmlController.tcl]] uplevel #0 [list source [file join $dir write write.tcl]] uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] uplevel #0 [list source [file join $dir examples examples.tcl]] diff --git a/kratos.gid/apps/Dam/xml/GetFromXML.tcl b/kratos.gid/apps/Dam/xml/XmlController.tcl similarity index 99% rename from kratos.gid/apps/Dam/xml/GetFromXML.tcl rename to kratos.gid/apps/Dam/xml/XmlController.tcl index f28cd3520..c2771abd1 100644 --- a/kratos.gid/apps/Dam/xml/GetFromXML.tcl +++ b/kratos.gid/apps/Dam/xml/XmlController.tcl @@ -30,7 +30,7 @@ proc ::Dam::xml::MultiAppEvent {args} { proc Dam::xml::CustomTree { args } { - + customlib::UpdateDocument # Add some nodal results set nodal_results_base [[customlib::GetBaseRoot] selectNodes [spdAux::getRoute NodalResults]] $nodal_results_base setAttribute state "\[ActiveIfAnyPartState\]" From 9b4bc76bc4e125ab095159d8b2ca7982c4abb620 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 15:07:23 +0100 Subject: [PATCH 105/556] More images --- kratos.gid/apps/CDEM/examples/examples.xml | 4 ++-- kratos.gid/apps/CDEM/images/CirclesDrop2D.png | Bin 0 -> 7942 bytes kratos.gid/apps/CDEM/images/SpheresDrop3D.png | Bin 0 -> 2349 bytes .../ConvectionDiffusion/examples/examples.xml | 2 +- kratos.gid/apps/DEM/examples/examples.xml | 2 +- kratos.gid/apps/DEM/images/CirclesDrop.png | Bin 0 -> 4989 bytes kratos.gid/apps/DEM/images/SpheresDrop.png | Bin 0 -> 4843 bytes kratos.gid/apps/DEMPFEM/images/InnerSphere.png | Bin 0 -> 9545 bytes kratos.gid/apps/Examples/xml/examples.xml | 2 +- kratos.gid/apps/MPM/images/FallingSandBall.png | Bin 0 -> 2436 bytes kratos.gid/apps/PfemFluid/examples/examples.xml | 2 +- kratos.gid/apps/PfemFluid/images/DamBreakFSI.png | Bin 0 -> 4655 bytes .../apps/PfemFluid/images/WaterDamBreak.png | Bin 0 -> 3513 bytes 13 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 kratos.gid/apps/CDEM/images/CirclesDrop2D.png create mode 100644 kratos.gid/apps/CDEM/images/SpheresDrop3D.png create mode 100644 kratos.gid/apps/DEM/images/CirclesDrop.png create mode 100644 kratos.gid/apps/DEM/images/SpheresDrop.png create mode 100644 kratos.gid/apps/DEMPFEM/images/InnerSphere.png create mode 100644 kratos.gid/apps/MPM/images/FallingSandBall.png create mode 100644 kratos.gid/apps/PfemFluid/images/DamBreakFSI.png create mode 100644 kratos.gid/apps/PfemFluid/images/WaterDamBreak.png diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml index 30ac472fb..b6e0e6c73 100644 --- a/kratos.gid/apps/CDEM/examples/examples.xml +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/images/CirclesDrop2D.png b/kratos.gid/apps/CDEM/images/CirclesDrop2D.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b7dd92eb72e60558406cedf9f6cc1f812c7740 GIT binary patch literal 7942 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 - + \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/examples.xml b/kratos.gid/apps/DEM/examples/examples.xml index 3c53e1820..eff2a9f6f 100644 --- a/kratos.gid/apps/DEM/examples/examples.xml +++ b/kratos.gid/apps/DEM/examples/examples.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/DEM/images/CirclesDrop.png b/kratos.gid/apps/DEM/images/CirclesDrop.png new file mode 100644 index 0000000000000000000000000000000000000000..9e528ec566f0883059505756a7ae37082e4d92cc GIT binary patch literal 4989 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 - + diff --git a/kratos.gid/apps/MPM/images/FallingSandBall.png b/kratos.gid/apps/MPM/images/FallingSandBall.png new file mode 100644 index 0000000000000000000000000000000000000000..181e4c27da4f2582a888e4f444261a262046d763 GIT binary patch literal 2436 zcmc(h_gfN*9>&283j+%+N0Mcj12oBz7*_5am~holv(Q|4G)-~k$i2!k%5f|lkP}0+ z!jT%dAV;ZryxLGx%RN$Ycf6ka-2dVJ@P6OteZJ58)BDRO)z-!w0+s^<004-^6%)dq zyZ@sDB71i?Mr7Zf0fPwUMgZ0a`RTnN>Sc&C1OTcYiSM}X-^&LBt~dq(0MM3y1mydd z?$r;;uE_yxyPPKpkmN_a#< zP5}}ogE&dHTQ1zt0Vf$LkW_nPI;h9bC_pPB)y|0bfjXnP3(JeU&qG7&)-_rIOh9~&1j@3yg%*pHY);z@yBO59}?V3zqoHr6uc2VMmA2qremoXo!jPyq+R zz(BIexTSoB>*nToY=P&&E2rhIjgfw{3r3?)mO6^`rL<=PX1&2|tQ09+g}ZDU^P>>Z zX$;It7C}kuC!Y8}J*oi?=m3d;$_o}@$ZnrcY!k0T0n$q%nzAzczh>jz{iL(3$%rLQ z+hM4@Xf%`=lMiHQ@tNw))J;Lk8Ne)H4K!JJ9r6YEkXQJLEwfR^$clFN6VKYZSF^9m zF6V1l!L{8d)fILExng$3KjvHAC~nkp=YDOgCd3q{^Aje0 z%8WH5dY=gfAsIi^QTps4R| z_fB_`?nUOrr>e@d^@$vN&9i< zRv(?;5L4DA#d3+beZO*;kC&47d@zz%E7oWxFM^uX4LtVSgMV z$ur6Xiu7xHHN(w-!9niIs5cwEf<;{-BH*E{9a=3#*5s;7!-5RC_yW|riW=3JF5Mr? zV^+&$QC)8&#4JmpDtT%JI%(Byz+v^bL z?$#((PkBm(Xum@e7u%b2pS7`Buk8(%UTvKHb@}O7gX9w}^KV%?(~)v0@hok#`%Xrv z;-IJ>qS9qJ%H(56dyCwINf*zaohk>sKB>$(u5F$1GI_XkBzclNTbSfqwEfN_bKyY8 z+3OnW)+@1zTvVuP|6QaaUGlqR>k!My?tAt^6NqA6)}v>0}LVCU~S!s4a+dGT*j(n@Aq=Uk-=1XC0` zWBBM<+UzNhwc`Q(Ft`~hb$h>?Gqr&LwW8V!EQVo4O`~d7VK%z%BWxilu{?Bk%&#VL zhw5zL0NH{9$Ko>E)HOorrXdZuYThTX0^l%pC;QK-L4`F!A6= z-6-r3I>IUTNUIDz!Mil*%ggK`umKZqhBe;F;oMvCtEs6s!+n*wI1zF&uNnB6(-T0K z=zUg8D;cc?@$bhITTiBMbX9rS zYc%tImzEpNNB7$m*0+cB43>zYyL3H-L(bgpL5n%XkPG*}@UQ3HKI-rN`{YF}_5^&Z zJG|J`DVyzb{-=~_HQCWY$x8?%vZc_%j--Hnakzp zg=5bXB0TKo2<6~V$H1QYUSm&^X&H{ zrqm4)%0DU0fo@1Z(aIO&D7z8Wny*F@CQsBPxJ}{z*0*$BUr1b7?0#YNJ2v{Za5Pq? z4A(NgD332M-f-Y2Y#+=$5ZP^@^1YW|G8^;duF&VdT%rBcSe?@POg(t+FT%Ax2$E^_ hKL#PegHG*=y+{q{@fJIIeUF>~7N#~PEF)6fe*h>WgAV`z literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml index 5e465015f..affff99bf 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.xml +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/images/DamBreakFSI.png b/kratos.gid/apps/PfemFluid/images/DamBreakFSI.png new file mode 100644 index 0000000000000000000000000000000000000000..81a17a1c8edacb6c4d942d38ad7cc4ff41c579ec GIT binary patch literal 4655 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 YoFi52l*-}Fk%tHZe)hCh%{KCX0Jnh*ZU6uP literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/PfemFluid/images/WaterDamBreak.png b/kratos.gid/apps/PfemFluid/images/WaterDamBreak.png new file mode 100644 index 0000000000000000000000000000000000000000..16ec8c1959fe6e9413ccf5f0f409fab8edcf806c GIT binary patch literal 3513 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 lsO3)V|1_87n>u`r5!3$|>8kvc+pk*yS0_)$rc Date: Tue, 17 Nov 2020 15:18:26 +0100 Subject: [PATCH 106/556] naming --- kratos.gid/apps/CDEM/examples/examples.xml | 2 +- .../ConjugateHeatTransfer/examples/examples.xml | 6 +++--- kratos.gid/apps/DEMPFEM/examples/examples.xml | 4 ++-- kratos.gid/apps/PfemFluid/examples/examples.xml | 14 ++++++++++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml index b6e0e6c73..d2431d579 100644 --- a/kratos.gid/apps/CDEM/examples/examples.xml +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml index 1d6481038..c5dfa3032 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.xml b/kratos.gid/apps/DEMPFEM/examples/examples.xml index 7127f9910..8a2483ad0 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.xml +++ b/kratos.gid/apps/DEMPFEM/examples/examples.xml @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml index affff99bf..7d9dcaf7e 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.xml +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -1,5 +1,11 @@ - - - - \ No newline at end of file + + + + + + + + + + \ No newline at end of file From 679b9df245c5cf5255cdbc919a91b0f0e2d53149 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Nov 2020 16:11:37 +0100 Subject: [PATCH 107/556] dynamic tau hidden if element is in list --- .../Fluid/write/writeProjectParameters.tcl | 32 ++++--------------- kratos.gid/apps/Fluid/xml/Procs.spd | 5 +++ kratos.gid/apps/Fluid/xml/Strategies.xml | 2 +- kratos.gid/apps/Fluid/xml/XmlController.tcl | 8 +++++ 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index ce89ec80b..73bb986a0 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -158,40 +158,19 @@ proc Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } -proc Fluid::write::GetUsedElement {} { +proc Fluid::write::GetUsedElements {} { set root [customlib::GetBaseRoot] - # Check that there is only one fluid part - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" - if {[llength [$root selectNodes $xp1]] ne 1} { - set err "You must set one part in Parts.\n" - error $err - } - W "There is one part" - # Get the fluid part - set get "Objects" set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" set lista [list ] foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { set g $gNode - if {$get eq "Name"} { - set g [$g getName] - } - lappend lista $g + set name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] + if {$name ni $lista} {lappend lista $name} } - W "W lista" - W $lista - - # Get the element name from the fluid part - set fluid_part [lindex $lista 0] - set elem_name [get_domnode_attribute [$fluid_part selectNodes ".//value\[@n='Element']"] v] - - W "W elem_name" - W $elem_name - - return $elem_name + return $lista } proc Fluid::write::getSolverSettingsDict { } { @@ -251,7 +230,8 @@ proc Fluid::write::getSolverSettingsDict { } { set formulationSettingsDict [dict create] # Set formulation dictionary element type - set element_name [Fluid::write::GetUsedElement] + set elements [Fluid::write::GetUsedElements] + if {[llength $elements] ne 1} {error "You must select 1 element"} {set element_name [lindex $elements 0]} if {$element_name eq "QSVMS2D" || $element_name eq "QSVMS3D"} { set element_type "qsvms" } elseif {$element_name eq "DVMS2D" || $element_name eq "DVMS3D"} { diff --git a/kratos.gid/apps/Fluid/xml/Procs.spd b/kratos.gid/apps/Fluid/xml/Procs.spd index 53779c99b..b68a2aa0b 100644 --- a/kratos.gid/apps/Fluid/xml/Procs.spd +++ b/kratos.gid/apps/Fluid/xml/Procs.spd @@ -35,4 +35,9 @@ return $r ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/xml/Strategies.xml b/kratos.gid/apps/Fluid/xml/Strategies.xml index e5d072f24..40f009b5b 100644 --- a/kratos.gid/apps/Fluid/xml/Strategies.xml +++ b/kratos.gid/apps/Fluid/xml/Strategies.xml @@ -72,7 +72,7 @@ - + diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index b0bcb4888..eef23c0ff 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -47,6 +47,9 @@ proc Fluid::xml::CustomTree { args } { # TODO: remove when Non newtonian is implemented for 2d if {$::Model::SpatialDimension eq "2D"} { Model::ForgetConstitutiveLaw HerschelBulkley } + + # Hide dynamic_tau on some elements + spdAux::SetValueOnTreeItem state "\[HideIfElement {DVMS2D DVMS3D}\]" FLStratParams dynamic_tau } # Usage @@ -103,4 +106,9 @@ proc Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_c } } +proc Fluid::xml::ProcHideIfElement { domNode list_elements } { + set element [lindex [Fluid::write::GetUsedElements] 0] + if {$element in $list_elements} {return hidden} {return normal} +} + Fluid::xml::Init From ed3e65d4644f4793efb58e3e7b70c51bde47735c Mon Sep 17 00:00:00 2001 From: rlrangel Date: Tue, 17 Nov 2020 23:24:33 +0100 Subject: [PATCH 108/556] Small improvements in ThermicPfem --- kratos.gid/apps/PfemFluid/xml/Elements.xml | 1265 ++++++++++------- kratos.gid/apps/PfemFluid/xml/Results.spd | 8 +- .../write/writeProjectParameters.tcl | 6 - .../apps/PfemThermic/xml/XmlController.tcl | 11 +- 4 files changed, 761 insertions(+), 529 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/Elements.xml b/kratos.gid/apps/PfemFluid/xml/Elements.xml index 4b2f27090..349a72184 100644 --- a/kratos.gid/apps/PfemFluid/xml/Elements.xml +++ b/kratos.gid/apps/PfemFluid/xml/Elements.xml @@ -1,519 +1,754 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemFluid/xml/Results.spd b/kratos.gid/apps/PfemFluid/xml/Results.spd index de406fe08..4a4e1b05c 100644 --- a/kratos.gid/apps/PfemFluid/xml/Results.spd +++ b/kratos.gid/apps/PfemFluid/xml/Results.spd @@ -9,13 +9,15 @@ - - - + + + + + diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 44eeeadc5..0a3250631 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -53,14 +53,8 @@ proc PfemThermic::write::GetThermicSolverSettingsDict { } { dict set thermicSolverSettingsDict reform_dofs_at_each_step "true" # Import data - set modelDict [dict create] set materialsDict [dict create] - - dict set modelDict input_type "use_input_model_part" - dict set modelDict input_filename "unknown_name" dict set materialsDict materials_filename [ConvectionDiffusion::write::GetAttribute materials_file] - - dict set thermicSolverSettingsDict model_import_settings $modelDict dict set thermicSolverSettingsDict material_import_settings $materialsDict # Solution Strategy and Solvers Parameters diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index 34234abeb..8300417e5 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -69,11 +69,12 @@ proc PfemThermic::xml::CustomTree { args } { ConvectionDiffusion::xml::CustomTree - spdAux::SetValueOnTreeItem v linear CNVDFFAnalysisType - spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat - spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat - spdAux::SetValueOnTreeItem v No CNVDFFStratParams line_search - spdAux::SetValueOnTreeItem state hidden CNVDFFStratParams line_search + spdAux::SetValueOnTreeItem v non_linear CNVDFFAnalysisType + spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat + spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat + spdAux::SetValueOnTreeItem v No CNVDFFStratParams line_search + spdAux::SetValueOnTreeItem state hidden CNVDFFStratParams line_search + spdAux::SetValueOnTreeItem v 1 CNVDFFStratParams echo_level } proc PfemThermic::xml::ProcGetElementsValues {domNode args} { From 1b8a7d0cade470c810714a67688a58157055b96c Mon Sep 17 00:00:00 2001 From: pasenau Date: Wed, 18 Nov 2020 12:46:05 +0100 Subject: [PATCH 109/556] Corrected problem with ResizeScrolledCanvas in the new Examples Window --- kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 3767834df..7d38d4795 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -7,6 +7,7 @@ namespace eval ::Examples { variable groups_of_examples variable _canvas_scroll + variable _canvas_scroll_w } proc Examples::Init { } { @@ -42,6 +43,7 @@ proc Examples::LoadMyFiles { } { proc Examples::StartWindow { {filter ""} } { variable examples_window variable _canvas_scroll + variable _canvas_scroll_w set ::spdAux::must_open_dim_window 0 @@ -67,6 +69,7 @@ proc Examples::StartWindow { {filter ""} } { set c_to_scroll [CreateScrolledCanvas $examples_window.center] set fcenter [tk::frame $c_to_scroll.fcenter] set _canvas_scroll $fcenter + set _canvas_scroll_w $examples_window.center AddToScrolledCanvas $examples_window.center $fcenter grid $examples_window.center -sticky nsew @@ -89,6 +92,7 @@ proc Examples::PrintGroups { } { variable groups_of_examples variable examples_window variable _canvas_scroll + variable _canvas_scroll_w variable filter_entry set filter $filter_entry @@ -134,7 +138,7 @@ proc Examples::PrintGroups { } { wm minsize $examples_window 700 500 update - ResizeScrolledCanvas $_canvas_scroll + ResizeScrolledCanvas $_canvas_scroll_w } proc Examples::IsAproved {example group filter} { From 50d2023b8db94ab2f32d4b19272b7100b149fb62 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 18 Nov 2020 13:27:17 +0100 Subject: [PATCH 110/556] missing state fluid element --- kratos.gid/apps/Fluid/xml/Parts.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index 8a652174e..468e7c85e 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -1,7 +1,7 @@ - + From 0e0f43f771b0d92636e2d1ee2783bd624a7ca36e Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 18 Nov 2020 15:30:31 +0100 Subject: [PATCH 111/556] Applying recent example modifications to PfemThermic --- kratos.gid/apps/Examples/xml/examples.xml | 1 + .../apps/PfemThermic/examples/examples.tcl | 8 -------- .../apps/PfemThermic/examples/examples.xml | 11 +++++++++++ .../apps/PfemThermic/images/dmsettings.png | Bin 0 -> 294 bytes .../PfemThermic/images/exampleConvection.png | Bin 0 -> 471 bytes .../apps/PfemThermic/images/exampleCubeDrop.png | Bin 0 -> 551 bytes .../PfemThermic/images/exampleDamBreakFSI.png | Bin 0 -> 617 bytes .../apps/PfemThermic/images/exampleFluidDrop.png | Bin 0 -> 647 bytes .../apps/PfemThermic/images/exampleSloshing.png | Bin 0 -> 1058 bytes .../images/exampleSloshingConvection.png | Bin 0 -> 1058 bytes kratos.gid/apps/PfemThermic/start.tcl | 10 +++------- 11 files changed, 15 insertions(+), 15 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/examples/examples.xml create mode 100644 kratos.gid/apps/PfemThermic/images/dmsettings.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleConvection.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleCubeDrop.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleDamBreakFSI.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleFluidDrop.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleSloshing.png create mode 100644 kratos.gid/apps/PfemThermic/images/exampleSloshingConvection.png diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 6a6c65973..997481917 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -20,4 +20,5 @@ + diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index 1f7ea7b93..4cf86042c 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -12,14 +12,6 @@ proc PfemThermic::examples::Init { } { } proc PfemThermic::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 7 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic sloshing" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshing] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic convection" ] 7 PRE [list ::PfemThermic::examples::ThermicConvection] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic sloshing convection" ] 7 PRE [list ::PfemThermic::examples::ThermicSloshingConvection] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic dam break FSI" ] 7 PRE [list ::PfemThermic::examples::ThermicDamBreakFSI] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic cube drop" ] 7 PRE [list ::PfemThermic::examples::ThermicCubeDrop] "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Thermic fluid drop" ] 7 PRE [list ::PfemThermic::examples::ThermicFluidDrop] "" "" insertafter = - GiDMenu::UpdateMenus } PfemThermic::examples::Init diff --git a/kratos.gid/apps/PfemThermic/examples/examples.xml b/kratos.gid/apps/PfemThermic/examples/examples.xml new file mode 100644 index 000000000..8626b4bff --- /dev/null +++ b/kratos.gid/apps/PfemThermic/examples/examples.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/images/dmsettings.png b/kratos.gid/apps/PfemThermic/images/dmsettings.png new file mode 100644 index 0000000000000000000000000000000000000000..286e690b2c6cbff7ee337ce8f4536114f5d5eb98 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!*Z=?j8|o%Ug*W?nR$ROK;N!=yCyrlJmXFLx?S1n2 z)%>~JCibt{we$4a)d%gZ^U8{+H#aWQoy7AFsJ+wE#WAGfR*%1@&|w3PWaEV9w}1X` zRXkU6E7@{`M-K}_ecOV>|1)i5G&*k2wC>w0GHKmkrOr^7rISuZKFrv{VSdDp>vYwX zyvK^$ydpUpHqH2H62-uMK_{W&D{G1ST#eLuopm|a8de-u&%|=sI~9Gn0$xw9C#4T@{nkwP(z|82@ZeaY;|(Q|Xl0c%BQPj^{qxeyf$p`9b3*C{dX=3x5*W8D9%bly-cYI%d^339MulK&M`@>kH XUCp$u9c_1{>`h#pfoPp@0pHJuNvDibV^tR@ zN)`S8+NXJXN-B^)b5q_uZQsacI>Fc0b^*13blDfh>^)?81P)VvaNM+UPC7qf<%#f! z={0}oZg%X!F@8|(XG4lll&ds!DZf8ZL^dET^7TC~|2k2bdk_4)l<0++-Qo;dF{)%Gr-j zB0+8oa{9y=p_TyHKB|Q!|W%Q}1HB+p}YVL)~@4sc=*0+7K7ytD2 z=-u9KsYCt}F{uJYXt6Zh3ej4! zkUd3ouo|~->IAkU)+zDt_|M#9%=*lS>QNmvmWnX#dchs{`yUt0d;W8cWQWX;h&(w9*Bby-eMPD{5J@AALv1**57 zJb6DTK0f~Nu7mYkv=!NopF1ZU8C4};V`VyHgO1{|<*Bt(N`A%hX0d;tIIrc#MiH*^ z)Vw^s9ZOc3NcwcVtS^g zQ{&89@6=H{?c+z=%&aV?-sk%zN}YHP<$RmEBuM|S`<3M6txjiRe*RgdBDCGM@8$g0 zuUc;eo;x2u`S0J_{}*%@uUy}908>SKxPI5@|z zyfgLeiv@L_-4{4E8cWFi(_6cCt=7|)pbo={r+Yn(ZZ7unSKGI32oZ&;Lp<@r#m0NmQ)pdSiNQY_V`(j zit_}fmsh4fotTr`JHL9S)2U>x-J+c~QzLZBX1OaGY`ND|w3C05kDbNO7TLPnuX)v8 zeY+x3&*!+YWQWX;h&(w9*Bby-eMPD{5J@AALv1**57 zJb6DTK0f~Nu7mYkv=!NopF1ZU8C4};V`VyHgO1{|<*Bt(N`A%hX0d;tIIrc#MiH*^ z)Vw^s9ZOc3NcwcVtS^g zQ{&89@6=H{?c+z=%&aV?-sk%zN}YHP<$RmEBuM|S`<3M6txjiRe*RgdBDCGM@8$g0 zuUc;eo;x2u`S0J_{}*%@uUy}908>SKxPI5@|z zyfgLeiv@L_-4{4E8cWFi(_6cCt=7|)pbo={r+Yn(ZZ7unSKGI32oZ&;Lp<@r#m0NmQ)pdSiNQY_V`(j zit_}fmsh4fotTr`JHL9S)2U>x-J+c~QzLZBX1OaGY`ND|w3C05kDbNO7TLPnuX)v8 zeY+x3&*!+Y Date: Fri, 20 Nov 2020 00:36:29 +0100 Subject: [PATCH 112/556] Some improvements in PfemThermic --- kratos.gid/apps/PfemFluid/xml/Results.spd | 3 +- .../examples/ThermicConvection.tcl | 2 +- .../PfemThermic/images/exampleConvection.png | Bin 471 -> 6330 bytes .../PfemThermic/images/exampleCubeDrop.png | Bin 551 -> 2042 bytes .../PfemThermic/images/exampleDamBreakFSI.png | Bin 617 -> 2641 bytes .../PfemThermic/images/exampleFluidDrop.png | Bin 647 -> 2822 bytes .../PfemThermic/images/exampleSloshing.png | Bin 1058 -> 5549 bytes .../images/exampleSloshingConvection.png | Bin 1058 -> 4978 bytes kratos.gid/apps/PfemThermic/start.tcl | 3 - kratos.gid/apps/PfemThermic/write/write.tcl | 75 +++++++++++++++++- .../write/writeProjectParameters.tcl | 5 +- 11 files changed, 78 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/Results.spd b/kratos.gid/apps/PfemFluid/xml/Results.spd index 4a4e1b05c..45234d466 100644 --- a/kratos.gid/apps/PfemFluid/xml/Results.spd +++ b/kratos.gid/apps/PfemFluid/xml/Results.spd @@ -12,7 +12,8 @@ - + + diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 15eb880ca..625b11d09 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -156,7 +156,7 @@ proc PfemThermic::examples::TreeAssignationThermicConvection {args} { spdAux::SetValuesOnBasePath $xpath $parameters # Output - set parameters [list OutputControlType time OutputDeltaTime 0.1] + set parameters [list OutputControlType time OutputDeltaTime 0.01] set xpath [spdAux::getRoute "Results"] spdAux::SetValuesOnBasePath $xpath $parameters diff --git a/kratos.gid/apps/PfemThermic/images/exampleConvection.png b/kratos.gid/apps/PfemThermic/images/exampleConvection.png index c46426babe79c683f6c673d038f8518ed94252f8..66c439a7d1b6f4a638796971408ed2ab7313f707 100644 GIT binary patch literal 6330 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 literal 471 zcmeAS@N?(olHy`uVBq!ia0vp^DIm&%|=sI~9Gn0$xw9C#4T@{nkwP(z|82@ZeaY;|(Q|Xl0c%BQPj^{qxeyf$p`9b3*C{dX=3x5*W8D9%bly-cYI%d^339MulK&M`@>kH XUCp$ud5=z`PxdH;d;hxdo)d4Bso&u>pU&Eo(9ZU6@W00=h<$@6Ej z|050cpB^E<$^ZbMPuxhZ3_k1c{E$#I6Wwv1UJaJ!0EgX(Ngl zjzZ=29CstEW_iqUdA(^mQW^T`>tkhco*kT@S-A4sD3>$mScC}vhDHmC2MGcPFp+u$ z1DD!DjO-4$kOU4TiGd$V)6BIy&=EaGOWF{*7?gFb*!UK~h~8@Z>q{b97zlR=%8D0) zBB{WRo+HR3m@JENvEwZE{|DL8QQ>=d@}T~zVOv3v{LpOeACcjgK{LUasP)|3jo;p8 zy9yczZTDR-H~x2o+bGei^7ym%OvAFOs@Tx-M{W5Gfp{p1>W5)%udkzaObxPR7sGRXR`sVJ0lJ`+H zYXzqqJEp&u9D_lz{%zi|cX&9=bZxL`6X%&+(oFO@vuI?`*=WK$r-cb>n+RLfcllDITE5mAcFey}~`OFpL6r-5B zWi}Lnc0d<%-6!z&>^p7x!uZZ$f{A~u&f2$aS#%??e3Vm)+WK1+_#|M#Zw8cLA)tsI zcWLZC5oK~S8aBm={QfdGlBRmCb!@8|M{mFKXzKdf=;s$f!dGn1w!MV-RS2BwH<_-U|2jQiIvF(mOcLl^lY zCsF^tf+0qpW#hog_n6xB`cy4;Jf&-*E4)+G-|KFvPU)B~PSl)Yd@=qIAtZZxWlWzP zo^dOaxH{@wHPU4*&9^h>t>&3&P0kuTUJV*3RWGdoXvQOsYeiPR0+bs*6%< zRZ_ipt+{pUnr*oP^w>@+9AR%nSm5PRda?SU6W{Jt)Q)PIs4r^?lCj-$mNZCsSKgy+ z-4y@$OUc%5uQ(9eR8H95xN2r!&AkAHPV2DPz4VnVEnuJr0-VbI^98S!@;XkV^g`it zpyT+M$&|i88!AnTeT6(01(g9snvDyh3D=K!KN(5EZrjI}J>C5bW&VfXcu|vATZ9tm zZ$DR+WRl23AYlO%!fObe1XZcR<_t?FEC^b>V4$ zbxK~&C+;}jOOe2q?W>P#!a@SXIS|jQ=d9xmj9K6H-ZlUptE)uk@@(JFv=zGU>thD% zV&lDi-PLe#v+Lu1YR?g*%A36tDzp48k}%avzoA`VJ^c41ed^Si@EzaW z8EAGz2Sb6WWQ?1Swq_*kkDj3yJr}23R?#iOMY$B9h5!&p`Wj zld%FQD$o0t*MZ-ai@o@F)8`?`J91I&9It0mbvE$MkB3f#r|IOr7SDo+xrl`+n!7J_ z+j8O*iu_cZoXh2Zk_dOCUa710j+~!$AsC_iQr+Ov)N)um0|S%R^fLvoXuF<>;Wz=` zz7el&SiVJ%F2HH`?e~V9Bo2WC@!4Sc$j5R*Xz6u-DnvwZHuTjMBA7at$_OYSr?>+2 zpy+gxtu6)hIW(Gyv1c5zDFL}*3Nj`CL&^5PB?oy`oE7mg{$u6cl|Jl%{i4)RX+k|e Vh|ECo_W%5JfE(F^B-!Vm^bZ86u?heH literal 551 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 VaLxDh=I^TrurjwZt2OmX{4Wf#^-cf) literal 617 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 literal 647 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 Ms_Cg>RAAx%1GVaXUjP6A literal 1058 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 Date: Fri, 20 Nov 2020 11:51:30 +0100 Subject: [PATCH 113/556] hotfix linux paths --- kratos.gid/apps/Examples/xml/examples.xml | 34 +++++++++---------- .../scripts/Controllers/ExamplesWindow.tcl | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 6a6c65973..d67b9d9cc 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -1,23 +1,23 @@ - + - - - + + + - - - + + + - - - - - + + + + + - - - - - + + + + + diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 7d38d4795..535b626f1 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -206,7 +206,7 @@ proc Examples::DestroyExamplesWindow {} { proc Examples::ResolveLinks { } { variable doc - set examples_node [$doc selectNodes "/Examples"] + set examples_node [$doc selectNodes "/examples"] foreach link [$examples_node getElementsByTagName link] { catch { set xmlfd [tDOM::xmlOpenFile [file join $::Kratos::kratos_private(Path) [$link @path]]] From 41d6391b18b170b66a22434763583e79c7b194fb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Nov 2020 12:14:01 +0100 Subject: [PATCH 114/556] fix buoyancy and thermic tests --- .../apps/Buoyancy/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/Buoyancy/xml/Main.spd | 4 ++-- kratos.gid/apps/Buoyancy/xml/Materials.xml | 4 ++-- kratos.gid/apps/Buoyancy/xml/Parts.spd | 4 ++-- .../images/HeatedSquare2D.png | Bin 0 -> 10944 bytes .../apps/ConvectionDiffusion/xml/Parts.spd | 4 ---- kratos.gid/apps/EmbeddedFluid/xml/Materials.xml | 4 ++-- kratos.gid/apps/Pfem/xml/Materials.xml | 2 +- .../apps/PotentialFluid/xml/Materials.xml | 4 ++-- kratos.gid/scripts/Controllers/CommonProcs.tcl | 4 +++- 10 files changed, 15 insertions(+), 17 deletions(-) create mode 100644 kratos.gid/apps/ConvectionDiffusion/images/HeatedSquare2D.png diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index 05222050b..eff466063 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -133,7 +133,7 @@ proc Buoyancy::examples::TreeAssignation2D {args} { # Fluid Parts set fluidParts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] - set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.2039 DYNAMIC_VISCOSITY 0.000587 CONDUCTIVITY 0.83052 SPECIFIC_HEAT 1004.84] + set props [list Element QSVMS$nd ConstitutiveLaw Newtonian DENSITY 1.2039 DYNAMIC_VISCOSITY 0.000587 CONDUCTIVITY 0.83052 SPECIFIC_HEAT 1004.84] spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions [spdAux::getRoute "FLBC"] diff --git a/kratos.gid/apps/Buoyancy/xml/Main.spd b/kratos.gid/apps/Buoyancy/xml/Main.spd index f6c9f74d3..e65c726bf 100644 --- a/kratos.gid/apps/Buoyancy/xml/Main.spd +++ b/kratos.gid/apps/Buoyancy/xml/Main.spd @@ -4,7 +4,7 @@ - + @@ -13,7 +13,7 @@ - + diff --git a/kratos.gid/apps/Buoyancy/xml/Materials.xml b/kratos.gid/apps/Buoyancy/xml/Materials.xml index a53ca0264..41d9023d6 100644 --- a/kratos.gid/apps/Buoyancy/xml/Materials.xml +++ b/kratos.gid/apps/Buoyancy/xml/Materials.xml @@ -3,7 +3,7 @@ - + @@ -11,7 +11,7 @@ - + diff --git a/kratos.gid/apps/Buoyancy/xml/Parts.spd b/kratos.gid/apps/Buoyancy/xml/Parts.spd index d9f66ff24..7ded42446 100644 --- a/kratos.gid/apps/Buoyancy/xml/Parts.spd +++ b/kratos.gid/apps/Buoyancy/xml/Parts.spd @@ -1,7 +1,7 @@ - - + + diff --git a/kratos.gid/apps/ConvectionDiffusion/images/HeatedSquare2D.png b/kratos.gid/apps/ConvectionDiffusion/images/HeatedSquare2D.png new file mode 100644 index 0000000000000000000000000000000000000000..505987ac7761dfacc91c5be718ba154b40b8deec GIT binary patch literal 10944 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd index 85c036c28..d0270f331 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd @@ -9,9 +9,5 @@ - - - - \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml b/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml index 1a0bdd602..3442c57a7 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml +++ b/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml @@ -3,13 +3,13 @@ - + - + diff --git a/kratos.gid/apps/Pfem/xml/Materials.xml b/kratos.gid/apps/Pfem/xml/Materials.xml index d4d08add1..1f9752b6d 100644 --- a/kratos.gid/apps/Pfem/xml/Materials.xml +++ b/kratos.gid/apps/Pfem/xml/Materials.xml @@ -45,7 +45,7 @@ - + diff --git a/kratos.gid/apps/PotentialFluid/xml/Materials.xml b/kratos.gid/apps/PotentialFluid/xml/Materials.xml index be3d18b3b..1b2f8262b 100644 --- a/kratos.gid/apps/PotentialFluid/xml/Materials.xml +++ b/kratos.gid/apps/PotentialFluid/xml/Materials.xml @@ -4,13 +4,13 @@ - + - + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 0328e70fc..c2769e40a 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -730,8 +730,10 @@ proc spdAux::ProcGetMaterialsList { domNode args } { set appid [spdAux::GetAppIdFromNode $domNode] set mats_un [apps::getAppUniqueName $appid Materials] set xp3 [spdAux::getRoute $mats_un] + + # set xp3 [spdAux::getRoute $mats_un] set parentNode [$domNode selectNodes $xp3] - set const_law_name [get_domnode_attribute [$domNode selectNodes "../value\[@n = 'ConstitutiveLaw'\]"] v] + set const_law_name [write::getValueByNode [$domNode selectNodes "../value\[@n = 'ConstitutiveLaw'\]"] ] set filters [list ] if {$const_law_name != ""} { set const_law [Model::getConstitutiveLaw $const_law_name] From b1361085c469ffb7681b9615bd5a9a167e3e876a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Nov 2020 12:28:54 +0100 Subject: [PATCH 115/556] Es horroroso esto --- kratos.gid/apps/Buoyancy/xml/Procs.spd | 5 +++++ kratos.gid/apps/EmbeddedFluid/xml/Procs.spd | 15 ++++++++++----- kratos.gid/apps/FSI/xml/Procs.spd | 5 +++++ kratos.gid/apps/FluidDEM/xml/Procs.spd | 5 +++++ kratos.gid/apps/PotentialFluid/xml/Procs.spd | 5 +++++ kratos.gid/apps/StenosisWizard/xml/Procs.spd | 5 +++++ 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/xml/Procs.spd b/kratos.gid/apps/Buoyancy/xml/Procs.spd index e8a6eb6d3..7c699398c 100644 --- a/kratos.gid/apps/Buoyancy/xml/Procs.spd +++ b/kratos.gid/apps/Buoyancy/xml/Procs.spd @@ -142,4 +142,9 @@ } ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Procs.spd b/kratos.gid/apps/EmbeddedFluid/xml/Procs.spd index 53779c99b..f2871707d 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/Procs.spd +++ b/kratos.gid/apps/EmbeddedFluid/xml/Procs.spd @@ -1,12 +1,12 @@ - - + - - + 1} { foreach group [lrange $childs 1 end] {$group delete} @@ -16,7 +16,7 @@ ]]> - + + + \ No newline at end of file diff --git a/kratos.gid/apps/FSI/xml/Procs.spd b/kratos.gid/apps/FSI/xml/Procs.spd index e290687be..9f1f4c90f 100644 --- a/kratos.gid/apps/FSI/xml/Procs.spd +++ b/kratos.gid/apps/FSI/xml/Procs.spd @@ -111,5 +111,10 @@ return [Structural::xml::ProcCheckNodalConditionStateStructural $domNode $args] ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/xml/Procs.spd b/kratos.gid/apps/FluidDEM/xml/Procs.spd index 79989eea3..bec991ab5 100644 --- a/kratos.gid/apps/FluidDEM/xml/Procs.spd +++ b/kratos.gid/apps/FluidDEM/xml/Procs.spd @@ -56,4 +56,9 @@ return [DEM::xml::ProcGetDEMPartsOvWhat $domNode $args] ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/xml/Procs.spd b/kratos.gid/apps/PotentialFluid/xml/Procs.spd index cf2089264..4f9570707 100644 --- a/kratos.gid/apps/PotentialFluid/xml/Procs.spd +++ b/kratos.gid/apps/PotentialFluid/xml/Procs.spd @@ -35,4 +35,9 @@ return $r ]]> + + + \ No newline at end of file diff --git a/kratos.gid/apps/StenosisWizard/xml/Procs.spd b/kratos.gid/apps/StenosisWizard/xml/Procs.spd index 53779c99b..bb0205fb1 100644 --- a/kratos.gid/apps/StenosisWizard/xml/Procs.spd +++ b/kratos.gid/apps/StenosisWizard/xml/Procs.spd @@ -35,4 +35,9 @@ return $r ]]> + + + \ No newline at end of file From 0c4d284d0188f5fe5314ef0aac5b5b589dfc7334 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Nov 2020 13:27:29 +0100 Subject: [PATCH 116/556] smoother select example that changes app --- kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 535b626f1..3673dacb2 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -186,9 +186,11 @@ proc Examples::LaunchExample {example_app example_dim example_cmd} { if { $retval == "cancel" } { return } } Examples::DestroyExamplesWindow - - GiD_Process escape escape escape escape escape Mescape Files New No - + Kratos::ResetModel + Model::DestroyEverything + set ::problemtype_current(CustomLibAutomatic) 1 + gid_common_problemtype_init_customlib_automatic $Kratos::kratos_private(Path) + set ::problemtype_current(CustomLibAutomatic) 0 spdAux::SetSpatialDimmension $example_dim apps::setActiveApp $example_app $example_cmd From 970580a8fc269c9c0aaa1f2c14b8d46f96347083 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Nov 2020 13:42:04 +0100 Subject: [PATCH 117/556] missing update --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 1c22545ab..032e30a93 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -30,6 +30,7 @@ proc spdAux::SetValuesOnBaseNode {base_path prop_value_pairs} { set propnode [$base_path selectNodes "./value\[@n = '$prop'\]"] if {$propnode ne "" } { $propnode setAttribute v $val + catch {get_domnode_attribute $propnode dict} } else { W "Warning - Couldn't find property $prop" } From 8536a9fa500cbe060e01a986460b5d27ca48b32e Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 20 Nov 2020 19:44:41 +0100 Subject: [PATCH 118/556] Correction to PfemFluid examples --- kratos.gid/apps/Examples/xml/examples.xml | 3 ++- kratos.gid/apps/PfemFluid/examples/examples.xml | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index 419ba0cc6..3f58af3be 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -20,4 +20,5 @@ - + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml index 7d9dcaf7e..c0bf3f396 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.xml +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -4,8 +4,4 @@ - - - - \ No newline at end of file From 64b71d96e821b1c63569152c632c81cecaef23b4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Nov 2020 23:31:52 +0100 Subject: [PATCH 119/556] img example --- .../apps/Buoyancy/images/HeatedSquare2D.png | Bin 0 -> 11523 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 kratos.gid/apps/Buoyancy/images/HeatedSquare2D.png diff --git a/kratos.gid/apps/Buoyancy/images/HeatedSquare2D.png b/kratos.gid/apps/Buoyancy/images/HeatedSquare2D.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a5736a4c17eb0671d1b7e0635a09353258629b GIT binary patch literal 11523 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 literal 0 HcmV?d00001 From 5dc00beebf50e490f587592d2b6ecad2b05d496f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Nov 2020 22:56:21 +0100 Subject: [PATCH 120/556] hotfix #774 --- .../examples/HeatedSquare.tcl | 23 +++++++------------ .../examples/cylinder_cooling.tcl | 18 +++++++-------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index c6c824f1c..54be44722 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -6,8 +6,8 @@ proc ::ConjugateHeatTransfer::examples::HeatedSquare {args} { if { $retval == "cancel" } { return } } DrawSquareGeometry$::Model::SpatialDimension - AssignGroups$::Model::SpatialDimension - TreeAssignation$::Model::SpatialDimension + HeatedSquareAssignGroups$::Model::SpatialDimension + HeatedSquareTreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -72,7 +72,7 @@ proc ConjugateHeatTransfer::examples::DrawSquareGeometry2D {args} { # Group assign -proc ConjugateHeatTransfer::examples::AssignGroups2D {args} { +proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups2D {args} { # Create the groups for the fluid GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -119,7 +119,7 @@ proc ConjugateHeatTransfer::examples::AssignGroups2D {args} { GiD_Groups edit color Heating_Left_Wall "#3b3b3bff" GiD_EntitiesGroups assign Heating_Left_Wall lines 8 } -proc ConjugateHeatTransfer::examples::AssignGroups3D {args} { +proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups3D {args} { # Create the groups # GiD_Groups create Fluid # GiD_Groups edit color Fluid "#26d1a8ff" @@ -143,11 +143,11 @@ proc ConjugateHeatTransfer::examples::AssignGroups3D {args} { } # Tree assign -proc ConjugateHeatTransfer::examples::TreeAssignation3D {args} { +proc ConjugateHeatTransfer::examples::HeatedSquareTreeAssignation3D {args} { # TreeAssignationCylinderInFlow2D # AddCuts } -proc ConjugateHeatTransfer::examples::TreeAssignation2D {args} { +proc ConjugateHeatTransfer::examples::HeatedSquareTreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -162,15 +162,8 @@ proc ConjugateHeatTransfer::examples::TreeAssignation2D {args} { set parts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $parts Fluid] set props [list Element Monolithic$nd Material Water ConstitutiveLaw Newtonian] - foreach {prop val} $props { - set propnode [$fluidNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Fluid $prop" - } - } - + spdAux::SetValuesOnBaseNode $fluidNode $props + # Fluid conditions set fluid_conditions [spdAux::getRoute "FLBC"] set fluid_noslip "$fluid_conditions/condition\[@n='NoSlip$nd'\]" diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl index 2bb2d86b9..c03b6bd9e 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl @@ -7,9 +7,9 @@ proc ::ConjugateHeatTransfer::examples::CylinderCooling {args} { } DrawCylinderCoolingGeometry$::Model::SpatialDimension - AssignGroups$::Model::SpatialDimension - TreeAssignation$::Model::SpatialDimension - AssignMeshSizes$::Model::SpatialDimension + CylinderCoolingAssignGroups$::Model::SpatialDimension + CylinderCoolingTreeAssignation$::Model::SpatialDimension + CylinderCoolingAssignMeshSizes$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -68,7 +68,7 @@ proc ConjugateHeatTransfer::examples::DrawCylinderCoolingGeometry3D {args} { } # Groups assign -proc ConjugateHeatTransfer::examples::AssignGroups2D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingAssignGroups2D {args} { # Create the groups for the fluid GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -104,12 +104,12 @@ proc ConjugateHeatTransfer::examples::AssignGroups2D {args} { GiD_EntitiesGroups assign Solid_Interface lines 6 } -proc ConjugateHeatTransfer::examples::AssignGroups3D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingAssignGroups3D {args} { # To be implemented } # Tree assign -proc ConjugateHeatTransfer::examples::TreeAssignation2D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -211,12 +211,12 @@ proc ConjugateHeatTransfer::examples::TreeAssignation2D {args} { spdAux::RequestRefresh } -proc ConjugateHeatTransfer::examples::TreeAssignation3D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation3D {args} { # TODO: To be implemented } # Assign mesh settings and sizes -proc ConjugateHeatTransfer::examples::AssignMeshSizes2D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingAssignMeshSizes2D {args} { # Assign centered structured triangular mesh in the solid cylinder GiD_Process Mescape Meshing ElemType Triangle 2 escape escape GiD_Process MEscape Meshing CenterStruct Assign 0.0 0.5 10 110 2 escape escape @@ -231,6 +231,6 @@ proc ConjugateHeatTransfer::examples::AssignMeshSizes2D {args} { GiD_Process Mescape Meshing Structured Lines 120 6 escape escape } -proc ConjugateHeatTransfer::examples::AssignMeshSizes3D {args} { +proc ConjugateHeatTransfer::examples::CylinderCoolingAssignMeshSizes3D {args} { # To be implemented } \ No newline at end of file From f2028d9fd533e6b299606c21239cc696e572a215 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Nov 2020 23:38:56 +0100 Subject: [PATCH 121/556] Fixed buoyancy --- kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/Buoyancy/write/write.tcl | 2 +- kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml | 14 ++++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index eff466063..98d00a27e 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -133,7 +133,7 @@ proc Buoyancy::examples::TreeAssignation2D {args} { # Fluid Parts set fluidParts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] - set props [list Element QSVMS$nd ConstitutiveLaw Newtonian DENSITY 1.2039 DYNAMIC_VISCOSITY 0.000587 CONDUCTIVITY 0.83052 SPECIFIC_HEAT 1004.84] + set props [list Element QSVMS$nd ConstitutiveLaw Newtonian2DLaw DENSITY 1.2039 DYNAMIC_VISCOSITY 0.000587 CONDUCTIVITY 0.83052 SPECIFIC_HEAT 1004.84] spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions [spdAux::getRoute "FLBC"] diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 852392158..b17320f16 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -46,7 +46,7 @@ proc Buoyancy::write::writeModelPartEvent { } { } proc Buoyancy::write::writeCustomFilesEvent { } { # Materials - Buoyancy::write::WriteMaterialsFile False + Buoyancy::write::WriteMaterialsFile True # Main python script set orig_name "MainKratos.py" diff --git a/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml b/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml index c5f0136fb..f8f0278de 100644 --- a/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml @@ -1,7 +1,17 @@ - - + + + + + + + + + + + + From 3b8a95665e84b1eb6dbd5382066d79c8ae12add1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Nov 2020 23:45:23 +0100 Subject: [PATCH 122/556] fix conjugate heat transfer --- kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl | 2 +- .../apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl | 2 +- .../apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl | 2 +- kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl | 5 +++-- kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl | 4 ++-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index ddec77420..dd9ffa8bb 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -165,7 +165,7 @@ proc ConjugateHeatTransfer::examples::TreeAssignationBFS2D {args} { # Fluid parts set parts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $parts Fluid] - set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.0 DYNAMIC_VISCOSITY 0.001875 CONDUCTIVITY 1.0 SPECIFIC_HEAT 0.002640845] + set props [list Element Monolithic$nd ConstitutiveLaw Newtonian2DLaw DENSITY 1.0 DYNAMIC_VISCOSITY 0.001875 CONDUCTIVITY 1.0 SPECIFIC_HEAT 0.002640845] spdAux::SetValuesOnBaseNode $fluidNode $props # Fluid boundary conditions diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index 54be44722..afc6928e5 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -161,7 +161,7 @@ proc ConjugateHeatTransfer::examples::HeatedSquareTreeAssignation2D {args} { # Fluid Parts set parts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $parts Fluid] - set props [list Element Monolithic$nd Material Water ConstitutiveLaw Newtonian] + set props [list Element Monolithic$nd Material Water ConstitutiveLaw Newtonian2DLaw] spdAux::SetValuesOnBaseNode $fluidNode $props # Fluid conditions diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl index c03b6bd9e..683445ef4 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl @@ -123,7 +123,7 @@ proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation2D {args} { ## Fluid parts set parts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $parts Fluid] - set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.0 DYNAMIC_VISCOSITY 0.00125 CONDUCTIVITY 0.625 SPECIFIC_HEAT 1000.0] + set props [list Element Monolithic$nd ConstitutiveLaw Newtonian2DLaw DENSITY 1.0 DYNAMIC_VISCOSITY 0.00125 CONDUCTIVITY 0.625 SPECIFIC_HEAT 1000.0] spdAux::SetValuesOnBaseNode $fluidNode $props ## Thermal parts diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index 0f97f56c7..fb8b0b75b 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -50,7 +50,7 @@ proc ConjugateHeatTransfer::write::writeModelPartEvent { } { proc ConjugateHeatTransfer::write::writeCustomFilesEvent { } { # Materials - WriteMaterialsFile False True + WriteMaterialsFile # Main python script set orig_name [GetAttribute main_script_file] @@ -75,7 +75,8 @@ proc ConjugateHeatTransfer::write::PrepareBuoyancy { } { proc ConjugateHeatTransfer::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { Buoyancy::write::WriteMaterialsFile $write_const_law $include_modelpart_name - ConvectionDiffusion::write::WriteMaterialsFile $write_const_law $include_modelpart_name + # ConvectionDiffusion::write::WriteMaterialsFile $write_const_law $include_modelpart_name + ConvectionDiffusion::write::WriteMaterialsFile False $include_modelpart_name } proc Buoyancy::write::GetModelPartName { } { diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 992d5a629..3d84e1af6 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -155,8 +155,8 @@ proc Fluid::examples::TreeAssignationCylinderInFlow2D {args} { # Fluid Parts set fluidParts [spdAux::getRoute "FLParts"] set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] - # set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.0 DYNAMIC_VISCOSITY 0.002 YIELD_STRESS 0 POWER_LAW_K 1 POWER_LAW_N 1] - set props [list Element Monolithic$nd ConstitutiveLaw Newtonian DENSITY 1.0 DYNAMIC_VISCOSITY 0.002] + # set props [list Element Monolithic$nd ConstitutiveLaw Newtonian2DLaw DENSITY 1.0 DYNAMIC_VISCOSITY 0.002 YIELD_STRESS 0 POWER_LAW_K 1 POWER_LAW_N 1] + set props [list Element Monolithic$nd ConstitutiveLaw Newtonian2DLaw DENSITY 1.0 DYNAMIC_VISCOSITY 0.002] spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions [spdAux::getRoute "FLBC"] From 0bf52b5d5d5d0273e06318091f3726e81b5b8fab Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 22 Nov 2020 00:11:23 +0100 Subject: [PATCH 123/556] Missing images --- .../apps/ConjugateHeatTransfer/images/BFS2D.png | Bin 0 -> 3345 bytes .../images/CylinderCooling2D.png | Bin 0 -> 3746 bytes .../images/HeatedSquare2D.png | Bin 0 -> 4405 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 kratos.gid/apps/ConjugateHeatTransfer/images/BFS2D.png create mode 100644 kratos.gid/apps/ConjugateHeatTransfer/images/CylinderCooling2D.png create mode 100644 kratos.gid/apps/ConjugateHeatTransfer/images/HeatedSquare2D.png diff --git a/kratos.gid/apps/ConjugateHeatTransfer/images/BFS2D.png b/kratos.gid/apps/ConjugateHeatTransfer/images/BFS2D.png new file mode 100644 index 0000000000000000000000000000000000000000..2c427e8f1c51a3e02e8399570044c14923fa8a1c GIT binary patch literal 3345 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 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ConjugateHeatTransfer/images/CylinderCooling2D.png b/kratos.gid/apps/ConjugateHeatTransfer/images/CylinderCooling2D.png new file mode 100644 index 0000000000000000000000000000000000000000..b159a58f0b796b1fb4219a8deabc6ff8548da9e7 GIT binary patch literal 3746 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 Qmn(^k^vysGx=t_u5B#tlO#lD@ literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ConjugateHeatTransfer/images/HeatedSquare2D.png b/kratos.gid/apps/ConjugateHeatTransfer/images/HeatedSquare2D.png new file mode 100644 index 0000000000000000000000000000000000000000..855e5845a432123675996ac15070ee3e6154ba28 GIT binary patch literal 4405 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 VnHBu&`+rjh0HO*7S3S20{U5t1YM=lB literal 0 HcmV?d00001 From 6b90f2026d3f031b130d333b0224cb0a2ff7df7c Mon Sep 17 00:00:00 2001 From: rlrangel Date: Mon, 23 Nov 2020 13:08:01 +0100 Subject: [PATCH 124/556] Adding heat flux in pfemThermic --- .../apps/PfemThermic/xml/NodalConditions.xml | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml index 27045cdee..2345d4be5 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml @@ -83,7 +83,7 @@ ProcessName = "AssignScalarVariableProcess" VariableName = "TEMPERATURE" can_be_initial = "true" - Interval = "Initial" + Interval = "Total" unit_magnitude = "Temp" units = "K" App = "ConvectionDiffusion" @@ -100,7 +100,7 @@ - + @@ -109,7 +109,7 @@ pn = "External heat flux" ProcessName = "AssignScalarVariableProcess" VariableName = "FACE_HEAT_FLUX" - Interval = "True" + Interval = "Total" unit_magnitude = "Power/L^2" units = "W/m^2" App = "ConvectionDiffusion" @@ -131,4 +131,20 @@ + + + + + + + + From 2a29afb00ab31464e3ee483679f3507f75300916 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 24 Nov 2020 11:55:30 +0100 Subject: [PATCH 125/556] Use the proper write function --- kratos.gid/apps/Structural/write/write.tcl | 47 +++++++++++----------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 8a7fa9eb7..6574cef04 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -151,7 +151,7 @@ proc Structural::write::writeContacts { } { foreach slave_group [$root selectNodes $xp_slave] { if {$slave_group ne ""} { set slave_groupid_raw [$slave_group @n] - set slave_group_pair_id [get_domnode_attribute [$slave_group selectNodes "./value\[@n='pair'\]"] v] + set slave_group_pair_id [write::getValueByNode [$slave_group selectNodes "./value\[@n='pair'\]"] ] set slave_groupid [write::GetWriteGroupName $slave_groupid_raw] set prev [list ] if {[dict exists $ContactsDict Slaves $slave_group_pair_id]} {set prev [dict get $ContactsDict Slaves $slave_group_pair_id]} @@ -165,7 +165,7 @@ proc Structural::write::writeContacts { } { if {$master_group ne ""} { set master_groupid_raw [$master_group @n] set master_groupid [write::GetWriteGroupName $master_groupid_raw] - set master_group_pair_id [get_domnode_attribute [$master_group selectNodes "./value\[@n='pair'\]"] v] + set master_group_pair_id [write::getValueByNode [$master_group selectNodes "./value\[@n='pair'\]"] ] set prev [list ] if {[dict exists $ContactsDict Masters $master_group_pair_id]} { set prev [dict get $ContactsDict Masters $master_group_pair_id] @@ -205,13 +205,14 @@ proc Structural::write::WriteMaterialsFile { } { proc Structural::write::GetUsedElements { {get "Objects"} } { set lista [list ] foreach gNode [Structural::write::GetPartsGroups] { - set elem_name [get_domnode_attribute [$gNode selectNodes ".//value\[@n='Element']"] v] + set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] set e [Model::getElement $elem_name] if {$get eq "Name"} { set e [$e getName] } lappend lista $e } return $lista } + proc Structural::write::GetPartsGroups { {get "Objects"} } { set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" set lista [list ] @@ -226,7 +227,7 @@ proc Structural::write::GetPartsGroups { {get "Objects"} } { proc Structural::write::writeLocalAxes { } { set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set elem_name [get_domnode_attribute [$gNode selectNodes ".//value\[@n='Element']"] v] + set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] set e [Model::getElement $elem_name] if {[write::isBooleanTrue [$e getAttribute "RequiresLocalAxes"]]} { set group [$gNode @n] @@ -266,25 +267,25 @@ proc Structural::write::writeHinges { } { set first_list [list ] set last_list [list ] if {$::Model::SpatialDimension eq "3D"} { - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstDisplacementX']"] v]]} {lappend first_list 0} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstDisplacementY']"] v]]} {lappend first_list 1} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstDisplacementZ']"] v]]} {lappend first_list 2} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstMomentX']"] v]]} {lappend first_list 3} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstMomentY']"] v]]} {lappend first_list 4} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstMomentZ']"] v]]} {lappend first_list 5} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondDisplacementX']"] v]]} {lappend last_list 6} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondDisplacementY']"] v]]} {lappend last_list 7} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondDisplacementZ']"] v]]} {lappend last_list 8} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondMomentX']"] v]]} {lappend last_list 9} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondMomentY']"] v]]} {lappend last_list 10} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondMomentZ']"] v]]} {lappend last_list 11} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstDisplacementX']"] ]]} {lappend first_list 0} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstDisplacementY']"] ]]} {lappend first_list 1} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstDisplacementZ']"] ]]} {lappend first_list 2} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstMomentX']"] ]]} {lappend first_list 3} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstMomentY']"] ]]} {lappend first_list 4} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstMomentZ']"] ]]} {lappend first_list 5} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondDisplacementX']"] ]]} {lappend last_list 6} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondDisplacementY']"] ]]} {lappend last_list 7} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondDisplacementZ']"] ]]} {lappend last_list 8} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondMomentX']"] ]]} {lappend last_list 9} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondMomentY']"] ]]} {lappend last_list 10} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondMomentZ']"] ]]} {lappend last_list 11} } else { - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstDisplacementX']"] v]]} {lappend first_list 0} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstDisplacementY']"] v]]} {lappend first_list 1} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='FirstMomentZ']"] v]]} {lappend first_list 2} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondDisplacementX']"] v]]} {lappend last_list 3} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondDisplacementY']"] v]]} {lappend last_list 4} - if {[write::isBooleanTrue [get_domnode_attribute [$gNode selectNodes ".//value\[@n='SecondMomentZ']"] v]]} {lappend last_list 5} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstDisplacementX']"] ]]} {lappend first_list 0} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstDisplacementY']"] ]]} {lappend first_list 1} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='FirstMomentZ']"] ]]} {lappend first_list 2} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondDisplacementX']"] ]]} {lappend last_list 3} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondDisplacementY']"] ]]} {lappend last_list 4} + if {[write::isBooleanTrue [write::getValueByNode [$gNode selectNodes ".//value\[@n='SecondMomentZ']"] ]]} {lappend last_list 5} } # Write Left and Rigth end of each geometrical bar @@ -403,7 +404,7 @@ proc Structural::write::GroupUsesSmallDisplacement {group used_small_disp_elemen set group_nodes [GiD_EntitiesGroups get $group nodes] foreach part_group_small_disp [Structural::write::GetPartsGroups] { - set elem_name [get_domnode_attribute [$part_group_small_disp selectNodes ".//value\[@n='Element']"] v] + set elem_name [write::getValueByNode [$part_group_small_disp selectNodes ".//value\[@n='Element']"] ] set elem [Model::getElement $elem_name] if {$elem in $used_small_disp_elements} { if {[objarray length [objarray intersection -sorted $group_nodes [GiD_EntitiesGroups get [$part_group_small_disp @n] nodes] ] ] > 0} {set ret 1; break} From a6fb04ad2847f6e3782fe1a230d91169f96078a6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 24 Nov 2020 19:02:27 +0100 Subject: [PATCH 126/556] New util to assign child entities to parents. CAUTION --- kratos.gid/apps/Structural/write/write.tcl | 15 +++++++++++++++ kratos.gid/scripts/Writing/WriteConditions.tcl | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 6574cef04..c57912e75 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -413,6 +413,21 @@ proc Structural::write::GroupUsesSmallDisplacement {group used_small_disp_elemen return $ret } +proc Structural::write::PrepareSubGroupsAssignChildEntitiesOnParents { } { + # list of groups sorted by lenght. so we always treat childs first and parents last + set groups_list [lsort -command {apply {{a b} {expr {[string length $a] - [string length $b]}}}} [GiD_Groups list]] + foreach group $groups_list { + set parent [GiD_Groups get parent $group] + if {$parent ne ""} { + foreach elem [GiD_Groups get allowed_types $parent] { + if {$elem ni [list "edges" "faces"]} { + GiD_EntitiesGroups assign $parent $elem [GiD_EntitiesGroups get $group $elem] + } + } + } + } +} + proc Structural::write::writeCustomFilesEvent { } { WriteMaterialsFile diff --git a/kratos.gid/scripts/Writing/WriteConditions.tcl b/kratos.gid/scripts/Writing/WriteConditions.tcl index 70b51faf7..4c4ba6c95 100644 --- a/kratos.gid/scripts/Writing/WriteConditions.tcl +++ b/kratos.gid/scripts/Writing/WriteConditions.tcl @@ -37,8 +37,10 @@ proc write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} if {$aux_cond ne ""} {set cond $aux_cond} set kname [$cond getTopologyKratosName $etype $nnodes] if {$kname ne ""} { - lassign [write::writeGroupCondition $groupid $kname $nnodes $iter] initial final - dict set dictGroupsIterators $groupid [list $initial $final] + if {$nnodes > 1} { + lassign [write::writeGroupCondition $groupid $kname $nnodes $iter] initial final + dict set dictGroupsIterators $groupid [list $initial $final] + } } else { # If kname eq "" => no topology feature match, condition written as nodal if {[$cond hasTopologyFeatures]} {W "$groupid assigned to $condid - Selected invalid entity $ov with $nnodes nodes - Check Conditions.xml"} @@ -65,6 +67,7 @@ proc write::writeGroupCondition {groupid kname nnodes iter} { set obj [GiD_EntitiesGroups get $groupid nodes] } else { set formats [write::GetFormatDict $groupid 0 $nnodes] + #W "$groupid [GiD_Groups list $groupid]" set elems [GiD_WriteCalculationFile connectivities -return $formats] set obj [GetListsOfNodes $elems $nnodes 2] } From 60d70aa1eab3cd6098feea503f2bc186a46f125a Mon Sep 17 00:00:00 2001 From: rlrangel Date: Tue, 24 Nov 2020 22:26:00 +0100 Subject: [PATCH 127/556] Adjustments in PfemThermic --- kratos.gid/apps/PfemThermic/xml/NodalConditions.xml | 4 +++- kratos.gid/apps/PfemThermic/xml/XmlController.tcl | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml index 2345d4be5..69694e124 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml @@ -121,6 +121,7 @@ LocalSpaceDimension = "1" SkinConditions = "True" ElementType = "Line" + ov = "line" help = "Applies an external thermal load" function = "1"> @@ -131,8 +132,9 @@ + Date: Thu, 26 Nov 2020 13:44:41 +0100 Subject: [PATCH 128/556] add timezone --- kratos.gid/kratos.tcl | 19 +++++++++++++++-- kratos.gid/scripts/Logs.tcl | 7 ++++++- kratos.gid/scripts/Menus.tcl | 1 + kratos.gid/scripts/Utils.tcl | 15 +++++++++++++ kratos.gid/scripts/Writing/Writing.tcl | 29 ++++++++++---------------- 5 files changed, 50 insertions(+), 21 deletions(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 32aab4cdd..281e6ae63 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -8,6 +8,8 @@ namespace eval Kratos { variable must_write_calc_data variable must_exist_calc_data + + variable tmp_init_mesh_time } # Hard minimum GiD Version is 14 @@ -248,6 +250,7 @@ proc Kratos::Event_LoadModelSPD { filespd } { } proc Kratos::Event_EndProblemtype { } { + Kratos::Log "End session" # New event system need an unregister if {[GidUtils::VersionCmp "14.1.4d"] >= 0 } { GiD_UnRegisterEvents PROBLEMTYPE Kratos @@ -359,8 +362,10 @@ proc Kratos::TransformProblemtype {old_dom old_filespd} { proc Kratos::Event_BeforeMeshGeneration {elementsize} { # Prepare things before meshing - - + variable tmp_init_mesh_time + set inittime [clock seconds] + set tmp_init_mesh_time $inittime + Kratos::Log "Mesh BeforeMeshGeneration start" GiD_Process Mescape Meshing MeshCriteria NoMesh Lines 1:end escape escape escape GiD_Process Mescape Meshing MeshCriteria NoMesh Surfaces 1:end escape escape escape GiD_Process Mescape Meshing MeshCriteria NoMesh Volumes 1:end escape escape escape @@ -373,6 +378,9 @@ proc Kratos::Event_BeforeMeshGeneration {elementsize} { } # Maybe the current application needs to do some extra job set ret [apps::ExecuteOnCurrentApp BeforeMeshGeneration $elementsize] + set endtime [clock seconds] + set ttime [expr {$endtime-$inittime}] + Kratos::Log "Mesh BeforeMeshGeneration end in [Duration $ttime]" return $ret } @@ -382,8 +390,12 @@ proc Kratos::Event_MeshProgress { total_percent partial_percents_0 partial_perce } proc Kratos::Event_AfterMeshGeneration {fail} { + variable tmp_init_mesh_time # Maybe the current application needs to do some extra job apps::ExecuteOnCurrentApp AfterMeshGeneration $fail + set endtime [clock seconds] + set ttime [expr {$endtime-$tmp_init_mesh_time}] + Kratos::Log "Mesh end process in [Duration $ttime]" } proc Kratos::Event_AfterRenameGroup { oldname newname } { @@ -484,6 +496,9 @@ proc Kratos::Event_SaveModelSPD { filespd } { # Let the current app implement it's Save event apps::ExecuteOnCurrentApp AfterSaveModel $filespd + + # Log it + Kratos::Log "Save model $filespd" } proc Kratos::Event_ChangedLanguage { newlan } { diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 9adda8a0e..637d25be1 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -31,7 +31,7 @@ proc Kratos::Log {msg} { variable kratos_private if {[info exists kratos_private(Log)]} { - lappend kratos_private(Log) "*~* [clock format [clock seconds] -format {%Y-%m-%d %H:%M:%S}] | $msg" + lappend kratos_private(Log) "*~* [clock format [clock seconds] -format {%Z %Y-%m-%d %H:%M:%S }] | $msg" # One of the triggers is to flush if we've stored more than 5 if {[llength $kratos_private(Log)] > 5} { @@ -64,6 +64,11 @@ proc Kratos::FlushLog { } { } +proc Kratos::ViewLog {} { + FlushLog + gid_cross_platform::open_by_extension [Kratos::GetLogFilePath] +} + #do not save preferences starting with flag gid.exe -c (that specify read only an alternative file) if { [GiD_Set SaveGidDefaults] } { Kratos::InitLog diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index 990d3736c..b5a65a650 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -136,6 +136,7 @@ proc Kratos::ChangeMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] [incr pos] PRE "" "" "" replace = if {[GidUtils::VersionCmp "14.1.4d"] <0 } { set cmd [list ChangeVariables kratos_preferences] } {set cmd [list PreferencesWindow kratos_preferences]} GiDMenu::InsertOption "Kratos" [list "Kratos preferences" ] [incr pos] PRE $cmd "" "" replace = + GiDMenu::InsertOption "Kratos" [list "View current log" ] [incr pos] PREPOST [list Kratos::ViewLog] "" "" replace = GiDMenu::InsertOption "Kratos" [list "About Kratos" ] [incr pos] PREPOST [list Kratos::About] "" "" replace = GidChangeDataLabel "Data units" "" GidChangeDataLabel "Interval" "" diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 46ad25b55..ea2079a25 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -195,4 +195,19 @@ proc Kratos::LogInitialData { } { dict set initial_data Problemtype_Git_Hash "68418871cff2b897f7fb9176827871b339fe5f91" Kratos::Log [write::tcl2json $initial_data] +} + + +proc Kratos::Duration { int_time } { + set timeList [list] + foreach div {86400 3600 60 1} mod {0 24 60 60} name {day hr min sec} { + set n [expr {$int_time / $div}] + if {$mod > 0} {set n [expr {$n % $mod}]} + if {$n > 1} { + lappend timeList "$n ${name}s" + } elseif {$n == 1} { + lappend timeList "$n $name" + } + } + return [join $timeList] } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 89df01e14..aa486efe2 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -85,6 +85,7 @@ proc write::AddConfigurationAttribute {att val} { proc write::writeEvent { filename } { update ;#else appid is empty running in batch mode with window set time_monitor [GetConfigurationAttribute time_monitor] + Kratos::Log "Write start $filename" customlib::UpdateDocument SetConfigurationAttribute dir [file dirname $filename] SetConfigurationAttribute model_name [file rootname [file tail $filename]] @@ -96,7 +97,7 @@ proc write::writeEvent { filename } { W [= "Wrong project name. Avoid boolean and numeric names."] return 1 } - if {$time_monitor} {set inittime [clock seconds]} + set inittime [clock seconds] # Set write formats depending on the user's configuration InitWriteFormats @@ -109,10 +110,12 @@ proc write::writeEvent { filename } { spdAux::ForceTreePreload #### Validate #### + Kratos::Log "Write validation $appid" set errcode [writeValidateInApp $appid] #### MDPA Write #### if {$errcode eq 0} { + Kratos::Log "Write app MDPA $appid" set errcode [writeAppMDPA $appid] } #### Project Parameters Write #### @@ -120,6 +123,7 @@ proc write::writeEvent { filename } { set filename "ProjectParameters.json" if {$errcode eq 0} { + Kratos::Log "Write project parameters $appid" set errcode [write::singleFileEvent $filename $wevent "Project Parameters"] } @@ -127,13 +131,16 @@ proc write::writeEvent { filename } { set wevent [$activeapp getWriteCustomEvent] set filename "" if {$errcode eq 0} { + Kratos::Log "Write custom event $appid" set errcode [write::singleFileEvent $filename $wevent "Custom file" 0] } + set endtime [clock seconds] + set ttime [expr {$endtime-$inittime}] if {$time_monitor} { - set endtime [clock seconds] - set ttime [expr {$endtime-$inittime}] - W "Total time: [Duration $ttime]" + W "Total time: [Kratos::Duration $ttime]" } + + Kratos::Log "Write end $appid in [Kratos::Duration $ttime]" return $errcode } @@ -473,20 +480,6 @@ proc write::WriteMPIbatFile {un} { GiD_File fclose $fd } -proc write::Duration { int_time } { - set timeList [list] - foreach div {86400 3600 60 1} mod {0 24 60 60} name {day hr min sec} { - set n [expr {$int_time / $div}] - if {$mod > 0} {set n [expr {$n % $mod}]} - if {$n > 1} { - lappend timeList "$n ${name}s" - } elseif {$n == 1} { - lappend timeList "$n $name" - } - } - return [join $timeList] -} - proc write::forceUpdateNode {node} { catch {get_domnode_attribute $node dict} catch {get_domnode_attribute $node values} From ed5ace0e301b30e87dd163885bad2831569b5cc4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Nov 2020 15:19:46 +0100 Subject: [PATCH 129/556] Store the current executable version --- kratos.gid/apps/FSI/examples/examples.tcl | 11 ---------- kratos.gid/apps/FSI/start.tcl | 4 ---- kratos.gid/kratos.tcl | 5 +++++ kratos.gid/scripts/Logs.tcl | 1 + kratos.gid/scripts/Menus.tcl | 2 +- kratos.gid/scripts/Utils.tcl | 26 +++++++++++++++++++++-- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/kratos.gid/apps/FSI/examples/examples.tcl b/kratos.gid/apps/FSI/examples/examples.tcl index a6a556e10..2ba94c582 100644 --- a/kratos.gid/apps/FSI/examples/examples.tcl +++ b/kratos.gid/apps/FSI/examples/examples.tcl @@ -8,15 +8,4 @@ proc FSI::examples::Init { } { uplevel #0 [list source [file join $::FSI::dir examples HighRiseBuilding.tcl]] } -proc FSI::examples::UpdateMenus { } { - set menu_id 7 - GiDMenu::InsertOption "Kratos" [list "Mok - Channel with flexible wall" ] [incr menu_id] PRE [list ::FSI::examples::MokChannelFlexibleWall] "" "" insertbefore = - if {$::Model::SpatialDimension eq "2D"} { - GiDMenu::InsertOption "Kratos" [list "Turek benchmark" ] [incr menu_id] PRE [list ::FSI::examples::TurekBenchmark] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "High-rise building" ] [incr menu_id] PRE [list ::FSI::examples::HighRiseBuilding] "" "" insertbefore = - } - GiDMenu::InsertOption "Kratos" [list "---"] [incr menu_id] PRE "" "" "" insertbefore = - GiDMenu::UpdateMenus -} - FSI::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index 8044e0086..1c1bf1944 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -45,10 +45,6 @@ proc ::FSI::LoadMyFiles { } { uplevel #0 [list source [file join $FSI::dir examples examples.tcl]] } -proc ::FSI::CustomMenus { } { - FSI::examples::UpdateMenus -} - proc ::FSI::GetAttribute {name} { variable attributes set value "" diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 281e6ae63..108b75550 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -157,6 +157,10 @@ proc Kratos::InitGlobalVariables {dir} { set kratos_private(ProjectIsNew) 1 # Variables from the problemtype definition (kratos.xml) array set kratos_private [ReadProblemtypeXml [file join $kratos_private(Path) kratos.xml] Infoproblemtype {Name Version CheckMinimumGiDVersion}] + # Version of the kratos executable + set kratos_private(exec_version) "dev" + # Get the exec version + Kratos::GetExecVersion } proc Kratos::LoadCommonScripts { } { @@ -501,6 +505,7 @@ proc Kratos::Event_SaveModelSPD { filespd } { Kratos::Log "Save model $filespd" } + proc Kratos::Event_ChangedLanguage { newlan } { Kratos::UpdateMenus } diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 637d25be1..40a77922f 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -65,6 +65,7 @@ proc Kratos::FlushLog { } { } proc Kratos::ViewLog {} { + package require gid_cross_platform FlushLog gid_cross_platform::open_by_extension [Kratos::GetLogFilePath] } diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index b5a65a650..6d28c17fd 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -134,7 +134,7 @@ proc Kratos::ChangeMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] [incr pos] PRE "" "" "" replace = GiDMenu::InsertOption "Kratos" [list "Import MDPA"] [incr pos] PRE [list Kratos::ReadPreW] "" "" replace = GiDMenu::InsertOption "Kratos" [list "---"] [incr pos] PRE "" "" "" replace = - if {[GidUtils::VersionCmp "14.1.4d"] <0 } { set cmd [list ChangeVariables kratos_preferences] } {set cmd [list PreferencesWindow kratos_preferences]} + if {[GidUtils::VersionCmp "14.1.4d"] <0 } { set cmd [list ChangeVariables kratos_preferences] } {set cmd [list PreferencesWindow kratos_preferences]} GiDMenu::InsertOption "Kratos" [list "Kratos preferences" ] [incr pos] PRE $cmd "" "" replace = GiDMenu::InsertOption "Kratos" [list "View current log" ] [incr pos] PREPOST [list Kratos::ViewLog] "" "" replace = GiDMenu::InsertOption "Kratos" [list "About Kratos" ] [incr pos] PREPOST [list Kratos::About] "" "" replace = diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index ea2079a25..9784993b5 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -191,8 +191,9 @@ proc Kratos::LoadEnvironment { } { proc Kratos::LogInitialData { } { set initial_data [dict create] - dict set initial_data GiD_Version [GiD_Info gidversion] - dict set initial_data Problemtype_Git_Hash "68418871cff2b897f7fb9176827871b339fe5f91" + dict set initial_data GiD_version [GiD_Info gidversion] + dict set initial_data problemtype_git_hash "68418871cff2b897f7fb9176827871b339fe5f91" + dict set initial_data executable_version $Kratos::kratos_private(exec_version) Kratos::Log [write::tcl2json $initial_data] } @@ -210,4 +211,25 @@ proc Kratos::Duration { int_time } { } } return [join $timeList] +} + + +proc Kratos::GetExecVersion {} { + catch { + variable kratos_private + set tmp_filename [GidUtils::GetTmpFilename] + if { $::tcl_platform(platform) == "unix"} {set command [file join $kratos_private(Path) exec Kratos runkratos]} {set command [file join $kratos_private(Path) exec Kratos runkratos.exe]} + set result [exec $command -c "import KratosMultiphysics as Kratos" >> $tmp_filename] + set fp [open $tmp_filename r] + set file_data [read $fp] + close $fp + file delete $tmp_filename + set data [split $file_data "\n"] + foreach line $data { + if {[string first "Multi-Physics" $line] > 0} { + set kratos_private(exec_version) [string range [string trim $line] 14 end] + break; + } + } + } } \ No newline at end of file From 253af6beb5c72685e6f7cf7a17d2d212a600a21a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Nov 2020 15:25:34 +0100 Subject: [PATCH 130/556] Flush only after 5 seconds --- kratos.gid/kratos.tcl | 2 -- kratos.gid/scripts/Logs.tcl | 9 +++++++-- kratos.gid/scripts/Utils.tcl | 4 ++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 108b75550..26a853810 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -159,8 +159,6 @@ proc Kratos::InitGlobalVariables {dir} { array set kratos_private [ReadProblemtypeXml [file join $kratos_private(Path) kratos.xml] Infoproblemtype {Name Version CheckMinimumGiDVersion}] # Version of the kratos executable set kratos_private(exec_version) "dev" - # Get the exec version - Kratos::GetExecVersion } proc Kratos::LoadCommonScripts { } { diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 40a77922f..6f867facd 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -42,6 +42,7 @@ proc Kratos::Log {msg} { proc Kratos::FlushLog { } { variable kratos_private + W "Hey" if {[info exists kratos_private(Log)]} { if {[llength $kratos_private(Log)] > 0} { set logpath [Kratos::GetLogFilePath] @@ -60,10 +61,14 @@ proc Kratos::FlushLog { } { set kratos_private(Log) [list ] } } - after 5000 {Kratos::FlushLog} } +proc Kratos::AutoFlush {} { + Kratos::FlushLog + after 5000 {Kratos::AutoFlush} +} + proc Kratos::ViewLog {} { package require gid_cross_platform FlushLog @@ -73,6 +78,6 @@ proc Kratos::ViewLog {} { #do not save preferences starting with flag gid.exe -c (that specify read only an alternative file) if { [GiD_Set SaveGidDefaults] } { Kratos::InitLog - Kratos::FlushLog + Kratos::AutoFlush } diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 9784993b5..9c252a0fa 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -190,6 +190,10 @@ proc Kratos::LoadEnvironment { } { # LOGS proc Kratos::LogInitialData { } { + + # Get the exec version + Kratos::GetExecVersion + set initial_data [dict create] dict set initial_data GiD_version [GiD_Info gidversion] dict set initial_data problemtype_git_hash "68418871cff2b897f7fb9176827871b339fe5f91" From 680a675bb78a085c4a1a07eb2dc2f42769e06678 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Nov 2020 15:38:51 +0100 Subject: [PATCH 131/556] remove comment --- kratos.gid/scripts/Logs.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 6f867facd..ce9fa0dbf 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -42,7 +42,7 @@ proc Kratos::Log {msg} { proc Kratos::FlushLog { } { variable kratos_private - W "Hey" + if {[info exists kratos_private(Log)]} { if {[llength $kratos_private(Log)] > 0} { set logpath [Kratos::GetLogFilePath] From 40b3c05f32eefe61b67b09d97da58abc142ebe34 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Nov 2020 15:53:40 +0100 Subject: [PATCH 132/556] Allow the users to select the log mode --- kratos.gid/scripts/Controllers/Preferences.xml | 5 +++++ kratos.gid/scripts/Controllers/PreferencesWindow.tcl | 3 +++ kratos.gid/scripts/Utils.tcl | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Controllers/Preferences.xml b/kratos.gid/scripts/Controllers/Preferences.xml index c269f223f..44cb82546 100644 --- a/kratos.gid/scripts/Controllers/Preferences.xml +++ b/kratos.gid/scripts/Controllers/Preferences.xml @@ -8,6 +8,11 @@ " return $node } @@ -453,7 +453,7 @@ proc spdAux::_GetComboParameterString {param inName pn v state help show_in_wind append node " actualize_tree='1' " } append node " state='$state' help='$help' show_in_window='$show_in_window'>" - # if {$base ne ""} { append node [_insert_cond_param_dependencies $base $inName] } + if {$base ne ""} { append node [_insert_cond_param_dependencies $base $inName] } append node "" return $node } @@ -476,6 +476,7 @@ proc spdAux::_insert_cond_param_dependencies {base param_name} { } } set ret "" + foreach {name values} $dep_list { set ins "" set out "" diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 00629e1e9..fbbb66d51 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -262,6 +262,7 @@ proc spdAux::insertDependencies { baseNode originUN } { set insertxpath [getRoute $originUN] set insertonnode [$root selectNodes $insertxpath] # a lo bestia, cambiar cuando sepamos inyectar la dependencia, abajo esta a medias + $insertonnode setAttribute "actualize" 1 $insertonnode setAttribute "actualize_tree" 1 ## Aun no soy capaz de insertar y que funcione From bbd7a368e861e136f42f5ce60955fd93f124acdc Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Nov 2020 14:20:17 +0100 Subject: [PATCH 144/556] Missing property --- kratos.gid/apps/CDEM/xml/SolutionStrategy.spd | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd b/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd index 510b9b5e0..ad856d9ac 100644 --- a/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd @@ -41,6 +41,7 @@ + From cfdd091a555329721917dad571ab71a27417fcf9 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Nov 2020 16:26:43 +0100 Subject: [PATCH 145/556] minor --- kratos.gid/apps/CDEM/xml/Main.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/CDEM/xml/Main.spd b/kratos.gid/apps/CDEM/xml/Main.spd index 91fbacfd3..03269c12d 100644 --- a/kratos.gid/apps/CDEM/xml/Main.spd +++ b/kratos.gid/apps/CDEM/xml/Main.spd @@ -1,5 +1,5 @@ - + From 723c95120846204d0563c73a28972f3a90c1a2de Mon Sep 17 00:00:00 2001 From: rlrangel Date: Thu, 3 Dec 2020 20:07:59 +0100 Subject: [PATCH 146/556] Free Surface flux in ThermicPfem --- .../write/writeProjectParameters.tcl | 39 ++++++++++++++----- .../write/writeProjectParameters.tcl | 36 +++++++++++++++-- .../apps/PfemThermic/xml/NodalConditions.spd | 3 +- .../apps/PfemThermic/xml/XmlController.tcl | 1 + 4 files changed, 65 insertions(+), 14 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index 756b2f870..6bf1389be 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -20,7 +20,7 @@ proc PfemFluid::write::getNewParametersDict { } { dict set projectParametersDict solver_settings $solverSettingsDict ##### problem_process_list - set problemProcessList [GetPFEM_ProblemProcessList] + set problemProcessList [GetPFEM_ProblemProcessList 0] dict set projectParametersDict problem_process_list $problemProcessList set processList [GetPFEM_ProcessList] @@ -158,10 +158,10 @@ proc PfemFluid::write::GetPFEM_OutputProcessList { } { # lappend resultList [write::GetRestartProcess Restart] return $resultList } -proc PfemFluid::write::GetPFEM_ProblemProcessList { } { +proc PfemFluid::write::GetPFEM_ProblemProcessList { free_surface_condition } { set resultList [list ] set problemtype [write::getValue PFEMFLUID_DomainType] - lappend resultList [GetPFEM_FluidRemeshDict] + lappend resultList [GetPFEM_FluidRemeshDict $free_surface_condition] return $resultList } @@ -264,7 +264,7 @@ proc PfemFluid::write::GetPFEM_RemeshDict { } { -proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { +proc PfemFluid::write::GetPFEM_FluidRemeshDict { free_surface_condition } { variable bodies_list set resultDict [dict create ] dict set resultDict "help" "This process applies meshing to the problem domains" @@ -279,11 +279,8 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { dict set paramsDict "meshing_control_type" "step" dict set paramsDict "meshing_frequency" 1.0 dict set paramsDict "meshing_before_output" true - - set update_conditionsDict [dict create ] - dict set update_conditionsDict "update_conditions" false - dict set paramsDict update_conditions_on_free_surface $update_conditionsDict - + dict set paramsDict update_conditions_on_free_surface [PfemFluid::write::GetUpdateConditionsOnFreeSurface $free_surface_condition] + set meshing_domains_list [list ] foreach body $bodies_list { set bodyDict [dict create ] @@ -338,6 +335,30 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { } { return $resultDict } +proc PfemFluid::write::GetUpdateConditionsOnFreeSurface { free_surface_condition } { + set updateConditionsDict [dict create] + if {$free_surface_condition == 0} { + dict set updateConditionsDict "update_conditions" false + } else { + set condition_type_list [list ] + set free_part_name_list [list ] + # Free_Surface is a tag name chosen to represent the free surface; + # It must be the same name of the model_part_name name of the auxiliary process + lappend free_part_name_list "Free_Surface" + set nDim $::Model::SpatialDimension + set nDim [expr [string range [write::getValue nDim] 0 0] ] + if {$nDim == 2} { + lappend condition_type_list "LineCondition2D2N" + } else { + lappend condition_type_list "SurfaceCondition3D3N" + } + dict set updateConditionsDict "update_conditions" true + dict set updateConditionsDict "sub_model_part_list" $free_part_name_list + dict set updateConditionsDict "reference_condition_list" $condition_type_list + } + return $updateConditionsDict +} + proc PfemFluid::write::GetRemeshProperty { body_name property } { set ret "" set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 0b713d45e..d83d6e77b 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -9,7 +9,7 @@ proc PfemThermic::write::getNewParametersDict { } { dict set projectParametersDict problem_data [PfemFluid::write::GetPFEM_ProblemDataDict] dict set projectParametersDict solver_settings [PfemThermic::write::GetSolverSettingsDict] - dict set projectParametersDict problem_process_list [PfemFluid::write::GetPFEM_ProblemProcessList] + dict set projectParametersDict problem_process_list [PfemFluid::write::GetPFEM_ProblemProcessList [write::getValue PFEMTHERMIC_FreeSurfaceFlux]] dict set projectParametersDict processes [PfemThermic::write::GetProcessList] dict set projectParametersDict output_configuration [write::GetDefaultOutputGiDDict PfemFluid [spdAux::getRoute Results]] dict set projectParametersDict output_configuration result_file_configuration nodal_results [write::GetResultsByXPathList [spdAux::getRoute NodalResults]] @@ -22,8 +22,8 @@ proc PfemThermic::write::GetSolverSettingsDict { } { # GENERAL SETTINGS set solverSettingsDict [dict create] - dict set solverSettingsDict solver_type "pfem_fluid_thermally_coupled_solver" - dict set solverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0] ] + dict set solverSettingsDict solver_type "pfem_fluid_thermally_coupled_solver" + dict set solverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0] ] # "time_stepping" set timeSteppingDict [dict create] @@ -97,7 +97,35 @@ proc PfemThermic::write::GetProcessList { } { dict set processes loads_process_list [write::getConditionsParametersDict PFEMFLUID_Loads] # "auxiliar_process_list" - dict set processes auxiliar_process_list [] + dict set processes auxiliar_process_list [PfemThermic::write::getFreeSurfaceFluxProcessDictList] return $processes } + +proc PfemThermic::write::getFreeSurfaceFluxProcessDictList {} { + set ret [list ] + set value [write::getValue PFEMTHERMIC_FreeSurfaceFlux] + if {$value != 0.0} { + set model_part_name [PfemFluid::write::GetAttribute model_part_name] + + set pdict [dict create] + dict set pdict "python_module" "assign_scalar_variable_process" + dict set pdict "kratos_module" "KratosMultiphysics" + dict set pdict "process_name" "AssignScalarVariableProcess" + + set params [dict create] + # Free_Surface is a tag name chosen to represent the free surface; + # It must be the same name of the modelpart written in the sub_model_part_list of update_conditions_on_free_surface + set group_name "Free_Surface" + dict set params "model_part_name" $model_part_name.$group_name + dict set params "variable_name" "FACE_HEAT_FLUX" + dict set params "constrained" false + dict set params "value" $value + dict set pdict "Parameters" $params + + lappend ret $pdict + } else { + set ret "[]" + } + return $ret +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd index 477b983d5..fa229b56a 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -1,4 +1,5 @@ - + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index 6d1b751b7..b9271af38 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -28,6 +28,7 @@ proc PfemThermic::xml::CustomTree { args } { foreach node [$root getElementsByTagName value] { $node setAttribute icon data } foreach node [$root getElementsByTagName container] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder} } + foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMTHERMIC_FreeSurfaceFlux]"] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } From f96566690e92a0fe39d361ed139d9e96ffcc1d2d Mon Sep 17 00:00:00 2001 From: rlrangel Date: Tue, 8 Dec 2020 03:18:58 +0100 Subject: [PATCH 147/556] Set default thermal analysis to linear in PfemThermic --- kratos.gid/apps/PfemThermic/xml/XmlController.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index b9271af38..ad9478c8e 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -74,7 +74,7 @@ proc PfemThermic::xml::CustomTree { args } { ConvectionDiffusion::xml::CustomTree - spdAux::SetValueOnTreeItem v non_linear CNVDFFAnalysisType + spdAux::SetValueOnTreeItem v linear CNVDFFAnalysisType spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::SetValueOnTreeItem state disabled CNVDFFSolStrat spdAux::SetValueOnTreeItem v No CNVDFFStratParams line_search From a084ebbfb76c1ed9ebe3d1bf5c284f8f41ea6399 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Dec 2020 20:50:48 +0100 Subject: [PATCH 148/556] versioning --- kratos.gid/kratos.xml | 4 ++-- kratos.gid/kratos_default.spd | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/kratos.xml b/kratos.gid/kratos.xml index 3a762ac8f..80fd2731b 100644 --- a/kratos.gid/kratos.xml +++ b/kratos.gid/kratos.xml @@ -3,9 +3,9 @@ Kratos - 7.1.6 + 8.1.1 - 14.1.7d + 14.1.9d 0 1 images/ImageFileBrowser.gif diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index a4f1464a4..6e125ff68 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -1,6 +1,6 @@ - + From b847a0a5ef429f666a79443d7a15f0540c1f171d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Dec 2020 20:52:02 +0100 Subject: [PATCH 149/556] comments and solution strategy check --- .../scripts/Controllers/CommonProcs.tcl | 13 ++++---- kratos.gid/scripts/Model/Model.tcl | 32 +------------------ kratos.gid/scripts/Model/SolutionStrategy.tcl | 5 ++- 3 files changed, 10 insertions(+), 40 deletions(-) diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index ce68f92a8..eba3255eb 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -79,10 +79,10 @@ proc spdAux::ProcGetElementsDict { domNode args } { proc spdAux::ProcGetSolutionStrategies {domNode args} { set names [list ] set pnames [list ] - #W $args - set Sols [::Model::GetSolutionStrategies {*}$args] - #W $Sols - foreach ss $Sols { + # W $args + set sols [::Model::GetSolutionStrategies {*}$args] + # W $Sols + foreach ss $sols { lappend names [$ss getName] lappend pnames [$ss getName] lappend pnames [$ss getPublicName] @@ -90,7 +90,7 @@ proc spdAux::ProcGetSolutionStrategies {domNode args} { $domNode setAttribute values [join $names ","] set dv [lindex $names 0] - #W "dv $dv" + # W "dv $dv" if {[$domNode getAttribute v] eq ""} {$domNode setAttribute v $dv; spdAux::RequestRefresh} if {[$domNode getAttribute v] ni $names} {$domNode setAttribute v $dv; spdAux::RequestRefresh} @@ -99,7 +99,7 @@ proc spdAux::ProcGetSolutionStrategies {domNode args} { proc spdAux::ProcGetSchemes {domNode args} { set nodeApp [GetAppIdFromNode $domNode] - #W $nodeApp + # W $nodeApp set sol_stratUN [apps::getAppUniqueName $nodeApp SolStrat] set sol_stat_path [spdAux::getRoute $sol_stratUN] @@ -109,6 +109,7 @@ proc spdAux::ProcGetSchemes {domNode args} { get_domnode_attribute [$domNode selectNodes $sol_stat_path] values #} set solStratName [::write::getValue $sol_stratUN] + if {$solStratName eq "" } {error "No solution strategy"} #W "Unique name: $sol_stratUN - Nombre $solStratName" set schemes [::Model::GetAvailableSchemes $solStratName {*}$args] diff --git a/kratos.gid/scripts/Model/Model.tcl b/kratos.gid/scripts/Model/Model.tcl index 9617218dc..96a693048 100644 --- a/kratos.gid/scripts/Model/Model.tcl +++ b/kratos.gid/scripts/Model/Model.tcl @@ -30,9 +30,7 @@ proc Model::Init { } { variable ConstitutiveLaws variable Solvers variable Processes - - #set dir $::Kratos::kratos_private(Path) - + set SolutionStrategies [list ] set Elements [list ] set Materials [list ] @@ -53,70 +51,42 @@ proc Model::InitVariables {varName varValue} { } proc Model::getSolutionStrategies { SolutionStrategyFileName } { - #variable SolutionStrategies variable dir - - #set SolutionStrategies [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $SolutionStrategyFileName]] doc - ParseSolutionStrategies $doc } proc Model::getElements { ElementsFileName } { - #variable Elements variable dir - - #set Elements [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $ElementsFileName]] doc - ParseElements $doc } proc Model::getConditions { ConditionsFileName } { - #variable Conditions variable dir - - #set Conditions [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $ConditionsFileName]] doc - ParseConditions $doc } proc Model::getNodalConditions { NodalConditionsFileName } { - #variable NodalConditions variable dir - - #set Conditions [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $NodalConditionsFileName]] doc - #W [$doc asXML] ParseNodalConditions $doc } proc Model::getConstitutiveLaws { ConstitutiveLawsFileName } { - #variable ConstitutiveLaws variable dir - - #set ConstitutiveLaws [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $ConstitutiveLawsFileName]] doc - ParseConstitutiveLaws $doc } proc Model::getSolvers { SolversFileName } { - #variable Solvers variable dir - - #set Solvers [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $SolversFileName]] doc - ParseSolvers $doc } proc Model::getProcesses { ProcessesFileName } { - #variable Processes variable dir - - #set Processes [list ] dom parse [tDOM::xmlReadFile [file join $dir xml $ProcessesFileName]] doc - ParseProcesses $doc } proc Model::getMaterials { MaterialsFileName } { diff --git a/kratos.gid/scripts/Model/SolutionStrategy.tcl b/kratos.gid/scripts/Model/SolutionStrategy.tcl index 8cf3f22e0..7f3151863 100644 --- a/kratos.gid/scripts/Model/SolutionStrategy.tcl +++ b/kratos.gid/scripts/Model/SolutionStrategy.tcl @@ -124,9 +124,10 @@ oo::class create SolStrat { } method cumple {args} { set c [next {*}$args] - + # W "[my getName] $c" if {$c && ![write::isBooleanFalse [my getAttribute "NeedElements"]]} { set c 0 + # W "[my getName] $c" foreach sc [my getSchemes] { if [llength [Model::GetAvailableElements [my getName] [$sc getName]]] { set c 1; break @@ -361,7 +362,6 @@ proc Model::GetSchemesParams {args} { proc Model::GetAvailableElements {solutionStrategyId schemeId} { variable Elements - variable SolutionStrategies #W "GetAvailableElements ss $solutionStrategyId sch $schemeId" set cumplen [list ] set solst [Model::GetSolutionStrategy $solutionStrategyId] @@ -387,7 +387,6 @@ proc Model::GetAvailableElements {solutionStrategyId schemeId} { proc Model::GetAvailableConditions {solutionStrategyId schemeId} { variable Conditions - variable SolutionStrategies set cumplen [list ] #W $solutionStrategyId From f185efb2a3653d661bcd7a0bb48c5f0dda156169 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Dec 2020 20:54:31 +0100 Subject: [PATCH 150/556] Add FSi High rise building --- kratos.gid/apps/FSI/examples/examples.xml | 3 +++ kratos.gid/apps/FSI/images/HighRiseBuilding.png | Bin 0 -> 5663 bytes 2 files changed, 3 insertions(+) create mode 100644 kratos.gid/apps/FSI/images/HighRiseBuilding.png diff --git a/kratos.gid/apps/FSI/examples/examples.xml b/kratos.gid/apps/FSI/examples/examples.xml index 35bef85c0..bd8ddc007 100644 --- a/kratos.gid/apps/FSI/examples/examples.xml +++ b/kratos.gid/apps/FSI/examples/examples.xml @@ -4,15 +4,18 @@ + + + \ No newline at end of file diff --git a/kratos.gid/apps/FSI/images/HighRiseBuilding.png b/kratos.gid/apps/FSI/images/HighRiseBuilding.png new file mode 100644 index 0000000000000000000000000000000000000000..7b95dbcccc0cc55ec30bbbd510e065729d0bc5dd GIT binary patch literal 5663 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 EANp+T+W-In literal 0 HcmV?d00001 From 37a4625193d3219638619bb9046962926d03a88c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Dec 2020 21:01:15 +0100 Subject: [PATCH 151/556] Fix preconditioner_type --- kratos.gid/apps/Common/xml/Solvers.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Common/xml/Solvers.xml b/kratos.gid/apps/Common/xml/Solvers.xml index 2b574c9e5..f73a4a85a 100644 --- a/kratos.gid/apps/Common/xml/Solvers.xml +++ b/kratos.gid/apps/Common/xml/Solvers.xml @@ -16,7 +16,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -51,7 +51,7 @@ - + From 4f31d9b5a45fe4d2ed7a2792c5d930059105b131 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Dec 2020 21:18:55 +0100 Subject: [PATCH 152/556] Fixes in Fluid, Dems and derived --- kratos.gid/apps/CDEM/xml/XmlController.tcl | 8 ++++- kratos.gid/apps/DEM/xml/StageInfo.spd | 3 +- kratos.gid/apps/DEM/xml/Strategies.xml | 2 +- .../write/writeProjectParameters.tcl | 4 +-- .../apps/EmbeddedFluid/xml/Strategies.xml | 7 +++-- .../Fluid/write/writeProjectParameters.tcl | 30 +++++++++---------- kratos.gid/apps/Fluid/xml/Elements.xml | 12 ++++---- kratos.gid/apps/Fluid/xml/Strategies.xml | 2 ++ .../apps/FluidDEM/examples/CylinderInFlow.tcl | 2 +- .../FluidDEM/write/writeProjectParameters.tcl | 1 + kratos.gid/apps/FluidDEM/xml/Elements.xml | 4 +-- kratos.gid/apps/FluidDEM/xml/Strategies.xml | 5 ++-- .../apps/FluidDEM/xml/XmlController.tcl | 6 ++-- 13 files changed, 50 insertions(+), 36 deletions(-) diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 055e662f3..100d8e412 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -10,7 +10,6 @@ proc CDEM::xml::Init { } { Model::ForgetElements Model::ForgetMaterials Model::ForgetConstitutiveLaws - Model::ForgetElement SphericPartDEMElement3D Model::getElements ElementsC.xml Model::ForgetConditions Model::getConditions Conditions.xml @@ -52,4 +51,11 @@ proc CDEM::xml::ProcGetElements { domNode args } { return $diction } +proc CDEM::xml::MultiAppEvent {args} { + if {$args eq "init"} { + spdAux::parseRoutes + spdAux::ConvertAllUniqueNames DEM ${::CDEM::prefix} + } +} + CDEM::xml::Init diff --git a/kratos.gid/apps/DEM/xml/StageInfo.spd b/kratos.gid/apps/DEM/xml/StageInfo.spd index dc6801abd..153c06733 100644 --- a/kratos.gid/apps/DEM/xml/StageInfo.spd +++ b/kratos.gid/apps/DEM/xml/StageInfo.spd @@ -1,7 +1,6 @@ - - + diff --git a/kratos.gid/apps/DEM/xml/Strategies.xml b/kratos.gid/apps/DEM/xml/Strategies.xml index 63a201d8e..5d0b503fe 100644 --- a/kratos.gid/apps/DEM/xml/Strategies.xml +++ b/kratos.gid/apps/DEM/xml/Strategies.xml @@ -1,6 +1,6 @@ - + diff --git a/kratos.gid/apps/EmbeddedFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/EmbeddedFluid/write/writeProjectParameters.tcl index d1a5a8ec2..e93de6675 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/writeProjectParameters.tcl @@ -89,7 +89,7 @@ proc EmbeddedFluid::write::getDistanceModificationDict { } { dict set distance_modif_dict "kratos_module" KratosMultiphysics.FluidDynamicsApplication dict set distance_modif_dict "process_name" ApplyDistanceModificationProcess set parameters_dict [dict create ] - dict set parameters_dict "model_part_name" [lindex [write::getPartsSubModelPartId] 0] + dict set parameters_dict "model_part_name" "FluidModelPart.[lindex [write::getPartsSubModelPartId] 0]" dict set parameters_dict "check_at_each_time_step" [write::getValue EMBFLDistanceSettings correct_distance_at_each_step] dict set distance_modif_dict "Parameters" $parameters_dict return $distance_modif_dict @@ -101,7 +101,7 @@ proc EmbeddedFluid::write::getEmbeddedDragProcessDict {} { dict set pdict "kratos_module" "KratosMultiphysics.FluidDynamicsApplication" dict set pdict "process_name" "ComputeEmbeddedDragProcess" set params [dict create] - dict set params "model_part_name" [lindex [write::getPartsSubModelPartId] 0] + dict set params "model_part_name" "FluidModelPart.[lindex [write::getPartsSubModelPartId] 0]" dict set params "write_drag_output_file" [write::getValue EMBFLEmbeddedDrag write_drag_output_file] dict set params "print_drag_to_screen" [write::getValue EMBFLEmbeddedDrag print_drag_to_screen] dict set params "interval" [write::getInterval [write::getValue EMBFLEmbeddedDrag Interval] ] diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Strategies.xml b/kratos.gid/apps/EmbeddedFluid/xml/Strategies.xml index 5a21bbaf1..7eac3296c 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/Strategies.xml +++ b/kratos.gid/apps/EmbeddedFluid/xml/Strategies.xml @@ -1,6 +1,7 @@ - + + + - + diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 73bb986a0..9cebfe3d6 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -178,8 +178,10 @@ proc Fluid::write::getSolverSettingsDict { } { dict set solverSettingsDict model_part_name [GetAttribute model_part_name] set nDim [expr [string range [write::getValue nDim] 0 0]] dict set solverSettingsDict domain_size $nDim - set currentStrategyId [write::getValue FLSolStrat] - set strategy_write_name [[::Model::GetSolutionStrategy $currentStrategyId] getAttribute "ImplementedInPythonFile"] + set currentStrategyId [write::getValue FLSolStrat "" force] + set strategy [::Model::GetSolutionStrategy $currentStrategyId] + set strategy_write_name [$strategy getAttribute "ImplementedInPythonFile"] + set strategy_type [$strategy getAttribute "Type"] dict set solverSettingsDict solver_type $strategy_write_name # model import settings @@ -207,7 +209,7 @@ proc Fluid::write::getSolverSettingsDict { } { dict set solverSettingsDict no_skin_parts [getNoSkinConditionMeshId] # Time scheme settings - if {$currentStrategyId eq "Monolithic"} { + if {$strategy_type eq "monolithic"} { dict set solverSettingsDict time_scheme [write::getValue FLScheme] } @@ -225,23 +227,14 @@ proc Fluid::write::getSolverSettingsDict { } { dict set solverSettingsDict time_stepping $timeSteppingDict # For monolithic schemes, set the formulation settings - if {$currentStrategyId eq "Monolithic"} { + if {$strategy_type eq "monolithic"} { # Create formulation dictionary set formulationSettingsDict [dict create] # Set formulation dictionary element type set elements [Fluid::write::GetUsedElements] if {[llength $elements] ne 1} {error "You must select 1 element"} {set element_name [lindex $elements 0]} - if {$element_name eq "QSVMS2D" || $element_name eq "QSVMS3D"} { - set element_type "qsvms" - } elseif {$element_name eq "DVMS2D" || $element_name eq "DVMS3D"} { - set element_type "dvms" - } elseif {$element_name eq "FIC2D" || $element_name eq "FIC3D"} { - set element_type "fic" - } else { - set err [concat "Wrong monolithic element type: " $element_name] - error $err - } + set element_type [Fluid::write::GetMonolithicElementTypeFromElementName $element_name] dict set formulationSettingsDict element_type $element_type # Set OSS and remove oss_switch from the original dictionary @@ -252,7 +245,7 @@ proc Fluid::write::getSolverSettingsDict { } { } # Set dynamic tau and remove dynamic_tau from the original dictionary - if {$element_name eq "QSVMS2D" || $element_name eq "QSVMS3D"} { + if {$element_type eq "qsvms"} { dict set formulationSettingsDict dynamic_tau [dict get $solverSettingsDict dynamic_tau] dict unset solverSettingsDict dynamic_tau # Include the formulation settings in the solver settings dict @@ -261,4 +254,11 @@ proc Fluid::write::getSolverSettingsDict { } { } return $solverSettingsDict +} + +proc Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { + set element [Model::getElement $element_name] + if {![$element hasAttribute FormulationElementType]} {error "Your monolithic element $element_name need to define the FormulationElementType field"} + set formulation_element_type [$element getAttribute FormulationElementType] + return {*}$formulation_element_type } \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/xml/Elements.xml b/kratos.gid/apps/Fluid/xml/Elements.xml index 3f6cc3cc1..44498a9ca 100644 --- a/kratos.gid/apps/Fluid/xml/Elements.xml +++ b/kratos.gid/apps/Fluid/xml/Elements.xml @@ -46,7 +46,7 @@ - @@ -73,7 +73,7 @@ - @@ -100,7 +100,7 @@ - @@ -127,7 +127,7 @@ - @@ -154,7 +154,7 @@ - @@ -181,7 +181,7 @@ - diff --git a/kratos.gid/apps/Fluid/xml/Strategies.xml b/kratos.gid/apps/Fluid/xml/Strategies.xml index 40f009b5b..093d53b95 100644 --- a/kratos.gid/apps/Fluid/xml/Strategies.xml +++ b/kratos.gid/apps/Fluid/xml/Strategies.xml @@ -6,6 +6,7 @@ - + @@ -36,7 +36,7 @@ - + diff --git a/kratos.gid/apps/FluidDEM/xml/Strategies.xml b/kratos.gid/apps/FluidDEM/xml/Strategies.xml index 858c72121..690cf9c3a 100644 --- a/kratos.gid/apps/FluidDEM/xml/Strategies.xml +++ b/kratos.gid/apps/FluidDEM/xml/Strategies.xml @@ -6,6 +6,7 @@ - + @@ -44,7 +45,7 @@ - + diff --git a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl index 80335781a..2d7d577bc 100644 --- a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl @@ -8,11 +8,13 @@ proc FluidDEM::xml::Init { } { variable dir Model::InitVariables dir $FluidDEM::dir - Model::ForgetElement SphericPartDEMElement3D + Model::ForgetElements + Model::ForgetSolutionStrategies + Model::getSolutionStrategies [file join ".." ".." DEM xml "Strategies.xml"] + Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml Model::getProcesses Processes.xml Model::getConditions Conditions.xml - Model::getSolutionStrategies Strategies.xml # Get the inlet condition set inlet_cnd [Model::getCondition "Inlet"] From 50ce66e22490028bf058bed910b291d8d77eaea6 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 9 Dec 2020 07:27:53 +0100 Subject: [PATCH 153/556] Corrections for 3D problems --- kratos.gid/apps/PfemThermic/start.tcl | 12 ++- kratos.gid/apps/PfemThermic/write/write.tcl | 30 +++++-- .../write/writeProjectParameters.tcl | 3 +- .../apps/PfemThermic/xml/Conditions.xml | 83 +++++++++++++++++++ .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 48 +++++------ .../apps/PfemThermic/xml/NodalConditions.spd | 3 +- .../apps/PfemThermic/xml/NodalConditions.xml | 11 ++- .../apps/PfemThermic/xml/XmlController.tcl | 9 +- 8 files changed, 150 insertions(+), 49 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/xml/Conditions.xml diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 37d0fc677..0f612a96b 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -54,13 +54,11 @@ proc ::PfemThermic::CustomToolbarItems { } { if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { set img_dir [file join $img_dir Black] } - Kratos::ToolbarAddItem "Model" [file join $img_dir "modelProperties.png"] [list -np- gid_groups_conds::open_conditions menu] [= "Define the model properties"] - Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] - Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] - Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] - if {$::Model::SpatialDimension eq "2D"} { - Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] - } + Kratos::ToolbarAddItem "Model" [file join $img_dir "modelProperties.png"] [list -np- gid_groups_conds::open_conditions menu] [= "Define the model properties"] + Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] + Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] + Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] + Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] } ::PfemThermic::Init diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index bd3301d24..5fec57657 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -40,7 +40,7 @@ proc PfemThermic::write::writeModelPartEvent { } { set groupid [get_domnode_attribute $group n] set groupid [write::GetWriteGroupName $groupid] incr iter - if {$condid eq "HeatFlux2D"} { + if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D"} { set dictGroupsIterators [write::writeGroupNodeCondition $dictGroupsIterators $group $condid $iter] } if {[dict exists $dictGroupsIterators $groupid]} { @@ -55,7 +55,7 @@ proc PfemThermic::write::writeModelPartEvent { } { set condid [[$group parent] @n] set groupid [get_domnode_attribute $group n] set groupid [write::GetWriteGroupName $groupid] - if {$condid eq "HeatFlux2D"} { + if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D"} { lassign [dict get $dictGroupsIterators $groupid] ini fin set FluxConditions($groupid,initial) $ini set FluxConditions($groupid,final) $fin @@ -72,16 +72,30 @@ proc PfemThermic::write::writeModelPartEvent { } { # Write submodel parts with flux conditions (adapted from PfemFluid::write::writeNodalConditions and ConvectionDiffusion::write::writeConditionsMesh) foreach group [$root selectNodes $xp1] { set condid [[$group parent] @n] + # For nodal conditions if {[Model::getNodalConditionbyId $condid] ne ""} { set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - if {$condid ne "HeatFlux2D"} { + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D"} { ::write::writeGroupSubModelPart $condid $groupid "nodal" } else { set ini $FluxConditions($groupid,initial) set end $FluxConditions($groupid,final) ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] } + # For conditions + } else { + if {[Model::getCondition $condid] ne ""} { + set groupid [$group @n] + set groupid [write::GetWriteGroupName $groupid] + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D"} { + ::write::writeGroupSubModelPart $condid $groupid "Nodes" + } else { + set ini $FluxConditions($groupid,initial) + set end $FluxConditions($groupid,final) + ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] + } + } } } } @@ -134,7 +148,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] if {$constitutive_law ne ""} { set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON"] + set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT"] set variables_dict [dict create] set tables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $group] ] { @@ -174,16 +188,16 @@ proc PfemThermic::write::GetTable { prop fileName } { if {$prop eq "TEMPERATURE_vs_DENSITY"} { dict set table output_variable "DENSITY" - } elseif {$prop eq "TEMPERATURE_vs_CONDUCTIVITY"} { - dict set table output_variable "CONDUCTIVITY" - } elseif {$prop eq "TEMPERATURE_vs_SPECIFIC_HEAT"} { - dict set table output_variable "SPECIFIC_HEAT" } elseif {$prop eq "TEMPERATURE_vs_VISCOSITY"} { dict set table output_variable "DYNAMIC_VISCOSITY" } elseif {$prop eq "TEMPERATURE_vs_YOUNG"} { dict set table output_variable "YOUNG_MODULUS" } elseif {$prop eq "TEMPERATURE_vs_POISSON"} { dict set table output_variable "POISSON_RATIO" + } elseif {$prop eq "TEMPERATURE_vs_CONDUCTIVITY"} { + dict set table output_variable "CONDUCTIVITY" + } elseif {$prop eq "TEMPERATURE_vs_SPECIFIC_HEAT"} { + dict set table output_variable "SPECIFIC_HEAT" } set fp [open $fileName r] diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index d83d6e77b..bebfbe24f 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -88,7 +88,8 @@ proc PfemThermic::write::GetProcessList { } { set group_constraints [write::getConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] set body_constraints [PfemFluid::write::getBodyConditionsParametersDict PFEMFLUID_NodalConditions "Nodal"] set thermic_constraints [write::getConditionsParametersDict [ConvectionDiffusion::write::GetAttribute conditions_un]] - dict set processes constraints_process_list [concat $group_constraints $body_constraints $thermic_constraints] + set other_constraints [write::getConditionsParametersDict PFEMFLUID_NodalConditions] + dict set processes constraints_process_list [concat $group_constraints $body_constraints $thermic_constraints $other_constraints] # "list_other_processes" #dict set processes list_other_processes [ConvectionDiffusion::write::getBodyForceProcessDictList] diff --git a/kratos.gid/apps/PfemThermic/xml/Conditions.xml b/kratos.gid/apps/PfemThermic/xml/Conditions.xml new file mode 100644 index 000000000..e3160c8ff --- /dev/null +++ b/kratos.gid/apps/PfemThermic/xml/Conditions.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index ba99c5fb7..5301a5efb 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -14,13 +14,13 @@ - - - - - + + + + + @@ -38,13 +38,13 @@ - - - - - + + + + + @@ -62,16 +62,16 @@ - - - - - + + + + + @@ -89,16 +89,16 @@ - - - - + + + + @@ -117,14 +117,14 @@ - + - + - + @@ -147,9 +147,9 @@ - + - + diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd index fa229b56a..168df1f7f 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -1,5 +1,6 @@ - + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml index 69694e124..cc55db927 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.xml @@ -1,6 +1,8 @@ + + + - + function = "1" + help = "Applies an external thermal load"> - + --> Date: Wed, 9 Dec 2020 15:33:53 +0100 Subject: [PATCH 154/556] Remove DAM Normal loads --- kratos.gid/apps/Dam/xml/Conditions.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/Dam/xml/Conditions.xml b/kratos.gid/apps/Dam/xml/Conditions.xml index 3fa07a83e..21c4e62da 100644 --- a/kratos.gid/apps/Dam/xml/Conditions.xml +++ b/kratos.gid/apps/Dam/xml/Conditions.xml @@ -415,7 +415,7 @@ - - + --> From 561f285a7ccf69e37f0ca1322677a0116db20d8e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Dec 2020 18:44:06 +0100 Subject: [PATCH 155/556] nodal conditions are available --- kratos.gid/scripts/Writing/WriteConditions.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Writing/WriteConditions.tcl b/kratos.gid/scripts/Writing/WriteConditions.tcl index 4c4ba6c95..f64590e6a 100644 --- a/kratos.gid/scripts/Writing/WriteConditions.tcl +++ b/kratos.gid/scripts/Writing/WriteConditions.tcl @@ -37,7 +37,7 @@ proc write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} if {$aux_cond ne ""} {set cond $aux_cond} set kname [$cond getTopologyKratosName $etype $nnodes] if {$kname ne ""} { - if {$nnodes > 1} { + if {$nnodes >= 1} { lassign [write::writeGroupCondition $groupid $kname $nnodes $iter] initial final dict set dictGroupsIterators $groupid [list $initial $final] } From 83b35b5779753b9c3c8ead82a8da63a28ab5383e Mon Sep 17 00:00:00 2001 From: rlrangel Date: Thu, 10 Dec 2020 13:21:29 +0100 Subject: [PATCH 156/556] Implementation of ThermalFace condition in PfemThermic --- .../write/writeProjectParameters.tcl | 40 +++-- kratos.gid/apps/PfemThermic/write/write.tcl | 31 ++-- .../write/writeProjectParameters.tcl | 52 +++++- .../apps/PfemThermic/xml/Conditions.xml | 158 ++++++++++++++++-- .../apps/PfemThermic/xml/NodalConditions.spd | 2 +- .../apps/PfemThermic/xml/XmlController.tcl | 2 +- 6 files changed, 239 insertions(+), 46 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index 6bf1389be..dc9e68c81 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -20,7 +20,7 @@ proc PfemFluid::write::getNewParametersDict { } { dict set projectParametersDict solver_settings $solverSettingsDict ##### problem_process_list - set problemProcessList [GetPFEM_ProblemProcessList 0] + set problemProcessList [GetPFEM_ProblemProcessList "[]" "[]"] dict set projectParametersDict problem_process_list $problemProcessList set processList [GetPFEM_ProcessList] @@ -158,10 +158,10 @@ proc PfemFluid::write::GetPFEM_OutputProcessList { } { # lappend resultList [write::GetRestartProcess Restart] return $resultList } -proc PfemFluid::write::GetPFEM_ProblemProcessList { free_surface_condition } { +proc PfemFluid::write::GetPFEM_ProblemProcessList { free_surface_heat_flux free_surface_thermal_face } { set resultList [list ] set problemtype [write::getValue PFEMFLUID_DomainType] - lappend resultList [GetPFEM_FluidRemeshDict $free_surface_condition] + lappend resultList [GetPFEM_FluidRemeshDict $free_surface_heat_flux $free_surface_thermal_face] return $resultList } @@ -264,7 +264,7 @@ proc PfemFluid::write::GetPFEM_RemeshDict { } { -proc PfemFluid::write::GetPFEM_FluidRemeshDict { free_surface_condition } { +proc PfemFluid::write::GetPFEM_FluidRemeshDict { free_surface_heat_flux free_surface_thermal_face } { variable bodies_list set resultDict [dict create ] dict set resultDict "help" "This process applies meshing to the problem domains" @@ -279,7 +279,7 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { free_surface_condition } { dict set paramsDict "meshing_control_type" "step" dict set paramsDict "meshing_frequency" 1.0 dict set paramsDict "meshing_before_output" true - dict set paramsDict update_conditions_on_free_surface [PfemFluid::write::GetUpdateConditionsOnFreeSurface $free_surface_condition] + dict set paramsDict update_conditions_on_free_surface [PfemFluid::write::GetUpdateConditionsOnFreeSurface $free_surface_heat_flux $free_surface_thermal_face] set meshing_domains_list [list ] foreach body $bodies_list { @@ -335,24 +335,32 @@ proc PfemFluid::write::GetPFEM_FluidRemeshDict { free_surface_condition } { return $resultDict } -proc PfemFluid::write::GetUpdateConditionsOnFreeSurface { free_surface_condition } { +proc PfemFluid::write::GetUpdateConditionsOnFreeSurface { free_surface_heat_flux free_surface_thermal_face } { set updateConditionsDict [dict create] - if {$free_surface_condition == 0} { + if {$free_surface_heat_flux eq "[]" && $free_surface_thermal_face eq "[]"} { dict set updateConditionsDict "update_conditions" false } else { - set condition_type_list [list ] set free_part_name_list [list ] - # Free_Surface is a tag name chosen to represent the free surface; - # It must be the same name of the model_part_name name of the auxiliary process - lappend free_part_name_list "Free_Surface" + set condition_type_list [list ] set nDim $::Model::SpatialDimension set nDim [expr [string range [write::getValue nDim] 0 0] ] - if {$nDim == 2} { - lappend condition_type_list "LineCondition2D2N" - } else { - lappend condition_type_list "SurfaceCondition3D3N" + if {$free_surface_heat_flux ne "[]"} { + lappend free_part_name_list $free_surface_heat_flux + if {$nDim == 2} { + lappend condition_type_list "LineCondition2D2N" + } else { + lappend condition_type_list "SurfaceCondition3D3N" + } + } + if {$free_surface_thermal_face ne "[]"} { + lappend free_part_name_list $free_surface_thermal_face + if {$nDim == 2} { + lappend condition_type_list "LineCondition2D2N" + } else { + lappend condition_type_list "SurfaceCondition3D3N" + } } - dict set updateConditionsDict "update_conditions" true + dict set updateConditionsDict "update_conditions" true dict set updateConditionsDict "sub_model_part_list" $free_part_name_list dict set updateConditionsDict "reference_condition_list" $condition_type_list } diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 5fec57657..3336b95c2 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -40,7 +40,7 @@ proc PfemThermic::write::writeModelPartEvent { } { set groupid [get_domnode_attribute $group n] set groupid [write::GetWriteGroupName $groupid] incr iter - if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D"} { + if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D" || $condid eq "ThermalFace2D" || $condid eq "ThermalFace3D"} { set dictGroupsIterators [write::writeGroupNodeCondition $dictGroupsIterators $group $condid $iter] } if {[dict exists $dictGroupsIterators $groupid]} { @@ -55,7 +55,7 @@ proc PfemThermic::write::writeModelPartEvent { } { set condid [[$group parent] @n] set groupid [get_domnode_attribute $group n] set groupid [write::GetWriteGroupName $groupid] - if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D"} { + if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D" || $condid eq "ThermalFace2D" || $condid eq "ThermalFace3D"} { lassign [dict get $dictGroupsIterators $groupid] ini fin set FluxConditions($groupid,initial) $ini set FluxConditions($groupid,final) $fin @@ -76,25 +76,26 @@ proc PfemThermic::write::writeModelPartEvent { } { if {[Model::getNodalConditionbyId $condid] ne ""} { set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D"} { - ::write::writeGroupSubModelPart $condid $groupid "nodal" - } else { - set ini $FluxConditions($groupid,initial) - set end $FluxConditions($groupid,final) + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { + ::write::writeGroupSubModelPart $condid $groupid "nodal" + } else { + set ini $FluxConditions($groupid,initial) + set end $FluxConditions($groupid,final) ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] - } + } # For conditions } else { if {[Model::getCondition $condid] ne ""} { set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D"} { - ::write::writeGroupSubModelPart $condid $groupid "Nodes" - } else { - set ini $FluxConditions($groupid,initial) - set end $FluxConditions($groupid,final) - ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] - } + + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { + ::write::writeGroupSubModelPart $condid $groupid "Nodes" + } else { + set ini $FluxConditions($groupid,initial) + set end $FluxConditions($groupid,final) + ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] + } } } } diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index bebfbe24f..8469c4d40 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -9,7 +9,7 @@ proc PfemThermic::write::getNewParametersDict { } { dict set projectParametersDict problem_data [PfemFluid::write::GetPFEM_ProblemDataDict] dict set projectParametersDict solver_settings [PfemThermic::write::GetSolverSettingsDict] - dict set projectParametersDict problem_process_list [PfemFluid::write::GetPFEM_ProblemProcessList [write::getValue PFEMTHERMIC_FreeSurfaceFlux]] + dict set projectParametersDict problem_process_list [PfemFluid::write::GetPFEM_ProblemProcessList [PfemThermic::write::GetFreeSurfaceHeatFluxParts] [PfemThermic::write::GetFreeSurfaceThermalFaceParts]] dict set projectParametersDict processes [PfemThermic::write::GetProcessList] dict set projectParametersDict output_configuration [write::GetDefaultOutputGiDDict PfemFluid [spdAux::getRoute Results]] dict set projectParametersDict output_configuration result_file_configuration nodal_results [write::GetResultsByXPathList [spdAux::getRoute NodalResults]] @@ -98,11 +98,59 @@ proc PfemThermic::write::GetProcessList { } { dict set processes loads_process_list [write::getConditionsParametersDict PFEMFLUID_Loads] # "auxiliar_process_list" - dict set processes auxiliar_process_list [PfemThermic::write::getFreeSurfaceFluxProcessDictList] + #dict set processes auxiliar_process_list [PfemThermic::write::getFreeSurfaceFluxProcessDictList] return $processes } +proc PfemThermic::write::GetFreeSurfaceHeatFluxParts {} { + set root [customlib::GetBaseRoot] + set listOfProcessedGroups [list ] + set groups [list ] + set xp1 "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition/group" + set xp2 "[spdAux::getRoute PFEMFLUID_NodalConditions]/group" + set grs [$root selectNodes $xp1] + if {$grs ne ""} {lappend groups {*}$grs} + set grs [$root selectNodes $xp2] + if {$grs ne ""} {lappend groups {*}$grs} + foreach group $groups { + set groupName [$group @n] + set groupName [write::GetWriteGroupName $groupName] + set cid [[$group parent] @n] + if {[Model::getNodalConditionbyId $cid] ne "" || [Model::getCondition $cid] ne "" || [string first Parts $cid] >= 0 } { + if {$cid eq "FreeSurfaceHeatFlux2D" || $cid eq "FreeSurfaceHeatFlux3D"} { + set gname [::write::getSubModelPartId $cid $groupName] + if {$gname ni $listOfProcessedGroups} {lappend listOfProcessedGroups $gname} + } + } + } + return $listOfProcessedGroups +} + +proc PfemThermic::write::GetFreeSurfaceThermalFaceParts {} { + set root [customlib::GetBaseRoot] + set listOfProcessedGroups [list ] + set groups [list ] + set xp1 "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition/group" + set xp2 "[spdAux::getRoute PFEMFLUID_NodalConditions]/group" + set grs [$root selectNodes $xp1] + if {$grs ne ""} {lappend groups {*}$grs} + set grs [$root selectNodes $xp2] + if {$grs ne ""} {lappend groups {*}$grs} + foreach group $groups { + set groupName [$group @n] + set groupName [write::GetWriteGroupName $groupName] + set cid [[$group parent] @n] + if {[Model::getNodalConditionbyId $cid] ne "" || [Model::getCondition $cid] ne "" || [string first Parts $cid] >= 0 } { + if {$cid eq "FreeSurfaceThermalFace2D" || $cid eq "FreeSurfaceThermalFace3D"} { + set gname [::write::getSubModelPartId $cid $groupName] + if {$gname ni $listOfProcessedGroups} {lappend listOfProcessedGroups $gname} + } + } + } + return $listOfProcessedGroups +} + proc PfemThermic::write::getFreeSurfaceFluxProcessDictList {} { set ret [list ] set value [write::getValue PFEMTHERMIC_FreeSurfaceFlux] diff --git a/kratos.gid/apps/PfemThermic/xml/Conditions.xml b/kratos.gid/apps/PfemThermic/xml/Conditions.xml index e3160c8ff..1213d355a 100644 --- a/kratos.gid/apps/PfemThermic/xml/Conditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/Conditions.xml @@ -59,25 +59,161 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd index 168df1f7f..f593915b8 100644 --- a/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd +++ b/kratos.gid/apps/PfemThermic/xml/NodalConditions.spd @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index be9dfe030..f96bebfdb 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -31,7 +31,7 @@ proc PfemThermic::xml::CustomTree { args } { foreach node [$root getElementsByTagName value] { $node setAttribute icon data } foreach node [$root getElementsByTagName container] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder} } - foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMTHERMIC_FreeSurfaceFlux]"] { $node setAttribute icon select } + #foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMTHERMIC_FreeSurfaceFlux]"] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { $node setAttribute icon select } foreach node [[$root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } From 6ea57b8cd9a2124145d4b11d742fb1a7751ad307 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Fri, 11 Dec 2020 16:26:07 +0100 Subject: [PATCH 157/556] Renaming --- kratos.gid/apps/PfemThermic/xml/Conditions.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/xml/Conditions.xml b/kratos.gid/apps/PfemThermic/xml/Conditions.xml index 1213d355a..f04a87708 100644 --- a/kratos.gid/apps/PfemThermic/xml/Conditions.xml +++ b/kratos.gid/apps/PfemThermic/xml/Conditions.xml @@ -1,7 +1,7 @@ Date: Sat, 12 Dec 2020 17:29:53 +0100 Subject: [PATCH 158/556] Bug fix --- .../apps/PfemFluid/write/writeProjectParameters.tcl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index dc9e68c81..69fe8f781 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -345,7 +345,9 @@ proc PfemFluid::write::GetUpdateConditionsOnFreeSurface { free_surface_heat_flux set nDim $::Model::SpatialDimension set nDim [expr [string range [write::getValue nDim] 0 0] ] if {$free_surface_heat_flux ne "[]"} { - lappend free_part_name_list $free_surface_heat_flux + foreach part $free_surface_heat_flux { + lappend free_part_name_list $part + } if {$nDim == 2} { lappend condition_type_list "LineCondition2D2N" } else { @@ -353,7 +355,9 @@ proc PfemFluid::write::GetUpdateConditionsOnFreeSurface { free_surface_heat_flux } } if {$free_surface_thermal_face ne "[]"} { - lappend free_part_name_list $free_surface_thermal_face + foreach part $free_surface_thermal_face { + lappend free_part_name_list $part + } if {$nDim == 2} { lappend condition_type_list "LineCondition2D2N" } else { From a7fd02b8da9bb2c1dbc5651727c918de504819f6 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 16 Dec 2020 11:48:05 +0100 Subject: [PATCH 159/556] Fixing temperature initial conditions of PfemThermic examples --- kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl | 2 +- kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl | 4 ++-- kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl | 4 ++-- kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl | 4 ++-- kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl | 2 +- .../apps/PfemThermic/examples/ThermicSloshingConvection.tcl | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 625b11d09..656200f5c 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -141,7 +141,7 @@ proc PfemThermic::examples::TreeAssignationThermicConvection {args} { # Temperature IC set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] - set props [list value 373.15 Interval Initial constrained 0] + set props [list value 373.15 Interval Initial constrained 1] $thermalICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalICnode $props diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index 48be58e4f..40d790fa0 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -135,8 +135,8 @@ proc PfemThermic::examples::TreeAssignationThermicCubeDrop {args} { # Temperature IC set thermalFluidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] set thermalSolidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Solid"] - set fluidProps [list value 300.00 Interval Initial constrained 0] - set solidProps [list value 380.00 Interval Initial constrained 0] + set fluidProps [list value 300.00 Interval Initial constrained 1] + set solidProps [list value 380.00 Interval Initial constrained 1] $thermalFluidICnode setAttribute ov surface $thermalSolidICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index 9b0bdad9c..7861383c5 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -136,8 +136,8 @@ proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI {args} { # Temperature IC set thermalFluidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] set thermalSolidICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Solid"] - set fluidProps [list value 273.15 Interval Initial constrained 0] - set solidProps [list value 373.15 Interval Initial constrained 0] + set fluidProps [list value 273.15 Interval Initial constrained 1] + set solidProps [list value 373.15 Interval Initial constrained 1] $thermalFluidICnode setAttribute ov surface $thermalSolidICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 5e052227b..850c48f4b 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -110,8 +110,8 @@ proc PfemThermic::examples::TreeAssignationThermicFluidDrop {args} { set InitTemperature "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition\[@n='TEMPERATURE'\]" set thermalFluidICnode [customlib::AddConditionGroupOnXPath $InitTemperature "Fluid"] set thermalSolidICnode [customlib::AddConditionGroupOnXPath $InitTemperature "Solid"] - set fluidProps [list value 310.00 Interval Initial constrained 0] - set solidProps [list value 290.00 Interval Initial constrained 0] + set fluidProps [list value 310.00 Interval Initial constrained 1] + set solidProps [list value 290.00 Interval Initial constrained 1] $thermalFluidICnode setAttribute ov surface $thermalSolidICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalFluidICnode $fluidProps diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index 13120f8ee..31ffb0725 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -101,7 +101,7 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing {args} { # Temperature IC set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] $thermalICnode setAttribute ov surface - set props [list value 293.15 Interval Initial constrained 0] + set props [list value 293.15 Interval Initial constrained 1] spdAux::SetValuesOnBaseNode $thermalICnode $props # Time parameters diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index 03d41858e..e6d940757 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -159,7 +159,7 @@ proc PfemThermic::examples::TreeAssignationThermicSloshingConvection {args} { # Temperature IC set thermalICnode [customlib::AddConditionGroupOnXPath $fixTemperature "Fluid"] - set props [list value 373.15 Interval Initial constrained 0] + set props [list value 373.15 Interval Initial constrained 1] $thermalICnode setAttribute ov surface spdAux::SetValuesOnBaseNode $thermalICnode $props From f6170f7dc9f7c219d853a26f1f7f473d26a8ae05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Fri, 18 Dec 2020 10:09:42 +0100 Subject: [PATCH 160/556] Element addition --- kratos.gid/apps/Fluid/xml/Elements.xml | 54 ++++++++++++++++++++++++ kratos.gid/apps/Fluid/xml/Strategies.xml | 2 +- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/Fluid/xml/Elements.xml b/kratos.gid/apps/Fluid/xml/Elements.xml index 44498a9ca..fd8468e3b 100644 --- a/kratos.gid/apps/Fluid/xml/Elements.xml +++ b/kratos.gid/apps/Fluid/xml/Elements.xml @@ -208,4 +208,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/Fluid/xml/Strategies.xml b/kratos.gid/apps/Fluid/xml/Strategies.xml index 093d53b95..f77499c01 100644 --- a/kratos.gid/apps/Fluid/xml/Strategies.xml +++ b/kratos.gid/apps/Fluid/xml/Strategies.xml @@ -50,7 +50,7 @@ - + From 95344eda93cdf7d350fea00dceb50499c3089ada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Fri, 18 Dec 2020 11:09:41 +0100 Subject: [PATCH 161/556] Fixes in elemental settings --- .../Fluid/write/writeProjectParameters.tcl | 19 +++++++++++-------- kratos.gid/apps/Fluid/xml/Elements.xml | 2 -- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 9cebfe3d6..8ed4cb000 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -240,17 +240,20 @@ proc Fluid::write::getSolverSettingsDict { } { # Set OSS and remove oss_switch from the original dictionary # It is important to check that there is oss_switch, otherwise the derived apps (e.g. embedded) might crash if {[dict exists $solverSettingsDict oss_switch]} { - dict set formulationSettingsDict use_orthogonal_subscales [write::getStringBinaryFromValue [dict get $solverSettingsDict oss_switch]] + # Set the oss_switch only in those elements that support it + if {$element_type eq "qsvms" || $element_type eq "dvms"} { + dict set formulationSettingsDict use_orthogonal_subscales [write::getStringBinaryFromValue [dict get $solverSettingsDict oss_switch]] + } + # Always remove the oss_switch from the original dictionary dict unset solverSettingsDict oss_switch } - # Set dynamic tau and remove dynamic_tau from the original dictionary - if {$element_type eq "qsvms"} { - dict set formulationSettingsDict dynamic_tau [dict get $solverSettingsDict dynamic_tau] - dict unset solverSettingsDict dynamic_tau - # Include the formulation settings in the solver settings dict - dict set solverSettingsDict formulation $formulationSettingsDict - } + # Set dynamic tau and remove it from the original dictionary + dict set formulationSettingsDict dynamic_tau [dict get $solverSettingsDict dynamic_tau] + dict unset solverSettingsDict dynamic_tau + + # Include the formulation settings in the solver settings dict + dict set solverSettingsDict formulation $formulationSettingsDict } return $solverSettingsDict diff --git a/kratos.gid/apps/Fluid/xml/Elements.xml b/kratos.gid/apps/Fluid/xml/Elements.xml index fd8468e3b..dbc483c67 100644 --- a/kratos.gid/apps/Fluid/xml/Elements.xml +++ b/kratos.gid/apps/Fluid/xml/Elements.xml @@ -214,7 +214,6 @@ - @@ -241,7 +240,6 @@ - From eedbedda8fe984de4c38b5b6fc5a50b0e585b6b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Fri, 18 Dec 2020 14:08:35 +0100 Subject: [PATCH 162/556] Sound velocity in constitutive law settings --- .../apps/Buoyancy/xml/ConstitutiveLaws.xml | 31 +++++++++++++++++-- kratos.gid/apps/Buoyancy/xml/Materials.xml | 2 ++ .../apps/Fluid/xml/ConstitutiveLaws.xml | 25 +++++++++++++-- kratos.gid/apps/Fluid/xml/Elements.xml | 10 ++++++ kratos.gid/apps/Fluid/xml/Materials.xml | 2 ++ kratos.gid/apps/FluidDEM/xml/Elements.xml | 2 ++ 6 files changed, 68 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml b/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml index f8f0278de..0e5f5dec1 100644 --- a/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/Buoyancy/xml/ConstitutiveLaws.xml @@ -1,6 +1,7 @@ - + + @@ -11,7 +12,7 @@ - + @@ -21,4 +22,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/Buoyancy/xml/Materials.xml b/kratos.gid/apps/Buoyancy/xml/Materials.xml index 41d9023d6..8bc7d5c8d 100644 --- a/kratos.gid/apps/Buoyancy/xml/Materials.xml +++ b/kratos.gid/apps/Buoyancy/xml/Materials.xml @@ -6,6 +6,7 @@ + @@ -14,6 +15,7 @@ + diff --git a/kratos.gid/apps/Fluid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/Fluid/xml/ConstitutiveLaws.xml index e43c5960f..34555ab9c 100644 --- a/kratos.gid/apps/Fluid/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/Fluid/xml/ConstitutiveLaws.xml @@ -1,7 +1,7 @@ - + @@ -10,7 +10,7 @@ - + @@ -19,6 +19,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -33,6 +34,7 @@ + @@ -58,6 +60,7 @@ + @@ -85,6 +88,7 @@ + @@ -112,6 +116,7 @@ + @@ -139,6 +144,7 @@ + @@ -166,6 +172,7 @@ + @@ -193,6 +200,7 @@ + @@ -219,6 +227,7 @@ + @@ -245,6 +254,7 @@ + diff --git a/kratos.gid/apps/Fluid/xml/Materials.xml b/kratos.gid/apps/Fluid/xml/Materials.xml index 3b580444b..8f3fab1b7 100644 --- a/kratos.gid/apps/Fluid/xml/Materials.xml +++ b/kratos.gid/apps/Fluid/xml/Materials.xml @@ -4,12 +4,14 @@ + + diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 84c813abb..d0948b597 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -24,6 +24,7 @@ + @@ -46,6 +47,7 @@ + From 4ffd6a9fe6596f7ee99e9ffa159bb6ae0562b9a6 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Sat, 19 Dec 2020 11:04:27 +0100 Subject: [PATCH 163/556] flushes --- kratos.gid/apps/Fluid/python/KratosFluid.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/KratosFluid.py index 422e49f08..8b8ad38f1 100644 --- a/kratos.gid/apps/Fluid/python/KratosFluid.py +++ b/kratos.gid/apps/Fluid/python/KratosFluid.py @@ -2,6 +2,7 @@ import KratosMultiphysics from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis +from KratosMultiphysics import Logger import sys import time @@ -12,6 +13,11 @@ def __init__(self,model,project_parameters,flush_frequency=10.0): super(FluidDynamicsAnalysisWithFlush,self).__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super(FluidDynamicsAnalysisWithFlush,self).Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): super(FluidDynamicsAnalysisWithFlush,self).FinalizeSolutionStep() From 1733ecf39667055369f94170e189b9847476ab17 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Sat, 19 Dec 2020 11:08:10 +0100 Subject: [PATCH 164/556] removing useless line --- kratos.gid/apps/Fluid/python/KratosFluid.py | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/KratosFluid.py index 8b8ad38f1..470d19a8b 100644 --- a/kratos.gid/apps/Fluid/python/KratosFluid.py +++ b/kratos.gid/apps/Fluid/python/KratosFluid.py @@ -2,7 +2,6 @@ import KratosMultiphysics from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis -from KratosMultiphysics import Logger import sys import time From 8bef7f4ad53ad6b0d888cfa666ad668131ff62fa Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 23 Dec 2020 12:46:59 +0100 Subject: [PATCH 165/556] More scripts changed --- kratos.gid/apps/Buoyancy/python/KratosFluid.py | 9 +++++++-- kratos.gid/apps/Buoyancy/python/MainKratos.py | 9 +++++++-- .../python/KratosConjugateHeatTransfer.py | 9 +++++++-- .../apps/ConjugateHeatTransfer/python/MainKratos.py | 9 +++++++-- .../python/KratosConvectionDiffusion.py | 9 +++++++-- kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py | 9 +++++++-- kratos.gid/apps/FSI/python/KratosFSI.py | 9 +++++++-- kratos.gid/apps/Fluid/python/KratosFluid.py | 6 +++--- 8 files changed, 52 insertions(+), 17 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/python/KratosFluid.py b/kratos.gid/apps/Buoyancy/python/KratosFluid.py index 422e49f08..e74a87423 100644 --- a/kratos.gid/apps/Buoyancy/python/KratosFluid.py +++ b/kratos.gid/apps/Buoyancy/python/KratosFluid.py @@ -9,12 +9,17 @@ class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(FluidDynamicsAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(FluidDynamicsAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/Buoyancy/python/MainKratos.py b/kratos.gid/apps/Buoyancy/python/MainKratos.py index 83f349e7c..a35a8bd4c 100644 --- a/kratos.gid/apps/Buoyancy/python/MainKratos.py +++ b/kratos.gid/apps/Buoyancy/python/MainKratos.py @@ -10,13 +10,18 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(ConvectionDiffusionAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(ConvectionDiffusionAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py index 83f349e7c..a35a8bd4c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py @@ -10,13 +10,18 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(ConvectionDiffusionAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(ConvectionDiffusionAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py index 83f349e7c..a35a8bd4c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py @@ -10,13 +10,18 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(ConvectionDiffusionAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(ConvectionDiffusionAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py index ba1fa63f7..0eaab8e6c 100644 --- a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py +++ b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py @@ -11,12 +11,17 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(ConvectionDiffusionAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(ConvectionDiffusionAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py index 422e49f08..e74a87423 100644 --- a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py +++ b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py @@ -9,12 +9,17 @@ class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(FluidDynamicsAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(FluidDynamicsAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/FSI/python/KratosFSI.py b/kratos.gid/apps/FSI/python/KratosFSI.py index 11ac0468a..f28e283bf 100644 --- a/kratos.gid/apps/FSI/python/KratosFSI.py +++ b/kratos.gid/apps/FSI/python/KratosFSI.py @@ -9,12 +9,17 @@ class FSIAnalysisWithFlush(FSIAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): - super(FSIAnalysisWithFlush,self).__init__(model, project_parameters) + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() def FinalizeSolutionStep(self): - super(FSIAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/KratosFluid.py index 470d19a8b..e74a87423 100644 --- a/kratos.gid/apps/Fluid/python/KratosFluid.py +++ b/kratos.gid/apps/Fluid/python/KratosFluid.py @@ -9,17 +9,17 @@ class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): - super(FluidDynamicsAnalysisWithFlush,self).__init__(model,project_parameters) + super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() sys.stdout.flush() def Initialize(self): - super(FluidDynamicsAnalysisWithFlush,self).Initialize() + super().Initialize() sys.stdout.flush() def FinalizeSolutionStep(self): - super(FluidDynamicsAnalysisWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() From a21b38abccb409f9866d3060acf4be07927493dc Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 23 Dec 2020 13:51:26 +0100 Subject: [PATCH 166/556] structural with more flushes --- .../Structural/python/KratosStructural.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/Structural/python/KratosStructural.py b/kratos.gid/apps/Structural/python/KratosStructural.py index ef6a15636..1355f3b11 100755 --- a/kratos.gid/apps/Structural/python/KratosStructural.py +++ b/kratos.gid/apps/Structural/python/KratosStructural.py @@ -8,11 +8,32 @@ from StructuralMechanicsAnalysis to do modifications """ +class StructuralMechanicsAnalysisWithFlush(StructuralMechanicsAnalysis): + + def __init__(self,model,project_parameters,flush_frequency=10.0): + super().__init__(model,project_parameters) + self.flush_frequency = flush_frequency + self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() + + def FinalizeSolutionStep(self): + super().FinalizeSolutionStep() + + if self.parallel_type == "OpenMP": + now = time.time() + if now - self.last_flush > self.flush_frequency: + sys.stdout.flush() + self.last_flush = now + if __name__ == "__main__": with open("ProjectParameters.json",'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) model = KratosMultiphysics.Model() - simulation = StructuralMechanicsAnalysis(model,parameters) + simulation = StructuralMechanicsAnalysisWithFlush(model,parameters) simulation.Run() From 910f9867b9d2aeb54ab79d1ac48e4adc8302759d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Tue, 29 Dec 2020 17:06:08 +0100 Subject: [PATCH 167/556] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9fe9c0b62..6ae148b99 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ The interface of Kratos with [GiD](http://www.gidhome.com). -If you need the latest release, launch your GiD, navigate to Data > Problemtype > Internet retrieve and download Kratos there. If you need the developer version, you are on the right place +If you need the latest release, launch your GiD, navigate to Data > Problemtype > Internet retrieve and download Kratos there. Available for Linux. Windows, and macOS. If you need the developer version, you are on the right place ## First steps * Install the latest GiD developer version -> [Developer version](http://www.gidhome.com/download/developer-versions) -* Navigate to GiD's problemtype folder and delete kratos.gid +* Navigate to GiD's problemtype folder and delete previous kratos.gid * Create there a link to our [kratos.gid](./kratos.gid/) * Navigate to kratos.gid/exec/ * Create there a symbolic link to the kratos installation folder (where runkratos is located) From d8039e1f779d1183a89f1f52e472a3a936e656e0 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 12 Jan 2021 16:54:49 +0100 Subject: [PATCH 168/556] hotfix dont allow logs in tester --- kratos.gid/scripts/Logs.tcl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/kratos.gid/scripts/Logs.tcl b/kratos.gid/scripts/Logs.tcl index 0bb462deb..251d5d2bb 100644 --- a/kratos.gid/scripts/Logs.tcl +++ b/kratos.gid/scripts/Logs.tcl @@ -5,7 +5,7 @@ proc Kratos::GetLogFilePath { } { variable kratos_private - set gid_defaults [GiD_GetUserSettingsFilename -create_folders] + set gid_defaults [GiD_GetUserSettingsFilename -create_folders -ignore_alternative_configuration_file] set dir_name [file dirname $gid_defaults] set file_name $kratos_private(LogFilename) if {$file_name eq ""} {} @@ -18,7 +18,7 @@ proc Kratos::GetLogFilePath { } { proc Kratos::InitLog { } { variable kratos_private - + if {[info exists Kratos::kratos_private(allow_logs)] && $Kratos::kratos_private(allow_logs)>0} { set kratos_private(LogFilename) [clock format [clock seconds] -format "%Y%m%d%H%M%S"].log @@ -52,7 +52,7 @@ proc Kratos::Log {msg} { proc Kratos::FlushLog { } { variable kratos_private - if {[info exists kratos_private(Log)]} { + if {[info exists kratos_private(Log)] && $Kratos::kratos_private(allow_logs) > 0} { # only disturb the disk if we have something new to write if {[llength $kratos_private(Log)] > 0} { set logpath [Kratos::GetLogFilePath] @@ -76,7 +76,6 @@ proc Kratos::FlushLog { } { } } } - } proc Kratos::AutoFlush {} { @@ -93,8 +92,9 @@ proc Kratos::ViewLog {} { #do not save preferences starting with flag gid.exe -c (that specify read only an alternative file) if { [GiD_Set SaveGidDefaults] } { - Kratos::InitLog + set Kratos::kratos_private(allow_logs) 0 } +Kratos::InitLog proc Kratos::MoveLogsToFolder {folder {flush_log 1}} { From f075b39af5d3b48f0fc45cb054d22dae23fc98b2 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Fri, 15 Jan 2021 16:23:15 +0100 Subject: [PATCH 169/556] shadowed variable 'model' fixed and improved pending apps --- .../apps/Buoyancy/python/KratosFluid.py | 4 +-- kratos.gid/apps/Buoyancy/python/MainKratos.py | 10 +++---- .../apps/CDEM/python/KratosDEMAnalysis.py | 22 ++++++-------- .../python/KratosConjugateHeatTransfer.py | 10 +++---- .../python/MainKratos.py | 16 +++++----- .../python/KratosConvectionDiffusion.py | 8 ++--- .../apps/DEM/python/KratosDEMAnalysis.py | 22 +++++++------- .../apps/EmbeddedFluid/python/KratosFluid.py | 16 +++++----- kratos.gid/apps/FSI/python/KratosFSI.py | 12 ++++---- kratos.gid/apps/Fluid/python/KratosFluid.py | 10 +++---- kratos.gid/apps/MPM/python/KratosParticle.py | 27 +++++++++++++++-- kratos.gid/apps/PfemFluid/python/RunPFEM.py | 29 +++++++++++++++---- .../python/KratosPotentialFluid.py | 26 +++++++++++++++-- .../apps/Stent/python/KratosStructural.py | 26 +++++++++++++++-- .../Structural/python/KratosStructural.py | 13 +++++---- 15 files changed, 164 insertions(+), 87 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/python/KratosFluid.py b/kratos.gid/apps/Buoyancy/python/KratosFluid.py index e74a87423..6e577a79a 100644 --- a/kratos.gid/apps/Buoyancy/python/KratosFluid.py +++ b/kratos.gid/apps/Buoyancy/python/KratosFluid.py @@ -32,6 +32,6 @@ def FinalizeSolutionStep(self): with open("ProjectParameters.json",'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = FluidDynamicsAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = FluidDynamicsAnalysisWithFlush(global_model,parameters) simulation.Run() diff --git a/kratos.gid/apps/Buoyancy/python/MainKratos.py b/kratos.gid/apps/Buoyancy/python/MainKratos.py index a35a8bd4c..735846bc7 100644 --- a/kratos.gid/apps/Buoyancy/python/MainKratos.py +++ b/kratos.gid/apps/Buoyancy/python/MainKratos.py @@ -9,8 +9,8 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() @@ -31,9 +31,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = ConvectionDiffusionAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = ConvectionDiffusionAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py b/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py index 4f31eace5..1a454c1c0 100644 --- a/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py +++ b/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py @@ -1,21 +1,18 @@ -import KratosMultiphysics -from KratosMultiphysics.DEMApplication.DEM_analysis_stage import DEMAnalysisStage - import time import sys -""" model = KratosMultiphysics.Model() -solution = Main.Solution(model) -solution.Run() """ +import KratosMultiphysics +from KratosMultiphysics.DEMApplication.DEM_analysis_stage import DEMAnalysisStage +from KratosMultiphysics import Logger class DEMAnalysisStageWithFlush(DEMAnalysisStage): def __init__(self, model, project_parameters, flush_frequency=10.0): - super(DEMAnalysisStageWithFlush,self).__init__(model, project_parameters) + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() def FinalizeSolutionStep(self): - super(DEMAnalysisStageWithFlush,self).FinalizeSolutionStep() + super().FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() @@ -24,10 +21,9 @@ def FinalizeSolutionStep(self): self.last_flush = now if __name__ == "__main__": - from KratosMultiphysics import Logger Logger.GetDefaultOutput().SetSeverity(Logger.Severity.INFO) - with open("ProjectParametersDEM.json",'r') as parameter_file: - project_parameters = KratosMultiphysics.Parameters(parameter_file.read()) + with open("ProjectParametersDEM.json", 'r') as parameter_file: + parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - DEMAnalysisStageWithFlush(model, project_parameters).Run() + global_model = KratosMultiphysics.Model() + DEMAnalysisStageWithFlush(global_model, parameters).Run() diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py index a35a8bd4c..735846bc7 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py @@ -9,8 +9,8 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() @@ -31,9 +31,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = ConvectionDiffusionAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = ConvectionDiffusionAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py index a35a8bd4c..b5648ecb7 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py @@ -1,16 +1,16 @@ from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time + import KratosMultiphysics import KratosMultiphysics.FluidDynamicsApplication from KratosMultiphysics.ConvectionDiffusionApplication.convection_diffusion_analysis import ConvectionDiffusionAnalysis -import sys -import time - class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() @@ -31,9 +31,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = ConvectionDiffusionAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = ConvectionDiffusionAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py index 0eaab8e6c..732fac11a 100644 --- a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py +++ b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py @@ -10,7 +10,7 @@ class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): + def __init__(self, model,project_parameters, flush_frequency=10.0): super().__init__(model,project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() @@ -31,9 +31,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = ConvectionDiffusionAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = ConvectionDiffusionAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/DEM/python/KratosDEMAnalysis.py b/kratos.gid/apps/DEM/python/KratosDEMAnalysis.py index 4f31eace5..81be65482 100644 --- a/kratos.gid/apps/DEM/python/KratosDEMAnalysis.py +++ b/kratos.gid/apps/DEM/python/KratosDEMAnalysis.py @@ -1,21 +1,20 @@ -import KratosMultiphysics -from KratosMultiphysics.DEMApplication.DEM_analysis_stage import DEMAnalysisStage import time import sys -""" model = KratosMultiphysics.Model() -solution = Main.Solution(model) -solution.Run() """ + +import KratosMultiphysics +from KratosMultiphysics.DEMApplication.DEM_analysis_stage import DEMAnalysisStage +from KratosMultiphysics import Logger class DEMAnalysisStageWithFlush(DEMAnalysisStage): def __init__(self, model, project_parameters, flush_frequency=10.0): - super(DEMAnalysisStageWithFlush,self).__init__(model, project_parameters) + super(DEMAnalysisStageWithFlush, self).__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() def FinalizeSolutionStep(self): - super(DEMAnalysisStageWithFlush,self).FinalizeSolutionStep() + super(DEMAnalysisStageWithFlush, self).FinalizeSolutionStep() if self.parallel_type == "OpenMP": now = time.time() @@ -24,10 +23,9 @@ def FinalizeSolutionStep(self): self.last_flush = now if __name__ == "__main__": - from KratosMultiphysics import Logger Logger.GetDefaultOutput().SetSeverity(Logger.Severity.INFO) - with open("ProjectParametersDEM.json",'r') as parameter_file: - project_parameters = KratosMultiphysics.Parameters(parameter_file.read()) + with open("ProjectParametersDEM.json", 'r') as parameter_file: + parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - DEMAnalysisStageWithFlush(model, project_parameters).Run() + global_model = KratosMultiphysics.Model() + DEMAnalysisStageWithFlush(global_model, parameters).Run() diff --git a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py index e74a87423..3b02d1a7e 100644 --- a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py +++ b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py @@ -1,15 +1,15 @@ from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 -import KratosMultiphysics -from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis - import sys import time +import KratosMultiphysics +from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis + class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() sys.stdout.flush() @@ -29,9 +29,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = FluidDynamicsAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = FluidDynamicsAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/FSI/python/KratosFSI.py b/kratos.gid/apps/FSI/python/KratosFSI.py index f28e283bf..a32a4111f 100644 --- a/kratos.gid/apps/FSI/python/KratosFSI.py +++ b/kratos.gid/apps/FSI/python/KratosFSI.py @@ -1,11 +1,11 @@ from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 -import KratosMultiphysics -from KratosMultiphysics.FSIApplication.fsi_analysis import FSIAnalysis - import sys import time +import KratosMultiphysics +from KratosMultiphysics.FSIApplication.fsi_analysis import FSIAnalysis + class FSIAnalysisWithFlush(FSIAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): @@ -29,9 +29,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = FSIAnalysisWithFlush(model, parameters) + global_model = KratosMultiphysics.Model() + simulation = FSIAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/KratosFluid.py index e74a87423..cf47e6d22 100644 --- a/kratos.gid/apps/Fluid/python/KratosFluid.py +++ b/kratos.gid/apps/Fluid/python/KratosFluid.py @@ -8,8 +8,8 @@ class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() sys.stdout.flush() @@ -29,9 +29,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = FluidDynamicsAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = FluidDynamicsAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/MPM/python/KratosParticle.py b/kratos.gid/apps/MPM/python/KratosParticle.py index 0f26028ce..2b35dda4d 100755 --- a/kratos.gid/apps/MPM/python/KratosParticle.py +++ b/kratos.gid/apps/MPM/python/KratosParticle.py @@ -8,11 +8,32 @@ from ParticleMechanicsAnalysis to do modifications """ +class ParticleMechanicsAnalysisWithFlush(ParticleMechanicsAnalysis): + + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) + self.flush_frequency = flush_frequency + self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() + + def FinalizeSolutionStep(self): + super().FinalizeSolutionStep() + + if self.parallel_type == "OpenMP": + now = time.time() + if now - self.last_flush > self.flush_frequency: + sys.stdout.flush() + self.last_flush = now + if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = ParticleMechanicsAnalysis(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = ParticleMechanicsAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/PfemFluid/python/RunPFEM.py b/kratos.gid/apps/PfemFluid/python/RunPFEM.py index ab151fb73..22c1a8234 100644 --- a/kratos.gid/apps/PfemFluid/python/RunPFEM.py +++ b/kratos.gid/apps/PfemFluid/python/RunPFEM.py @@ -4,13 +4,32 @@ from KratosMultiphysics.PfemFluidDynamicsApplication.pfem_fluid_dynamics_analysis import PfemFluidDynamicsAnalysis -if __name__ == "__main__": +class PfemFluidDynamicsAnalysisWithFlush(PfemFluidDynamicsAnalysis): - with open("ProjectParameters.json",'r') as parameter_file: - parameters = KratosMultiphysics.Parameters(parameter_file.read()) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) + self.flush_frequency = flush_frequency + self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() + + def FinalizeSolutionStep(self): + super().FinalizeSolutionStep() - model = KratosMultiphysics.Model() + if self.parallel_type == "OpenMP": + now = time.time() + if now - self.last_flush > self.flush_frequency: + sys.stdout.flush() + self.last_flush = now - simulation = PfemFluidDynamicsAnalysis(model,parameters) +if __name__ == "__main__": + + with open("ProjectParameters.json", 'r') as parameter_file: + parameters = KratosMultiphysics.Parameters(parameter_file.read()) + global_model = KratosMultiphysics.Model() + simulation = PfemFluidDynamicsAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py b/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py index 9a6c2d810..d88ff511e 100644 --- a/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py +++ b/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py @@ -6,12 +6,32 @@ from KratosMultiphysics.CompressiblePotentialFlowApplication.potential_flow_analysis import PotentialFlowAnalysis # For user-scripting it is intended that a new class is derived from PotentialFlowAnalysis to do modifications +class PotentialFlowAnalysisWithFlush(PotentialFlowAnalysis): + + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) + self.flush_frequency = flush_frequency + self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() + + def FinalizeSolutionStep(self): + super().FinalizeSolutionStep() + + if self.parallel_type == "OpenMP": + now = time.time() + if now - self.last_flush > self.flush_frequency: + sys.stdout.flush() + self.last_flush = now if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = PotentialFlowAnalysis(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = PotentialFlowAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/Stent/python/KratosStructural.py b/kratos.gid/apps/Stent/python/KratosStructural.py index ef6a15636..45886b7f0 100644 --- a/kratos.gid/apps/Stent/python/KratosStructural.py +++ b/kratos.gid/apps/Stent/python/KratosStructural.py @@ -7,12 +7,32 @@ For user-scripting it is intended that a new class is derived from StructuralMechanicsAnalysis to do modifications """ +class StructuralMechanicsAnalysisWithFlush(StructuralMechanicsAnalysis): + + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) + self.flush_frequency = flush_frequency + self.last_flush = time.time() + sys.stdout.flush() + + def Initialize(self): + super().Initialize() + sys.stdout.flush() + + def FinalizeSolutionStep(self): + super().FinalizeSolutionStep() + + if self.parallel_type == "OpenMP": + now = time.time() + if now - self.last_flush > self.flush_frequency: + sys.stdout.flush() + self.last_flush = now if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = StructuralMechanicsAnalysis(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = StructuralMechanicsAnalysisWithFlush(global_model, parameters) simulation.Run() diff --git a/kratos.gid/apps/Structural/python/KratosStructural.py b/kratos.gid/apps/Structural/python/KratosStructural.py index 1355f3b11..4cb9e2bc5 100755 --- a/kratos.gid/apps/Structural/python/KratosStructural.py +++ b/kratos.gid/apps/Structural/python/KratosStructural.py @@ -1,5 +1,8 @@ from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time + import KratosMultiphysics from KratosMultiphysics.StructuralMechanicsApplication.structural_mechanics_analysis import StructuralMechanicsAnalysis @@ -10,8 +13,8 @@ class StructuralMechanicsAnalysisWithFlush(StructuralMechanicsAnalysis): - def __init__(self,model,project_parameters,flush_frequency=10.0): - super().__init__(model,project_parameters) + def __init__(self, model, project_parameters, flush_frequency=10.0): + super().__init__(model, project_parameters) self.flush_frequency = flush_frequency self.last_flush = time.time() sys.stdout.flush() @@ -31,9 +34,9 @@ def FinalizeSolutionStep(self): if __name__ == "__main__": - with open("ProjectParameters.json",'r') as parameter_file: + with open("ProjectParameters.json", 'r') as parameter_file: parameters = KratosMultiphysics.Parameters(parameter_file.read()) - model = KratosMultiphysics.Model() - simulation = StructuralMechanicsAnalysisWithFlush(model,parameters) + global_model = KratosMultiphysics.Model() + simulation = StructuralMechanicsAnalysisWithFlush(global_model, parameters) simulation.Run() From a7fcf8b889c781d9b899ce9a122b6a1bfc4c1794 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Fri, 15 Jan 2021 16:29:13 +0100 Subject: [PATCH 170/556] more cleanup --- .../apps/Buoyancy/python/KratosFluid.py | 7 +- kratos.gid/apps/Buoyancy/python/MainKratos.py | 7 +- .../apps/CDEM/python/KratosDEMAnalysis.py | 1 + .../python/KratosConjugateHeatTransfer.py | 6 +- .../python/MainKratos.py | 2 - .../python/KratosConvectionDiffusion.py | 7 +- kratos.gid/apps/DEMPFEM/python/MainKratos.py | 2 - kratos.gid/apps/Dam/python/MainKratosDam.py | 2 - .../apps/Dam/python/dam_acoustic_script.py | 2 - .../apps/Dam/python/dam_eigen_script.py | 6 +- kratos.gid/apps/Dam/python/dam_main.py | 2 - .../apps/Dam/python/dam_main_construction.py | 4 +- .../apps/Dam/python/dam_main_selfweight.py | 4 +- .../apps/EmbeddedFluid/python/KratosFluid.py | 2 - kratos.gid/apps/FSI/python/KratosFSI.py | 2 - kratos.gid/apps/Fluid/python/KratosFluid.py | 6 +- kratos.gid/apps/FluidDEM/python/MainKratos.py | 1 - kratos.gid/apps/MPM/python/KratosParticle.py | 4 +- .../apps/PfemFluid/python/Erase--script.py | 2 - kratos.gid/apps/PfemFluid/python/RunPFEM.py | 3 + .../python/KratosPotentialFluid.py | 5 +- kratos.gid/apps/Solid/write/write.tcl | 105 +++++++++--------- .../apps/Stent/python/KratosStructural.py | 3 +- .../Structural/python/KratosStructural.py | 2 - 24 files changed, 76 insertions(+), 111 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/python/KratosFluid.py b/kratos.gid/apps/Buoyancy/python/KratosFluid.py index 6e577a79a..ba446e021 100644 --- a/kratos.gid/apps/Buoyancy/python/KratosFluid.py +++ b/kratos.gid/apps/Buoyancy/python/KratosFluid.py @@ -1,11 +1,8 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - -import KratosMultiphysics -from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis - import sys import time +import KratosMultiphysics +from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): def __init__(self,model,project_parameters,flush_frequency=10.0): diff --git a/kratos.gid/apps/Buoyancy/python/MainKratos.py b/kratos.gid/apps/Buoyancy/python/MainKratos.py index 735846bc7..e5da9a895 100644 --- a/kratos.gid/apps/Buoyancy/python/MainKratos.py +++ b/kratos.gid/apps/Buoyancy/python/MainKratos.py @@ -1,12 +1,9 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics import KratosMultiphysics.FluidDynamicsApplication from KratosMultiphysics.ConvectionDiffusionApplication.convection_diffusion_analysis import ConvectionDiffusionAnalysis - -import sys -import time - class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py b/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py index 1a454c1c0..60cd76126 100644 --- a/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py +++ b/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py @@ -4,6 +4,7 @@ import KratosMultiphysics from KratosMultiphysics.DEMApplication.DEM_analysis_stage import DEMAnalysisStage from KratosMultiphysics import Logger + class DEMAnalysisStageWithFlush(DEMAnalysisStage): def __init__(self, model, project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py index 735846bc7..7e6bb501c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py @@ -1,12 +1,10 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics import KratosMultiphysics.FluidDynamicsApplication from KratosMultiphysics.ConvectionDiffusionApplication.convection_diffusion_analysis import ConvectionDiffusionAnalysis -import sys -import time - class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py index b5648ecb7..7e6bb501c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py +++ b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - import sys import time diff --git a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py index 732fac11a..21367a6f5 100644 --- a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py +++ b/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py @@ -1,13 +1,10 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics import KratosMultiphysics.ConvectionDiffusionApplication - from KratosMultiphysics.ConvectionDiffusionApplication.convection_diffusion_analysis import ConvectionDiffusionAnalysis -import sys -import time - class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): def __init__(self, model,project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/DEMPFEM/python/MainKratos.py b/kratos.gid/apps/DEMPFEM/python/MainKratos.py index cad6ceab9..4b75cfa20 100644 --- a/kratos.gid/apps/DEMPFEM/python/MainKratos.py +++ b/kratos.gid/apps/DEMPFEM/python/MainKratos.py @@ -4,8 +4,6 @@ # Some parts of the original fluid script have been kept practically untouched and are clearly marked. # Whenever a minor modification has been made on one of these parts, the corresponding line is indicated with a comment: # MOD. -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Kratos import KratosMultiphysics as Kratos from KratosMultiphysics import Model, Parameters diff --git a/kratos.gid/apps/Dam/python/MainKratosDam.py b/kratos.gid/apps/Dam/python/MainKratosDam.py index fe7202c8b..ffa6a714b 100644 --- a/kratos.gid/apps/Dam/python/MainKratosDam.py +++ b/kratos.gid/apps/Dam/python/MainKratosDam.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) diff --git a/kratos.gid/apps/Dam/python/dam_acoustic_script.py b/kratos.gid/apps/Dam/python/dam_acoustic_script.py index 8f522952f..f4fb3540a 100644 --- a/kratos.gid/apps/Dam/python/dam_acoustic_script.py +++ b/kratos.gid/apps/Dam/python/dam_acoustic_script.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) diff --git a/kratos.gid/apps/Dam/python/dam_eigen_script.py b/kratos.gid/apps/Dam/python/dam_eigen_script.py index ecb244c9f..ee0ac26c7 100644 --- a/kratos.gid/apps/Dam/python/dam_eigen_script.py +++ b/kratos.gid/apps/Dam/python/dam_eigen_script.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) @@ -135,7 +133,7 @@ for process in list_of_processes: process.ExecuteBeforeOutputStep() - + for process in list_of_processes: process.ExecuteAfterOutputStep() @@ -155,7 +153,7 @@ for process in list_of_processes: process.ExecuteFinalize() - + # Time control print("Analysis Completed. Elapsed Time = %.3f" % (timer.perf_counter() - initial_time)," seconds.") diff --git a/kratos.gid/apps/Dam/python/dam_main.py b/kratos.gid/apps/Dam/python/dam_main.py index 5084fdda1..b922c75f2 100644 --- a/kratos.gid/apps/Dam/python/dam_main.py +++ b/kratos.gid/apps/Dam/python/dam_main.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) diff --git a/kratos.gid/apps/Dam/python/dam_main_construction.py b/kratos.gid/apps/Dam/python/dam_main_construction.py index 6bbecbc13..d7727e41f 100644 --- a/kratos.gid/apps/Dam/python/dam_main_construction.py +++ b/kratos.gid/apps/Dam/python/dam_main_construction.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) @@ -129,7 +127,7 @@ computing_model_part = solver.GetComputingModelPart() # Sacar de aqui un los computing model parts con otra funcion thermal_computing_model_part = solver.GetComputingThermalModelPart() -# Importing construction utility +# Importing construction utility import dam_construction_utility construction_utilities = dam_construction_utility.DamConstructionUtility(computing_model_part, thermal_computing_model_part, ProjectParameters["construction_process"]) diff --git a/kratos.gid/apps/Dam/python/dam_main_selfweight.py b/kratos.gid/apps/Dam/python/dam_main_selfweight.py index 44b128388..46ea3c158 100644 --- a/kratos.gid/apps/Dam/python/dam_main_selfweight.py +++ b/kratos.gid/apps/Dam/python/dam_main_selfweight.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - # Time monitoring import time as timer print(timer.ctime()) @@ -124,7 +122,7 @@ # Getting gravity direction direction_selfweight = ProjectParameters["problem_data"]["selfweight_direction"].GetString() - if(direction_selfweight == "X"): + if(direction_selfweight == "X"): variable_name = KratosMultiphysics.VOLUME_ACCELERATION_X elif(direction_selfweight == "Y"): variable_name = KratosMultiphysics.VOLUME_ACCELERATION_Y diff --git a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py index 3b02d1a7e..d3979c79a 100644 --- a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py +++ b/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - import sys import time diff --git a/kratos.gid/apps/FSI/python/KratosFSI.py b/kratos.gid/apps/FSI/python/KratosFSI.py index a32a4111f..83e059def 100644 --- a/kratos.gid/apps/FSI/python/KratosFSI.py +++ b/kratos.gid/apps/FSI/python/KratosFSI.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - import sys import time diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/KratosFluid.py index cf47e6d22..d3979c79a 100644 --- a/kratos.gid/apps/Fluid/python/KratosFluid.py +++ b/kratos.gid/apps/Fluid/python/KratosFluid.py @@ -1,11 +1,9 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics from KratosMultiphysics.FluidDynamicsApplication.fluid_dynamics_analysis import FluidDynamicsAnalysis -import sys -import time - class FluidDynamicsAnalysisWithFlush(FluidDynamicsAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/FluidDEM/python/MainKratos.py b/kratos.gid/apps/FluidDEM/python/MainKratos.py index 5b9305169..f845f1d00 100644 --- a/kratos.gid/apps/FluidDEM/python/MainKratos.py +++ b/kratos.gid/apps/FluidDEM/python/MainKratos.py @@ -4,7 +4,6 @@ # Some parts of the original fluid script have been kept practically untouched and are clearly marked. # Whenever a minor modification has been made on one of these parts, the corresponding line is indicated with a comment: # MOD. -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 import warnings # Kratos diff --git a/kratos.gid/apps/MPM/python/KratosParticle.py b/kratos.gid/apps/MPM/python/KratosParticle.py index 2b35dda4d..205bbc514 100755 --- a/kratos.gid/apps/MPM/python/KratosParticle.py +++ b/kratos.gid/apps/MPM/python/KratosParticle.py @@ -1,4 +1,5 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics from KratosMultiphysics.ParticleMechanicsApplication.particle_mechanics_analysis import ParticleMechanicsAnalysis @@ -7,7 +8,6 @@ For user-scripting it is intended that a new class is derived from ParticleMechanicsAnalysis to do modifications """ - class ParticleMechanicsAnalysisWithFlush(ParticleMechanicsAnalysis): def __init__(self, model, project_parameters, flush_frequency=10.0): diff --git a/kratos.gid/apps/PfemFluid/python/Erase--script.py b/kratos.gid/apps/PfemFluid/python/Erase--script.py index 8004c8632..1f6c1870a 100644 --- a/kratos.gid/apps/PfemFluid/python/Erase--script.py +++ b/kratos.gid/apps/PfemFluid/python/Erase--script.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - #Activate it to import in the gdb path: #import sys #sys.path.append('/home/cpuigbo/kratos') diff --git a/kratos.gid/apps/PfemFluid/python/RunPFEM.py b/kratos.gid/apps/PfemFluid/python/RunPFEM.py index 22c1a8234..af316f0f3 100644 --- a/kratos.gid/apps/PfemFluid/python/RunPFEM.py +++ b/kratos.gid/apps/PfemFluid/python/RunPFEM.py @@ -1,3 +1,6 @@ +import sys +import time + import KratosMultiphysics import KratosMultiphysics.DelaunayMeshingApplication import KratosMultiphysics.PfemFluidDynamicsApplication diff --git a/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py b/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py index d88ff511e..caafaa6e5 100644 --- a/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py +++ b/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py @@ -1,8 +1,7 @@ -#makes KratosMultiphysics backward compatible with python 2.6 and 2.7 -from __future__ import print_function, absolute_import, division +import sys +import time import KratosMultiphysics - from KratosMultiphysics.CompressiblePotentialFlowApplication.potential_flow_analysis import PotentialFlowAnalysis # For user-scripting it is intended that a new class is derived from PotentialFlowAnalysis to do modifications diff --git a/kratos.gid/apps/Solid/write/write.tcl b/kratos.gid/apps/Solid/write/write.tcl index 6c87fb3b6..0aace95ea 100644 --- a/kratos.gid/apps/Solid/write/write.tcl +++ b/kratos.gid/apps/Solid/write/write.tcl @@ -14,27 +14,27 @@ proc Solid::write::Init { } { variable NodalConditionsGroup set ConditionsDictGroupIterators [dict create] set NodalConditionsGroup [list ] - + variable validApps set validApps [list "Solid"] - + variable writeCoordinatesByGroups set writeCoordinatesByGroups 0 } proc Solid::write::AddValidApps {appList} { variable validApps - + lappend validApps $appList } proc Solid::write::writeCustomFilesEvent { } { WriteMaterialsFile - + write::CopyFileIntoModel "python/RunSolid.py" set paralleltype [write::getValue ParallelType] set orig_name "RunSolid.py" - + write::RenameFileInModel $orig_name "MainKratos.py" } @@ -50,7 +50,7 @@ proc Solid::write::writeModelPartEvent { } { variable validApps variable ConditionsDictGroupIterators write::initWriteData "SLParts" "SLMaterials" - + write::writeModelPartData write::WriteString "Begin Properties 0" write::WriteString "End Properties" @@ -73,12 +73,12 @@ proc Solid::write::writeConditions { } { } proc Solid::write::writeMeshes { } { - + write::writePartSubModelPart - + # Solo Malla , no en conditions write::writeNodalConditions "SLNodalConditions" - + # A Condition y a meshes-> salvo lo que no tenga topologia writeLoads } @@ -107,7 +107,7 @@ proc Solid::write::writeCustomBlock { } { write::WriteString "" } -proc Solid::write::getLastConditionId { } { +proc Solid::write::getLastConditionId { } { variable ConditionsDictGroupIterators set top 1 if {$ConditionsDictGroupIterators ne ""} { @@ -121,7 +121,7 @@ proc Solid::write::getLastConditionId { } { # Custom files proc Solid::write::WriteMaterialsFile { } { variable validApps - + set filename "Materials.json" set mats_json [Solid::write::getPropertiesList SLParts] @@ -132,18 +132,17 @@ proc Solid::write::WriteMaterialsFile { } { proc Solid::write::WriteMaterialsFileOld { } { variable validApps - + set filename "Materials.json" set mats_json [Solid::write::getPropertiesList SLParts] write::OpenFile $filename write::WriteJSON $mats_json write::CloseFile - + write::OpenFile "materials.py" - + set str " -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 # Importing the Kratos Library from KratosMultiphysics import * from KratosMultiphysics.SolidMechanicsApplication import * @@ -165,40 +164,40 @@ def AssignMaterial(Properties): if {$public_name eq "Circular"} { append str " section_type = \"$public_name\" - prop_list = \[\] + prop_list = \[\] prop_list.append([dict get $mat DIAMETER]) prop = SetProperties(section_type,prop_list,prop) " } elseif {$public_name eq "Tubular"} { - append str " + append str " section_type = \"$public_name\" - prop_list = \[\] + prop_list = \[\] prop_list.append([dict get $mat DIAMETER]) prop_list.append([dict get $mat THICKNESS]) prop = SetProperties(section_type,prop_list,prop) " } elseif {$public_name eq "Rectangular"} { - append str " + append str " section_type = \"$public_name\" - prop_list = \[\] + prop_list = \[\] prop_list.append([dict get $mat HEIGHT]) prop_list.append([dict get $mat WIDTH]) prop = SetProperties(section_type,prop_list,prop) -" +" } elseif {$public_name eq "UserDefined"} { - append str " + append str " section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat AREA]) + prop_list = \[\] + prop_list.append([dict get $mat AREA]) prop_list.append([dict get $mat INERTIA_X]) prop_list.append([dict get $mat INERTIA_Y]) prop = SetProperties(section_type,prop_list,prop) -" +" } elseif {$public_name eq "UserParameters"} { - append str " + append str " section_type = \"UserDefined\" - prop_list = \[\] - prop_list.append([dict get $mat YOUNGxAREA]) + prop_list = \[\] + prop_list.append([dict get $mat YOUNGxAREA]) prop_list.append([dict get $mat SHEARxREDUCED_AREA]) prop_list.append([dict get $mat YOUNGxINERTIA_X]) prop_list.append([dict get $mat YOUNGxINERTIA_Y]) @@ -206,9 +205,9 @@ def AssignMaterial(Properties): prop = SetMaterialProperties(section_type,prop_list,prop) " } else { - append str " + append str " section_type = \"$public_name\" - prop_list = \[\] + prop_list = \[\] prop_list.append([dict get $mat SIZE]) prop = SetProperties(section_type,prop_list,prop) " @@ -220,14 +219,14 @@ def AssignMaterial(Properties): mat = [dict get $mat ConstitutiveLaw]() prop.SetValue(CONSTITUTIVE_LAW, mat.Clone()) " - + } } } - + if 0 { foreach {part mat} [write::getMatDict] { - if {[dict get $mat APPID] in $validApps} { + if {[dict get $mat APPID] in $validApps} { append str " prop_id = [dict get $mat MID]; prop = Properties\[prop_id\] @@ -236,7 +235,7 @@ if 0 { " } } -} +} write::WriteString $str write::CloseFile @@ -253,11 +252,11 @@ proc Solid::write::ProcessVectorFunctionComponents { groupNode condition process lappend value $i } } - + dict set processDict Parameters compound_assignment [write::GetInputValue $groupNode [$process getInputPn compound_assignment]] dict set processDict Parameters value $value - - + + return $processDict } @@ -270,7 +269,7 @@ proc Solid::write::getPropertiesList {parts_un} { set python_module "assign_materials_process" set process_name "AssignMaterialsProcess" set help "This process creates a material and assigns its properties" - + #set doc $gid_groups_conds::doc #set root [$doc documentElement] set root [customlib::GetBaseRoot] @@ -284,20 +283,20 @@ proc Solid::write::getPropertiesList {parts_un} { set law_name [dict get $mat_dict $group ConstitutiveLaw] set law_type [[Model::getConstitutiveLaw $law_name] getAttribute "Type"] set mat_name [dict get $mat_dict $group Material] - + if {$law_type eq "1D_UR"} { set python_module "assign_sections_process" set process_name "AssignSectionsProcess" set help "This process creates a section and assigns its properties" } - - set prop_dict [dict create] + + set prop_dict [dict create] set kratos_module [[Model::getConstitutiveLaw $law_name] getAttribute "kratos_module"] dict set prop_dict "python_module" $python_module dict set prop_dict "kratos_module" $kratos_module dict set prop_dict "help" $help - dict set prop_dict "process_name" $process_name - + dict set prop_dict "process_name" $process_name + set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] set variables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $group] ] { @@ -310,25 +309,25 @@ proc Solid::write::getPropertiesList {parts_un} { dict set material_dict "model_part_name" $sub_model_part dict set material_dict "properties_id" $law_id dict set material_dict "material_name" $mat_name - + if {$law_type eq "1D_UR"} { set public_name [[Model::getConstitutiveLaw $law_name] getAttribute "pn"] dict set material_dict "section_type" $public_name - } else { + } else { set law_full_name [join [list "KratosMultiphysics" $kratos_module $law_name] "."] dict set material_dict constitutive_law [dict create name $law_full_name] } dict set material_dict variables $variables_list dict set material_dict tables dictnull dict set prop_dict Parameters $material_dict - + lappend props $prop_dict } } dict set props_dict material_models_list $props - + return $props_dict } @@ -347,7 +346,7 @@ proc Solid::write::GetUsedElements { {get "Objects"} } { proc Solid::write::GetDefaultOutputDict { {appid ""} } { set outputDict [dict create] set resultDict [dict create] - + if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} set GiDPostDict [dict create] dict set GiDPostDict GiDPostMode [write::getValue $results_UN GiDPostMode] @@ -355,20 +354,20 @@ proc Solid::write::GetDefaultOutputDict { {appid ""} } { dict set GiDPostDict WriteConditionsFlag [write::getValue $results_UN GiDWriteConditionsFlag] dict set GiDPostDict MultiFileFlag [write::getValue $results_UN GiDMultiFileFlag] dict set resultDict gidpost_flags $GiDPostDict - + dict set resultDict file_label [write::getValue $results_UN FileLabel] set outputCT [write::getValue $results_UN OutputControlType] dict set resultDict output_control_type $outputCT if {$outputCT eq "time"} {set frequency [write::getValue $results_UN OutputDeltaTime]} {set frequency [write::getValue $results_UN OutputDeltaStep]} dict set resultDict output_interval $frequency - + dict set resultDict node_output [write::getValue $results_UN NodeOutput] - + #dict set resultDict plane_output [write::GetCutPlanesList $results_UN] - + dict set resultDict nodal_results [write::GetResultsList $results_UN OnNodes] dict set resultDict gauss_point_results [write::GetResultsList $results_UN OnElement] - + dict set outputDict "result_file_configuration" $resultDict #dict set outputDict "point_data_configuration" [write::GetEmptyList] return $outputDict diff --git a/kratos.gid/apps/Stent/python/KratosStructural.py b/kratos.gid/apps/Stent/python/KratosStructural.py index 45886b7f0..53e15cab2 100644 --- a/kratos.gid/apps/Stent/python/KratosStructural.py +++ b/kratos.gid/apps/Stent/python/KratosStructural.py @@ -1,4 +1,5 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 +import sys +import time import KratosMultiphysics from KratosMultiphysics.StructuralMechanicsApplication.structural_mechanics_analysis import StructuralMechanicsAnalysis diff --git a/kratos.gid/apps/Structural/python/KratosStructural.py b/kratos.gid/apps/Structural/python/KratosStructural.py index 4cb9e2bc5..296cedc9c 100755 --- a/kratos.gid/apps/Structural/python/KratosStructural.py +++ b/kratos.gid/apps/Structural/python/KratosStructural.py @@ -1,5 +1,3 @@ -from __future__ import print_function, absolute_import, division #makes KratosMultiphysics backward compatible with python 2.6 and 2.7 - import sys import time From eaddcc729cf180f96e1abb3c3d6a31b2f0e61322 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Sat, 30 Jan 2021 19:33:52 +0100 Subject: [PATCH 171/556] Added tables for thermal properties --- .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index 5301a5efb..85995e024 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -18,9 +18,9 @@ - + - + @@ -42,9 +42,9 @@ - + - + @@ -69,9 +69,9 @@ - + - + @@ -96,9 +96,9 @@ - + - + @@ -122,9 +122,9 @@ - + - + @@ -147,9 +147,9 @@ - + - + From 89bb53631f38cd41856da2938bf678f500318c01 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 5 Feb 2021 16:46:55 +0100 Subject: [PATCH 172/556] protect against window opening in batch --- kratos.gid/apps/StenosisWizard/start.tcl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index 2ef261cd2..c80fbabcb 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -3,6 +3,7 @@ namespace eval ::StenosisWizard { variable dir variable kratos_name variable attributes + variable must_open_wizard_window } proc ::StenosisWizard::Init { } { @@ -10,6 +11,9 @@ proc ::StenosisWizard::Init { } { variable dir variable kratos_name variable attributes + variable must_open_wizard_window + + set must_open_wizard_window 1 # Init Working directory set dir [apps::getMyDir "StenosisWizard"] @@ -41,7 +45,7 @@ proc ::StenosisWizard::LoadMyFiles { } { # Init the Wizard Window - after 600 [::StenosisWizard::StartWizardWindow] + #after 600 [::StenosisWizard::StartWizardWindow] } @@ -56,8 +60,9 @@ proc ::StenosisWizard::StartWizardWindow { } { smart_wizard::SetWizardImageDirectory [file join $dir images] smart_wizard::LoadWizardDoc [file join $dir wizard Wizard_default.wiz] smart_wizard::ImportWizardData + variable must_open_wizard_window - smart_wizard::CreateWindow + if {$must_open_wizard_window} {smart_wizard::CreateWindow } } proc ::StenosisWizard::CustomToolbarItems { } { return "-1" From 4b01b9b157f3499c6a5a8bf005a568ebcf6337b7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 9 Feb 2021 18:34:56 +0100 Subject: [PATCH 173/556] minor start window wizard --- kratos.gid/apps/StenosisWizard/start.tcl | 2 +- kratos.gid/scripts/Menus.tcl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index c80fbabcb..8ba3a8fce 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -45,7 +45,7 @@ proc ::StenosisWizard::LoadMyFiles { } { # Init the Wizard Window - #after 600 [::StenosisWizard::StartWizardWindow] + after 600 [::StenosisWizard::StartWizardWindow] } diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index 6d28c17fd..858da26c5 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -129,7 +129,7 @@ proc Kratos::ChangeMenus { } { if {$::Kratos::kratos_private(UseWizard)} { GiDMenu::InsertOption "Kratos" [list "---"] [incr pos] PRE "" "" "" replace = - GiDMenu::InsertOption "Kratos" [list "Wizard window" ] [incr pos] PRE [list Wizard::CreateWindow] "" "" replace = + GiDMenu::InsertOption "Kratos" [list "Wizard window" ] [incr pos] PRE [list apps::ExecuteOnCurrentApp StartWizardWindow] "" "" replace = } GiDMenu::InsertOption "Kratos" [list "---"] [incr pos] PRE "" "" "" replace = GiDMenu::InsertOption "Kratos" [list "Import MDPA"] [incr pos] PRE [list Kratos::ReadPreW] "" "" replace = From 9a1f8be3583e055243352661796a851faa853484 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 9 Feb 2021 19:22:07 +0100 Subject: [PATCH 174/556] Replace deprecated value to new output_path --- kratos.gid/scripts/Writing/WriteProjectParameters.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index ac9114d6e..cd9662e48 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -506,7 +506,7 @@ proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { dict set resultDict file_format [getValueByXPath $vtk_options_xpath VtkFileFormat] dict set resultDict output_precision 7 dict set resultDict output_sub_model_parts "false" - dict set resultDict folder_name "vtk_output" + dict set resultDict output_path "vtk_output" dict set resultDict save_output_files_in_folder "true" dict set resultDict nodal_solution_step_data_variables [GetResultsList $results_UN OnNodes] dict set resultDict nodal_data_value_variables [list ] From f748f1334b22ef61a2f2a0b35dbd93a61c67abcf Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 9 Feb 2021 20:41:49 +0100 Subject: [PATCH 175/556] Remove old externalsolver references --- kratos.gid/apps/DEMPFEM/python/MainKratos.py | 4 ++-- kratos.gid/apps/Dam/python/dam_acoustic_script.py | 2 +- kratos.gid/apps/Dam/python/dam_eigen_script.py | 2 +- kratos.gid/apps/Dam/python/dam_main.py | 2 +- kratos.gid/apps/Dam/python/dam_main_construction.py | 2 +- kratos.gid/apps/Dam/python/dam_main_selfweight.py | 2 +- kratos.gid/apps/FluidDEM/python/MainKratos.py | 4 ++-- kratos.gid/apps/Pfem/python/RunPfem.py | 2 +- kratos.gid/apps/Solid/python/RunSolid.py | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/DEMPFEM/python/MainKratos.py b/kratos.gid/apps/DEMPFEM/python/MainKratos.py index 4b75cfa20..d5378e520 100644 --- a/kratos.gid/apps/DEMPFEM/python/MainKratos.py +++ b/kratos.gid/apps/DEMPFEM/python/MainKratos.py @@ -10,9 +10,9 @@ import KratosMultiphysics.FluidDynamicsApplication import KratosMultiphysics.DEMApplication import KratosMultiphysics.SwimmingDEMApplication as SDEM -import KratosMultiphysics.SolidMechanicsApplication +# import KratosMultiphysics.SolidMechanicsApplication import KratosMultiphysics.PfemFluidDynamicsApplication -import KratosMultiphysics.ExternalSolversApplication +import KratosMultiphysics.LinearSolversApplication from KratosMultiphysics.SwimmingDEMApplication.swimming_DEM_PFEM_analysis import SDEMPFEMAnalysis diff --git a/kratos.gid/apps/Dam/python/dam_acoustic_script.py b/kratos.gid/apps/Dam/python/dam_acoustic_script.py index f4fb3540a..6a94420cf 100644 --- a/kratos.gid/apps/Dam/python/dam_acoustic_script.py +++ b/kratos.gid/apps/Dam/python/dam_acoustic_script.py @@ -10,7 +10,7 @@ # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers +import KratosMultiphysics.LinearSolversApplication as KratosSolvers #import KratosMultiphysics.TrilinosApplication as TrilinosApplication import KratosMultiphysics.ConvectionDiffusionApplication as KratosConvDiff import KratosMultiphysics.SolidMechanicsApplication as KratosSolid diff --git a/kratos.gid/apps/Dam/python/dam_eigen_script.py b/kratos.gid/apps/Dam/python/dam_eigen_script.py index ee0ac26c7..3741f92c4 100644 --- a/kratos.gid/apps/Dam/python/dam_eigen_script.py +++ b/kratos.gid/apps/Dam/python/dam_eigen_script.py @@ -10,7 +10,7 @@ # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers +import KratosMultiphysics.LinearSolversApplication as KratosSolvers #import KratosMultiphysics.TrilinosApplication as TrilinosApplication import KratosMultiphysics.SolidMechanicsApplication as KratosSolid import KratosMultiphysics.DamApplication as KratosDam diff --git a/kratos.gid/apps/Dam/python/dam_main.py b/kratos.gid/apps/Dam/python/dam_main.py index b922c75f2..4d5925c0e 100644 --- a/kratos.gid/apps/Dam/python/dam_main.py +++ b/kratos.gid/apps/Dam/python/dam_main.py @@ -10,7 +10,7 @@ # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers +import KratosMultiphysics.LinearSolversApplication as KratosSolvers #import KratosMultiphysics.TrilinosApplication as TrilinosApplication import KratosMultiphysics.ConvectionDiffusionApplication as KratosConvDiff import KratosMultiphysics.SolidMechanicsApplication as KratosSolid diff --git a/kratos.gid/apps/Dam/python/dam_main_construction.py b/kratos.gid/apps/Dam/python/dam_main_construction.py index d7727e41f..523306875 100644 --- a/kratos.gid/apps/Dam/python/dam_main_construction.py +++ b/kratos.gid/apps/Dam/python/dam_main_construction.py @@ -10,7 +10,7 @@ # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers +import KratosMultiphysics.LinearSolversApplication as KratosSolvers #import KratosMultiphysics.TrilinosApplication as TrilinosApplication import KratosMultiphysics.ConvectionDiffusionApplication as KratosConvDiff import KratosMultiphysics.SolidMechanicsApplication as KratosSolid diff --git a/kratos.gid/apps/Dam/python/dam_main_selfweight.py b/kratos.gid/apps/Dam/python/dam_main_selfweight.py index 46ea3c158..85427d4bc 100644 --- a/kratos.gid/apps/Dam/python/dam_main_selfweight.py +++ b/kratos.gid/apps/Dam/python/dam_main_selfweight.py @@ -10,7 +10,7 @@ # Import kratos core and applications import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication as KratosSolvers +import KratosMultiphysics.LinearSolversApplication as KratosSolvers #import KratosMultiphysics.TrilinosApplication as TrilinosApplication import KratosMultiphysics.ConvectionDiffusionApplication as KratosConvDiff import KratosMultiphysics.SolidMechanicsApplication as KratosSolid diff --git a/kratos.gid/apps/FluidDEM/python/MainKratos.py b/kratos.gid/apps/FluidDEM/python/MainKratos.py index f845f1d00..2cbb8e947 100644 --- a/kratos.gid/apps/FluidDEM/python/MainKratos.py +++ b/kratos.gid/apps/FluidDEM/python/MainKratos.py @@ -10,9 +10,9 @@ from KratosMultiphysics import * try: - from KratosMultiphysics.ExternalSolversApplication import * + from KratosMultiphysics.LinearSolversApplication import * except ImportError: - warnings.warn('Package ExternalSolversApplication could not be loaded. Make sure to compile it if needed.', ImportWarning) + warnings.warn('Package LinearSolversApplication could not be loaded. Make sure to compile it if needed.', ImportWarning) from KratosMultiphysics.DEMApplication import * from KratosMultiphysics.FluidDynamicsApplication import * diff --git a/kratos.gid/apps/Pfem/python/RunPfem.py b/kratos.gid/apps/Pfem/python/RunPfem.py index 3dd0f0902..976068704 100644 --- a/kratos.gid/apps/Pfem/python/RunPfem.py +++ b/kratos.gid/apps/Pfem/python/RunPfem.py @@ -1,5 +1,5 @@ import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication +import KratosMultiphysics.LinearSolversApplication import KratosMultiphysics.DelaunayMeshingApplication import KratosMultiphysics.PfemApplication import KratosMultiphysics.ConstitutiveModelsApplication diff --git a/kratos.gid/apps/Solid/python/RunSolid.py b/kratos.gid/apps/Solid/python/RunSolid.py index ebc2c9f39..3075b069e 100644 --- a/kratos.gid/apps/Solid/python/RunSolid.py +++ b/kratos.gid/apps/Solid/python/RunSolid.py @@ -1,5 +1,5 @@ import KratosMultiphysics -import KratosMultiphysics.ExternalSolversApplication +import KratosMultiphysics.LinearSolversApplication import KratosMultiphysics.SolidMechanicsApplication import KratosMultiphysics.ConstitutiveModelsApplication import KratosMultiphysics.SolidMechanicsApplication.MainSolid as MainSolid From 6832f8787deee68474a1748ba450d7c06a0c61f8 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 24 Feb 2021 18:08:42 +0100 Subject: [PATCH 176/556] Added temperature dependency for yield shear in Bingham law --- kratos.gid/apps/PfemThermic/write/write.tcl | 4 +++- kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 3336b95c2..4b00e834a 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -149,7 +149,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] if {$constitutive_law ne ""} { set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT"] + set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YIELDSHEAR" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT"] set variables_dict [dict create] set tables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $group] ] { @@ -191,6 +191,8 @@ proc PfemThermic::write::GetTable { prop fileName } { dict set table output_variable "DENSITY" } elseif {$prop eq "TEMPERATURE_vs_VISCOSITY"} { dict set table output_variable "DYNAMIC_VISCOSITY" + } elseif {$prop eq "TEMPERATURE_vs_YIELDSHEAR"} { + dict set table output_variable "YIELD_SHEAR" } elseif {$prop eq "TEMPERATURE_vs_YOUNG"} { dict set table output_variable "YOUNG_MODULUS" } elseif {$prop eq "TEMPERATURE_vs_POISSON"} { diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index 85995e024..489af6495 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -67,6 +67,7 @@ + @@ -94,6 +95,7 @@ + From d9ee7d6a404f89cb86bc0a9e82bfc373efdd85fe Mon Sep 17 00:00:00 2001 From: Miguel Angel Celigueta Date: Mon, 15 Mar 2021 11:29:15 +0100 Subject: [PATCH 177/556] pn of external forces and moments --- kratos.gid/apps/DEM/xml/Processes.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 4036c7705..c75424e65 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -61,28 +61,28 @@ - + - + - + - + - + - + From 2b0b9f0ce8b8e7d84eed9116de1ec9103b58493d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 28 Mar 2021 09:51:19 +0200 Subject: [PATCH 178/556] hotfix 14 version --- kratos.gid/kratos.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 7a31e611a..df4fd2f14 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -82,7 +82,7 @@ proc Kratos::RegisterGiDEvents { } { # Preferences window GiD_RegisterPluginPreferencesProc Kratos::Event_ModifyPreferencesWindow - CreateWidgetsFromXml::ClearCachePreferences + if {[GidUtils::VersionCmp "15.0.0"] >=0 } {CreateWidgetsFromXml::ClearCachePreferences} } proc Kratos::Event_InitProblemtype { dir } { From c30275facca9738dcbbfe7511dd41ccee9d6d3ef Mon Sep 17 00:00:00 2001 From: Miguel Angel Celigueta Date: Thu, 15 Apr 2021 16:40:19 +0200 Subject: [PATCH 179/556] fixing name of conditions printed --- kratos.gid/apps/DEM/xml/Conditions.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Conditions.xml b/kratos.gid/apps/DEM/xml/Conditions.xml index 41eb77713..3b50cef8d 100644 --- a/kratos.gid/apps/DEM/xml/Conditions.xml +++ b/kratos.gid/apps/DEM/xml/Conditions.xml @@ -2,7 +2,7 @@ - + @@ -11,7 +11,7 @@ - + From 67ff7f4dcc6e15d12acd8f560a7b5154092bd70a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 20 Apr 2021 16:09:22 +0200 Subject: [PATCH 180/556] add bending input --- kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz index b150d66b5..bbcdc4f85 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz @@ -15,6 +15,8 @@ + + From c4dc6d0fea423bf9bcce6192f4e6e49a29d44fde Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 20 Apr 2021 18:01:30 +0200 Subject: [PATCH 181/556] primer aproach --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index bc9f93728..539fa638b 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -462,5 +462,44 @@ proc StenosisWizard::AfterMeshGeneration { fail } { GiD_Process Mescape Files Save } + +proc StenosisWizard::Bend { angle } { + set ndim 3 + set ind2 2 + set indNO 3 + + #TODO CALCULATE THIS + set orig_x -100 + set len 200 + + lassign [GiD_Info Mesh nodes -array] ids coords + lassign $coords coord_x coord_y coord_z + set size [objarray length $coord_x] + + for {set i 0} {$i < $size} {incr i} { + # primera parte + set id [objarray get $ids $i] + set old_val_x [objarray get $coord_x $i] + set old_val_y [objarray get $coord_y $i] + set old_val_z [objarray get $coord_z $i] + set dist_x [expr $old_val_x - $orig_x] + set ang [expr $angle*$dist_x/$len] + + set res_x [expr $old_val_x + sin($ang) * $old_val_y] + set res_y [expr cos($ang) *$old_val_y] + set res_z $old_val_z + + # segunda parte + set ang2 [expr $angle*($old_val_x - $orig_x)/$len] + + set res_x [expr $old_val_x + cos($ang2)*($old_val_x - $orig_x) + sin($ang2)*$res_y] + set res_y [expr $old_val_y - sin($ang2)*($old_val_x - $orig_x) + cos($ang2)*$res_y] + set res_z $old_val_z + + # Move the nodes to the final position + GiD_Mesh edit node $id [list $res_x $res_y $res_z] + } +} + StenosisWizard::Wizard::Init From 8258f31491943047e9ce838cd240a9f8f300e240 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 20 Apr 2021 19:36:21 +0200 Subject: [PATCH 182/556] bending ecuations --- kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 539fa638b..39ad05849 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -484,16 +484,18 @@ proc StenosisWizard::Bend { angle } { set old_val_z [objarray get $coord_z $i] set dist_x [expr $old_val_x - $orig_x] set ang [expr $angle*$dist_x/$len] - + set ang [expr {double(round(10000*$ang))/10000}] set res_x [expr $old_val_x + sin($ang) * $old_val_y] set res_y [expr cos($ang) *$old_val_y] set res_z $old_val_z - + # segunda parte set ang2 [expr $angle*($old_val_x - $orig_x)/$len] + set res_x_tmp $res_x + set x_rel [expr $res_x_tmp - $orig_x] - set res_x [expr $old_val_x + cos($ang2)*($old_val_x - $orig_x) + sin($ang2)*$res_y] - set res_y [expr $old_val_y - sin($ang2)*($old_val_x - $orig_x) + cos($ang2)*$res_y] + set res_x [expr $orig_x + cos($ang2)*($x_rel) + sin($ang2)*$res_y] + set res_y [expr -sin($ang2)*($x_rel) + cos($ang2)*$res_y] set res_z $old_val_z # Move the nodes to the final position From 52960d0767f963a5d31ba91db5bb19eeb8cda93e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 20 Apr 2021 19:54:22 +0200 Subject: [PATCH 183/556] Bending called in aftermesh automatically --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 39ad05849..1dc57d09f 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -457,20 +457,30 @@ proc StenosisWizard::Wizard::LastStep { } { } proc StenosisWizard::AfterMeshGeneration { fail } { + GidUtils::CloseWindow MESHPROGRESS GiD_Process Mescape Mescape Mescape GiD_Process Mescape Files Save + StenosisWizard::Wizard::PostMeshBend + GiD_Process Mescape Files Save } -proc StenosisWizard::Bend { angle } { - set ndim 3 - set ind2 2 - set indNO 3 +proc StenosisWizard::Wizard::PostMeshBend { } { + + set length [ smart_wizard::GetProperty Geometry Length,value] + set length_plotted [expr $length*2] + set orig_x [ expr $length*-1] + set angle [ smart_wizard::GetProperty Geometry Bending,value] + set angle [expr $angle/2] + GidUtils::DisableGraphics + StenosisWizard::Wizard::Bend $orig_x $length_plotted $angle + GidUtils::EnableGraphics + GiD_Process Mescape Meshing MeshView escape + +} - #TODO CALCULATE THIS - set orig_x -100 - set len 200 +proc StenosisWizard::Wizard::Bend { orig_x len angle} { lassign [GiD_Info Mesh nodes -array] ids coords lassign $coords coord_x coord_y coord_z From aeed3000104d8634247a29d8ba1407be588d75d0 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 21 Apr 2021 15:40:15 +0200 Subject: [PATCH 184/556] Moved bending to simulation stem --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 43 ++++++++++--------- .../StenosisWizard/wizard/Wizard_default.wiz | 4 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 1dc57d09f..c263069ca 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -428,28 +428,31 @@ proc StenosisWizard::Wizard::LastStep { } { #W "$length $delta" # Cut planes - #gid_groups_conds::copyNode {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][1]} {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']} - - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]} {name Main} - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]/value[@n='normal']} {v 0.0,1.0,0.0} - spdAux::ClearCutPlanes - set cutplane_xp "[spdAux::getRoute CutPlanes]/blockdata\[1\]" - - for {set i 1} {$i <= $ncuts} {incr i} { - set x [expr -$length + ($i * $delta)] - set x [expr double(round(100*$x))/100] + set cuts_enabled 0 + if {$cuts_enabled} { + #gid_groups_conds::copyNode {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][1]} {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']} + + #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]} {name Main} + #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]/value[@n='normal']} {v 0.0,1.0,0.0} + spdAux::ClearCutPlanes + set cutplane_xp "[spdAux::getRoute CutPlanes]/blockdata\[1\]" + + for {set i 1} {$i <= $ncuts} {incr i} { + set x [expr -$length + ($i * $delta)] + set x [expr double(round(100*$x))/100] + gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] + set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $i +1]\]" + gid_groups_conds::setAttributesF $cutplane "name CutPlane$i" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 1.0,0.0,0.0" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v $x,0.0,0.0" + } + gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] - set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $i +1]\]" - gid_groups_conds::setAttributesF $cutplane "name CutPlane$i" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 1.0,0.0,0.0" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v $x,0.0,0.0" + set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $ncuts +2]\]" + gid_groups_conds::setAttributesF $cutplane "name CutPlane[expr $ncuts +1]" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 0.0,1.0,0.0" } - gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] - set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $ncuts +2]\]" - gid_groups_conds::setAttributesF $cutplane "name CutPlane[expr $ncuts +1]" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 0.0,1.0,0.0" - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='velocity_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='pressure_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} spdAux::RequestRefresh @@ -471,7 +474,7 @@ proc StenosisWizard::Wizard::PostMeshBend { } { set length [ smart_wizard::GetProperty Geometry Length,value] set length_plotted [expr $length*2] set orig_x [ expr $length*-1] - set angle [ smart_wizard::GetProperty Geometry Bending,value] + set angle [ smart_wizard::GetProperty Simulation Bending,value] set angle [expr $angle/2] GidUtils::DisableGraphics StenosisWizard::Wizard::Bend $orig_x $length_plotted $angle diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz index bbcdc4f85..5b6eb28a1 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz @@ -15,8 +15,6 @@ - - @@ -56,6 +54,8 @@ + + From 335cd351d4687b29fec63c3a63a86d851aea1e24 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 21 Apr 2021 15:46:47 +0200 Subject: [PATCH 185/556] Avoid duplicity of solvers --- kratos.gid/apps/Buoyancy/xml/XmlController.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl index d2f41667b..5721d63c5 100644 --- a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl +++ b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl @@ -16,6 +16,7 @@ proc Buoyancy::xml::Init { } { Model::ForgetMaterials Model::getMaterials Materials.xml + Model::ForgetSolvers Model::getSolvers "../../Common/xml/Solvers.xml" [Model::getCondition "Outlet2D"] setAttribute ElementType "Point,Line" From bed1540d920a91bf0b547baffefb6d58fad80a70 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 22 Apr 2021 18:37:01 +0200 Subject: [PATCH 186/556] bend cuts --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 81 ++++++++++++++----- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index c263069ca..2e8dc2949 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -394,6 +394,7 @@ proc StenosisWizard::Wizard::Mesh { } { MeshGenerationOKDo $mesh } proc StenosisWizard::Wizard::Save { } { + LastStep GiD_Process Mescape Files Save } @@ -422,19 +423,27 @@ proc StenosisWizard::Wizard::LastStep { } { gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='TimeParameters']/value[@n='EndTime']} "v $end" gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='TimeParameters']/value[@n='DeltaTime']} "v $delta" + + PlaceCutPlanes + + #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='velocity_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} + #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='pressure_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} + spdAux::RequestRefresh + +} + +proc StenosisWizard::Wizard::PlaceCutPlanes { } { set ncuts [smart_wizard::GetProperty Simulation Cuts,value] set length [smart_wizard::GetProperty Geometry Length,value] set delta [expr 2.0*double($length)/(double($ncuts)+1.0)] - #W "$length $delta" + set orig_x [ expr $length*-1] + + set angle [ smart_wizard::GetProperty Simulation Bending,value] # Cut planes - set cuts_enabled 0 + set cuts_enabled 1 if {$cuts_enabled} { - #gid_groups_conds::copyNode {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][1]} {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']} - - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]} {name Main} - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='Results']/container[@n='CutPlanes']/blockdata[@n='CutPlane'][2]/value[@n='normal']} {v 0.0,1.0,0.0} - spdAux::ClearCutPlanes + spdAux::ClearCutPlanes set cutplane_xp "[spdAux::getRoute CutPlanes]/blockdata\[1\]" for {set i 1} {$i <= $ncuts} {incr i} { @@ -443,20 +452,35 @@ proc StenosisWizard::Wizard::LastStep { } { gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $i +1]\]" gid_groups_conds::setAttributesF $cutplane "name CutPlane$i" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 1.0,0.0,0.0" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v $x,0.0,0.0" + + set coords [list [objarray new doublearray -values [list $x $x $x]] [objarray new doublearray -values {0.0 1.0 0.0}] [objarray new doublearray -values {0.0 0.0 1.0}]] + set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x [expr $length*2] [expr $angle/2] $coords] + set o [list [objarray get [lindex $new_nodes 0] 0] [objarray get [lindex $new_nodes 1] 0] [objarray get [lindex $new_nodes 2] 0] ] + set p1 [list [objarray get [lindex $new_nodes 0] 1] [objarray get [lindex $new_nodes 1] 1] [objarray get [lindex $new_nodes 2] 1] ] + set p2 [list [objarray get [lindex $new_nodes 0] 2] [objarray get [lindex $new_nodes 1] 2] [objarray get [lindex $new_nodes 2] 2] ] + set v1 [math::linearalgebra::sub $p1 $o] + set v2 [math::linearalgebra::sub $p2 $o] + set v_norm [::math::linearalgebra::crossproduct $v1 $v2] + gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v [join $v_norm {,}]" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v [join $o {,}]" } + set x $length + set coords [list [objarray new doublearray -values [list $x [expr $x +1] $x]] [objarray new doublearray -values {0.0 0.0 0.0}] [objarray new doublearray -values {0.0 0.0 1.0}]] + set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x [expr $length*2] [expr $angle/2] $coords] + set o [list [objarray get [lindex $new_nodes 0] 0] [objarray get [lindex $new_nodes 1] 0] [objarray get [lindex $new_nodes 2] 0] ] + set p1 [list [objarray get [lindex $new_nodes 0] 1] [objarray get [lindex $new_nodes 1] 1] [objarray get [lindex $new_nodes 2] 1] ] + set p2 [list [objarray get [lindex $new_nodes 0] 2] [objarray get [lindex $new_nodes 1] 2] [objarray get [lindex $new_nodes 2] 2] ] + set v1 [math::linearalgebra::sub $p1 $o] + set v2 [math::linearalgebra::sub $p2 $o] + set v_norm [::math::linearalgebra::crossproduct $v1 $v2] gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $ncuts +2]\]" gid_groups_conds::setAttributesF $cutplane "name CutPlane[expr $ncuts +1]" - gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v 0.0,1.0,0.0" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='normal'\]" "v [join $v_norm {,}]" + gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v [join $o {,}]" } - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='velocity_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} - #gid_groups_conds::setAttributesF {container[@n='Fluid']/container[@n='SolutionStrat']/container[@n='pressure_linear_solver_settings']/value[@n='Solver']} {v Conjugate_gradient} - spdAux::RequestRefresh - } proc StenosisWizard::AfterMeshGeneration { fail } { @@ -470,7 +494,7 @@ proc StenosisWizard::AfterMeshGeneration { fail } { proc StenosisWizard::Wizard::PostMeshBend { } { - + set length [ smart_wizard::GetProperty Geometry Length,value] set length_plotted [expr $length*2] set orig_x [ expr $length*-1] @@ -486,12 +510,26 @@ proc StenosisWizard::Wizard::PostMeshBend { } { proc StenosisWizard::Wizard::Bend { orig_x len angle} { lassign [GiD_Info Mesh nodes -array] ids coords + set moved_nodes [StenosisWizard::Wizard::BendNodes $orig_x $len $angle $coords] + lassign $moved_nodes coord_x coord_y coord_z + set size [objarray length $coord_x] + for {set i 0} {$i < $size} {incr i} { + set res_x [objarray get $coord_x $i] + set res_y [objarray get $coord_y $i] + set res_z [objarray get $coord_z $i] + GiD_Mesh edit node [objarray get $ids $i] [list $res_x $res_y $res_z] + } +} + +proc StenosisWizard::Wizard::BendNodes {orig_x len angle coords} { lassign $coords coord_x coord_y coord_z set size [objarray length $coord_x] + set result_x [objarray new doublearray $size 0.0] + set result_y [objarray new doublearray $size 0.0] + set result_z [objarray new doublearray $size 0.0] for {set i 0} {$i < $size} {incr i} { # primera parte - set id [objarray get $ids $i] set old_val_x [objarray get $coord_x $i] set old_val_y [objarray get $coord_y $i] set old_val_z [objarray get $coord_z $i] @@ -507,13 +545,12 @@ proc StenosisWizard::Wizard::Bend { orig_x len angle} { set res_x_tmp $res_x set x_rel [expr $res_x_tmp - $orig_x] - set res_x [expr $orig_x + cos($ang2)*($x_rel) + sin($ang2)*$res_y] - set res_y [expr -sin($ang2)*($x_rel) + cos($ang2)*$res_y] - set res_z $old_val_z - - # Move the nodes to the final position - GiD_Mesh edit node $id [list $res_x $res_y $res_z] + # Store the nodes final position + objarray set $result_x $i [expr $orig_x + cos($ang2)*($x_rel) + sin($ang2)*$res_y] + objarray set $result_y $i [expr -sin($ang2)*($x_rel) + cos($ang2)*$res_y] + objarray set $result_z $i $old_val_z } + return [list $result_x $result_y $result_z] } StenosisWizard::Wizard::Init From 0b000886711b52afb065b37003f820c3098e8c04 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 10:48:29 +0200 Subject: [PATCH 187/556] cutplanes --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 54 +++++++++++++++++-- .../StenosisWizard/wizard/Wizard_default.wiz | 1 + 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 2e8dc2949..be5268609 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -438,12 +438,12 @@ proc StenosisWizard::Wizard::PlaceCutPlanes { } { set delta [expr 2.0*double($length)/(double($ncuts)+1.0)] set orig_x [ expr $length*-1] - set angle [ smart_wizard::GetProperty Simulation Bending,value] + set angle [smart_wizard::GetProperty Simulation Bending,value] # Cut planes set cuts_enabled 1 if {$cuts_enabled} { - spdAux::ClearCutPlanes + spdAux::ClearCutPlanes set cutplane_xp "[spdAux::getRoute CutPlanes]/blockdata\[1\]" for {set i 1} {$i <= $ncuts} {incr i} { @@ -465,10 +465,11 @@ proc StenosisWizard::Wizard::PlaceCutPlanes { } { gid_groups_conds::setAttributesF "$cutplane/value\[@n='point'\]" "v [join $o {,}]" } - set x $length + set x 0.0 set coords [list [objarray new doublearray -values [list $x [expr $x +1] $x]] [objarray new doublearray -values {0.0 0.0 0.0}] [objarray new doublearray -values {0.0 0.0 1.0}]] set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x [expr $length*2] [expr $angle/2] $coords] set o [list [objarray get [lindex $new_nodes 0] 0] [objarray get [lindex $new_nodes 1] 0] [objarray get [lindex $new_nodes 2] 0] ] + W $o set p1 [list [objarray get [lindex $new_nodes 0] 1] [objarray get [lindex $new_nodes 1] 1] [objarray get [lindex $new_nodes 2] 1] ] set p2 [list [objarray get [lindex $new_nodes 0] 2] [objarray get [lindex $new_nodes 1] 2] [objarray get [lindex $new_nodes 2] 2] ] set v1 [math::linearalgebra::sub $p1 $o] @@ -553,5 +554,52 @@ proc StenosisWizard::Wizard::BendNodes {orig_x len angle coords} { return [list $result_x $result_y $result_z] } +proc StenosisWizard::Wizard::DrawCuts { } { + set planes [write::GetCutPlanesList] + set cont 0 + if {[GiD_Layers exist cuts]} {GiD_Layers delete cuts} + GiD_Process 'Layers New cuts escape 'Layers ToUse cuts escape + + foreach plane $planes { + incr cont 1 + #if {$cont > 1} {return} + set center [dict get $plane point] + set normal [dict get $plane normal] + lassign [MathUtils::CalculateLocalAxisFromXAxis $normal] v1 v2 + W "center $center" + W "normal $normal" + W "v1 $v1" + W "v2 $v2" + # set v1 [list [expr -1.0*[lindex $normal 0]] [lindex $normal 1] [lindex $normal 2]] + # set v2 [list [lindex $normal 0] [lindex $normal 1] 1] + set c1 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v1]] + set c2 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v2]] + set c3 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v1]] + set c4 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v2]] + + set n1 [GiD_Mesh create node append $c1] + set n2 [GiD_Mesh create node append $c2] + set n3 [GiD_Mesh create node append $c3] + set n4 [GiD_Mesh create node append $c4] + W "$n1 $n2 $n3 $n4" + GiD_Mesh create element append Line 2 [list $n1 $n2] + GiD_Mesh create element append Line 2 [list $n2 $n3] + GiD_Mesh create element append Line 2 [list $n3 $n4] + GiD_Mesh create element append Line 2 [list $n4 $n1] + } +} + +proc StenosisWizard::Wizard::DrawCutPlane { n1 n2 n3 n4 } { + + GiD_OpenGL draw -vertex $points($n1) + GiD_OpenGL draw -vertex $points($n2) + GiD_OpenGL draw -vertex $points($n2) + GiD_OpenGL draw -vertex $points($n3) + GiD_OpenGL draw -vertex $points($n3) + GiD_OpenGL draw -vertex $points($n4) + GiD_OpenGL draw -vertex $points($n4) + GiD_OpenGL draw -vertex $points($n1) +} + StenosisWizard::Wizard::Init diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz index 5b6eb28a1..4dae7aa36 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz @@ -49,6 +49,7 @@ + From 8d8ca5c116e0e500c2389e6ba68066b1a21a2306 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 11:16:32 +0200 Subject: [PATCH 188/556] unify criteria of length --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 62 +++++++++++-------- .../StenosisWizard/wizard/Wizard_default.wiz | 4 +- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index be5268609..ee733c73f 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -24,7 +24,7 @@ proc StenosisWizard::Wizard::GeometryTypeChange { } { if {[GiDVersionCmp 14.1.3d] >= 0} { switch $type { "Circular" { - smart_wizard::SetProperty Geometry Length,value 100 + smart_wizard::SetProperty Geometry Length,value 200 smart_wizard::SetProperty Geometry Delta,value 3.18 smart_wizard::SetProperty Geometry Precision,state normal smart_wizard::SetProperty Geometry SphRadius,state hidden @@ -107,8 +107,12 @@ proc StenosisWizard::Wizard::DrawGeometry {} { proc StenosisWizard::Wizard::DrawTriangular {length radius start end delta } { GidUtils::DisableGraphics + set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] + W "DrawTriangular $length" + WV origin_x + WV end_x set layer [GiD_Info Project LayerToUse] GiD_Process 'Layers Color $layer 153036015 Transparent $layer 255 escape Mescape @@ -148,9 +152,9 @@ proc StenosisWizard::Wizard::DrawSpherical {length radius start end delta sphrad set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] - # set m2 [expr double($end) / double ($delta)] - # set m1 [expr double($delta) / double($end) *-1.0] - # vGarate set ycenter [expr double($delta)/2-$m2*double($end)/2] + W "DrawSpherical $length" + WV origin_x + WV end_x set hdelta [expr double($delta) - double($radius)] set ycenter [expr double ($hdelta) - double($sphradius)] @@ -193,6 +197,9 @@ proc StenosisWizard::Wizard::DrawPolygonal {length radius start end delta tpoly GidUtils::DisableGraphics set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] + W "DrawPolygonal $length" + WV origin_x + WV end_x set halfpoly [expr double($tpoly)/2] set hdelta [expr $delta - $radius] @@ -250,10 +257,16 @@ proc StenosisWizard::Wizard::DrawCircular {length radius start end delta precisi set zona [expr $end - $start] set delta_z [expr double($zona) / double($precision)] + set origin_x [expr double($length)/-2] + set end_x [expr double($length)/2] + + W "DrawCircular $length" + WV origin_x + WV end_x # Initial point - lappend points [list -$length $radius 0] - GiD_Geometry create point 1 $layer -$length $radius 0 + lappend points [list $origin_x $radius 0] + GiD_Geometry create point 1 $layer $origin_x $radius 0 # first cut lappend points [list $start $radius 0] @@ -269,8 +282,8 @@ proc StenosisWizard::Wizard::DrawCircular {length radius start end delta precisi # last cut lappend points [list $end $radius 0] # Final point - GiD_Geometry create point 2 $layer $length $radius 0 - lappend points [list $length $radius 0] + GiD_Geometry create point 2 $layer $end_x $radius 0 + lappend points [list $end_x $radius 0] set line [GiD_Geometry create line append nurbsline $layer 1 2 -interpolate [llength $points] {*}$points -tangents {1 0 0} {1 0 0}] @@ -577,28 +590,25 @@ proc StenosisWizard::Wizard::DrawCuts { } { set c3 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v1]] set c4 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v2]] - set n1 [GiD_Mesh create node append $c1] - set n2 [GiD_Mesh create node append $c2] - set n3 [GiD_Mesh create node append $c3] - set n4 [GiD_Mesh create node append $c4] - W "$n1 $n2 $n3 $n4" - GiD_Mesh create element append Line 2 [list $n1 $n2] - GiD_Mesh create element append Line 2 [list $n2 $n3] - GiD_Mesh create element append Line 2 [list $n3 $n4] - GiD_Mesh create element append Line 2 [list $n4 $n1] + StenosisWizard::Wizard::DrawCutPlane $c1 $c2 $c3 $c4 } } proc StenosisWizard::Wizard::DrawCutPlane { n1 n2 n3 n4 } { - - GiD_OpenGL draw -vertex $points($n1) - GiD_OpenGL draw -vertex $points($n2) - GiD_OpenGL draw -vertex $points($n2) - GiD_OpenGL draw -vertex $points($n3) - GiD_OpenGL draw -vertex $points($n3) - GiD_OpenGL draw -vertex $points($n4) - GiD_OpenGL draw -vertex $points($n4) - GiD_OpenGL draw -vertex $points($n1) + set n1 [GiD_Mesh create node append $c1] + set n2 [GiD_Mesh create node append $c2] + set n3 [GiD_Mesh create node append $c3] + set n4 [GiD_Mesh create node append $c4] + W "$n1 $n2 $n3 $n4" + GiD_Mesh create element append Line 2 [list $n1 $n2] + GiD_Mesh create element append Line 2 [list $n2 $n3] + GiD_Mesh create element append Line 2 [list $n3 $n4] + GiD_Mesh create element append Line 2 [list $n4 $n1] + + GiD_OpenGL draw -begin lines + GiD_OpenGL draw -vertex $n1 + GiD_OpenGL draw -vertex $n2 + GiD_OpenGL draw -end } StenosisWizard::Wizard::Init diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz index 4dae7aa36..91d99c436 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz @@ -8,13 +8,13 @@ - + - + From aecf404beab15dd0f163cda745ee509b2ef57f88 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 12:20:50 +0200 Subject: [PATCH 189/556] drawcuts opengl --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 107 +++++++++--------- 1 file changed, 54 insertions(+), 53 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index ee733c73f..a4b0e955e 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -110,9 +110,6 @@ proc StenosisWizard::Wizard::DrawTriangular {length radius start end delta } { set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] - W "DrawTriangular $length" - WV origin_x - WV end_x set layer [GiD_Info Project LayerToUse] GiD_Process 'Layers Color $layer 153036015 Transparent $layer 255 escape Mescape @@ -152,9 +149,7 @@ proc StenosisWizard::Wizard::DrawSpherical {length radius start end delta sphrad set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] - W "DrawSpherical $length" - WV origin_x - WV end_x + set hdelta [expr double($delta) - double($radius)] set ycenter [expr double ($hdelta) - double($sphradius)] @@ -197,10 +192,7 @@ proc StenosisWizard::Wizard::DrawPolygonal {length radius start end delta tpoly GidUtils::DisableGraphics set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] - W "DrawPolygonal $length" - WV origin_x - WV end_x - + set halfpoly [expr double($tpoly)/2] set hdelta [expr $delta - $radius] @@ -260,10 +252,6 @@ proc StenosisWizard::Wizard::DrawCircular {length radius start end delta precisi set origin_x [expr double($length)/-2] set end_x [expr double($length)/2] - W "DrawCircular $length" - WV origin_x - WV end_x - # Initial point lappend points [list $origin_x $radius 0] GiD_Geometry create point 1 $layer $origin_x $radius 0 @@ -448,8 +436,8 @@ proc StenosisWizard::Wizard::LastStep { } { proc StenosisWizard::Wizard::PlaceCutPlanes { } { set ncuts [smart_wizard::GetProperty Simulation Cuts,value] set length [smart_wizard::GetProperty Geometry Length,value] - set delta [expr 2.0*double($length)/(double($ncuts)+1.0)] - set orig_x [ expr $length*-1] + set delta [expr double($length)/(double($ncuts)+1.0)] + set orig_x [ expr $length*-0.5] set angle [smart_wizard::GetProperty Simulation Bending,value] @@ -460,14 +448,14 @@ proc StenosisWizard::Wizard::PlaceCutPlanes { } { set cutplane_xp "[spdAux::getRoute CutPlanes]/blockdata\[1\]" for {set i 1} {$i <= $ncuts} {incr i} { - set x [expr -$length + ($i * $delta)] + set x [expr $orig_x + ($i * $delta)] set x [expr double(round(100*$x))/100] gid_groups_conds::copyNode $cutplane_xp [spdAux::getRoute CutPlanes] set cutplane "[spdAux::getRoute CutPlanes]/blockdata\[@n='CutPlane'\]\[[expr $i +1]\]" gid_groups_conds::setAttributesF $cutplane "name CutPlane$i" set coords [list [objarray new doublearray -values [list $x $x $x]] [objarray new doublearray -values {0.0 1.0 0.0}] [objarray new doublearray -values {0.0 0.0 1.0}]] - set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x [expr $length*2] [expr $angle/2] $coords] + set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x $length [expr $angle/2] $coords] set o [list [objarray get [lindex $new_nodes 0] 0] [objarray get [lindex $new_nodes 1] 0] [objarray get [lindex $new_nodes 2] 0] ] set p1 [list [objarray get [lindex $new_nodes 0] 1] [objarray get [lindex $new_nodes 1] 1] [objarray get [lindex $new_nodes 2] 1] ] set p2 [list [objarray get [lindex $new_nodes 0] 2] [objarray get [lindex $new_nodes 1] 2] [objarray get [lindex $new_nodes 2] 2] ] @@ -480,9 +468,9 @@ proc StenosisWizard::Wizard::PlaceCutPlanes { } { set x 0.0 set coords [list [objarray new doublearray -values [list $x [expr $x +1] $x]] [objarray new doublearray -values {0.0 0.0 0.0}] [objarray new doublearray -values {0.0 0.0 1.0}]] - set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x [expr $length*2] [expr $angle/2] $coords] + set new_nodes [StenosisWizard::Wizard::BendNodes $orig_x $length [expr $angle/2] $coords] set o [list [objarray get [lindex $new_nodes 0] 0] [objarray get [lindex $new_nodes 1] 0] [objarray get [lindex $new_nodes 2] 0] ] - W $o + set p1 [list [objarray get [lindex $new_nodes 0] 1] [objarray get [lindex $new_nodes 1] 1] [objarray get [lindex $new_nodes 2] 1] ] set p2 [list [objarray get [lindex $new_nodes 0] 2] [objarray get [lindex $new_nodes 1] 2] [objarray get [lindex $new_nodes 2] 2] ] set v1 [math::linearalgebra::sub $p1 $o] @@ -510,15 +498,14 @@ proc StenosisWizard::AfterMeshGeneration { fail } { proc StenosisWizard::Wizard::PostMeshBend { } { set length [ smart_wizard::GetProperty Geometry Length,value] - set length_plotted [expr $length*2] - set orig_x [ expr $length*-1] + set orig_x [ expr $length*-0.5] set angle [ smart_wizard::GetProperty Simulation Bending,value] set angle [expr $angle/2] GidUtils::DisableGraphics - StenosisWizard::Wizard::Bend $orig_x $length_plotted $angle + StenosisWizard::Wizard::Bend $orig_x $length $angle GidUtils::EnableGraphics GiD_Process Mescape Meshing MeshView escape - + GiD_Process 'Redraw } proc StenosisWizard::Wizard::Bend { orig_x len angle} { @@ -567,48 +554,62 @@ proc StenosisWizard::Wizard::BendNodes {orig_x len angle coords} { return [list $result_x $result_y $result_z] } +set ::glob_cuts [list ] +set ::glob_cutshow_id 0 + proc StenosisWizard::Wizard::DrawCuts { } { - set planes [write::GetCutPlanesList] - set cont 0 - if {[GiD_Layers exist cuts]} {GiD_Layers delete cuts} - GiD_Process 'Layers New cuts escape 'Layers ToUse cuts escape - - foreach plane $planes { - incr cont 1 - #if {$cont > 1} {return} - set center [dict get $plane point] - set normal [dict get $plane normal] - lassign [MathUtils::CalculateLocalAxisFromXAxis $normal] v1 v2 - W "center $center" - W "normal $normal" - W "v1 $v1" - W "v2 $v2" - # set v1 [list [expr -1.0*[lindex $normal 0]] [lindex $normal 1] [lindex $normal 2]] - # set v2 [list [lindex $normal 0] [lindex $normal 1] 1] - set c1 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v1]] - set c2 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v2]] - set c3 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v1]] - set c4 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v2]] - - StenosisWizard::Wizard::DrawCutPlane $c1 $c2 $c3 $c4 + variable curr_win + if {$::glob_cutshow_id != 0} { + GiD_OpenGL unregister $::glob_cutshow_id + set ::glob_cutshow_id 0 + smart_wizard::SetProperty Simulation ViewCuts,pn "Draw cuts" + } else { + set planes [write::GetCutPlanesList] + set ::glob_cuts [list ] + foreach plane $planes { + set center [dict get $plane point] + set normal [dict get $plane normal] + lassign [MathUtils::CalculateLocalAxisFromXAxis $normal] v1 v2 + + # set v1 [list [expr -1.0*[lindex $normal 0]] [lindex $normal 1] [lindex $normal 2]] + # set v2 [list [lindex $normal 0] [lindex $normal 1] 1] + set c1 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v1]] + set c2 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd 30 $v2]] + set c3 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v1]] + set c4 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v2]] + + lappend ::glob_cuts [list $c1 $c2 $c3 $c4] + } + set ::glob_cutshow_id [GiD_OpenGL register MyRedrawProcedure] + smart_wizard::SetProperty Simulation ViewCuts,pn "End draw cuts" } + GiD_Process 'Redraw + smart_wizard::AutoStep $curr_win Simulation } -proc StenosisWizard::Wizard::DrawCutPlane { n1 n2 n3 n4 } { +proc StenosisWizard::Wizard::DrawCutPlane { c1 c2 c3 c4 } { set n1 [GiD_Mesh create node append $c1] set n2 [GiD_Mesh create node append $c2] set n3 [GiD_Mesh create node append $c3] set n4 [GiD_Mesh create node append $c4] - W "$n1 $n2 $n3 $n4" + GiD_Mesh create element append Line 2 [list $n1 $n2] GiD_Mesh create element append Line 2 [list $n2 $n3] GiD_Mesh create element append Line 2 [list $n3 $n4] GiD_Mesh create element append Line 2 [list $n4 $n1] - GiD_OpenGL draw -begin lines - GiD_OpenGL draw -vertex $n1 - GiD_OpenGL draw -vertex $n2 - GiD_OpenGL draw -end +} +proc MyRedrawProcedure { } { + GiD_OpenGL draw -color "0.0 0.0 1.0" + foreach cuadrado $::glob_cuts { + lassign $cuadrado c1 c2 c3 c4 + GiD_OpenGL draw -begin lineloop + GiD_OpenGL draw -vertex $c1 + GiD_OpenGL draw -vertex $c2 + GiD_OpenGL draw -vertex $c3 + GiD_OpenGL draw -vertex $c4 + GiD_OpenGL draw -end + } } StenosisWizard::Wizard::Init From 2a191962348f330e953acfc5c0bdd7c52e90d0c8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 13:26:48 +0200 Subject: [PATCH 190/556] Se me va de las manos --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 48 ++++++++--------- .../StenosisWizard/wizard/Wizard_default.wiz | 3 +- kratos.gid/kratos.tcl | 3 +- kratos.gid/scripts/Controllers/Drawer.tcl | 54 +++++++++++++++++++ kratos.gid/scripts/Utils.tcl | 2 + 5 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 kratos.gid/scripts/Controllers/Drawer.tcl diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index a4b0e955e..e64847406 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -2,12 +2,15 @@ namespace eval StenosisWizard::Wizard { # Namespace variables declaration variable curr_win + variable ogl_cuts } proc StenosisWizard::Wizard::Init { } { #W "Carga los pasos" variable curr_win set curr_win "" + variable draw_cuts_name + set draw_cuts_name StenosisWizard_cuts } proc StenosisWizard::Wizard::Geometry { win } { @@ -379,10 +382,12 @@ proc StenosisWizard::Wizard::NextFluid { } { proc StenosisWizard::Wizard::Simulation { win } { smart_wizard::AutoStep $win Simulation - smart_wizard::SetWindowSize 450 500 + smart_wizard::SetWindowSize 450 600 } proc StenosisWizard::Wizard::Mesh { } { + LastStep + StenosisWizard::Wizard::UnregisterDrawCuts if {[lindex [GiD_Info Mesh] 0]>0} { #GiD_Process Mescape Meshing reset Yes GiD_Process Mescape Meshing CancelMesh PreserveFrozen Yes @@ -554,18 +559,21 @@ proc StenosisWizard::Wizard::BendNodes {orig_x len angle coords} { return [list $result_x $result_y $result_z] } -set ::glob_cuts [list ] -set ::glob_cutshow_id 0 +proc StenosisWizard::Wizard::UnregisterDrawCuts { } { + variable draw_cuts_name + Drawer::Unregister $draw_cuts_name + GiD_Process 'Redraw + smart_wizard::SetProperty Simulation ViewCuts,name "Draw cuts" +} proc StenosisWizard::Wizard::DrawCuts { } { + variable draw_cuts_name variable curr_win - if {$::glob_cutshow_id != 0} { - GiD_OpenGL unregister $::glob_cutshow_id - set ::glob_cutshow_id 0 - smart_wizard::SetProperty Simulation ViewCuts,pn "Draw cuts" + if {[Drawer::IsRegistered $draw_cuts_name]} { + StenosisWizard::Wizard::UnregisterDrawCuts } else { set planes [write::GetCutPlanesList] - set ::glob_cuts [list ] + set glob_cuts [list ] foreach plane $planes { set center [dict get $plane point] set normal [dict get $plane normal] @@ -578,30 +586,20 @@ proc StenosisWizard::Wizard::DrawCuts { } { set c3 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v1]] set c4 [MathUtils::VectorSum $center [MathUtils::ScalarByVectorProd -30 $v2]] - lappend ::glob_cuts [list $c1 $c2 $c3 $c4] + lappend glob_cuts [list $c1 $c2 $c3 $c4] } - set ::glob_cutshow_id [GiD_OpenGL register MyRedrawProcedure] - smart_wizard::SetProperty Simulation ViewCuts,pn "End draw cuts" + Drawer::Register $draw_cuts_name StenosisWizard::Wizard::RedrawCuts $glob_cuts + smart_wizard::SetProperty Simulation ViewCuts,name "End draw cuts" } GiD_Process 'Redraw smart_wizard::AutoStep $curr_win Simulation } -proc StenosisWizard::Wizard::DrawCutPlane { c1 c2 c3 c4 } { - set n1 [GiD_Mesh create node append $c1] - set n2 [GiD_Mesh create node append $c2] - set n3 [GiD_Mesh create node append $c3] - set n4 [GiD_Mesh create node append $c4] - - GiD_Mesh create element append Line 2 [list $n1 $n2] - GiD_Mesh create element append Line 2 [list $n2 $n3] - GiD_Mesh create element append Line 2 [list $n3 $n4] - GiD_Mesh create element append Line 2 [list $n4 $n1] - -} -proc MyRedrawProcedure { } { +proc StenosisWizard::Wizard::RedrawCuts { } { + variable draw_cuts_name + # blue GiD_OpenGL draw -color "0.0 0.0 1.0" - foreach cuadrado $::glob_cuts { + foreach cuadrado [Drawer::GetVars $draw_cuts_name] { lassign $cuadrado c1 c2 c3 c4 GiD_OpenGL draw -begin lineloop GiD_OpenGL draw -vertex $c1 diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz index 91d99c436..06344317c 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_default.wiz @@ -57,10 +57,11 @@ + - + diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index df4fd2f14..623555ad8 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -187,7 +187,7 @@ proc Kratos::LoadCommonScripts { } { uplevel #0 [list source [file join $kratos_private(Path) scripts $filename]] } # Common controllers - foreach filename {ApplicationMarketWindow.tcl ExamplesWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl} { + foreach filename {ApplicationMarketWindow.tcl ExamplesWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl Drawer.tcl} { uplevel #0 [list source [file join $kratos_private(Path) scripts Controllers $filename]] } # Model class @@ -299,6 +299,7 @@ proc Kratos::Event_EndProblemtype { } { # Clear private global variable unset -nocomplain ::Kratos::kratos_private } + Drawer::UnregisterAll } diff --git a/kratos.gid/scripts/Controllers/Drawer.tcl b/kratos.gid/scripts/Controllers/Drawer.tcl new file mode 100644 index 000000000..a5d825c3f --- /dev/null +++ b/kratos.gid/scripts/Controllers/Drawer.tcl @@ -0,0 +1,54 @@ +namespace eval Drawer { + variable registered_procs + variable vars +} + +proc Drawer::Init { } { + variable registered_procs + set registered_procs [dict create] + variable vars + set vars [dict create ] + variable ids + set ids [dict create ] +} + +proc Drawer::Register {name procedure varis} { + variable registered_procs + dict set registered_procs $name $procedure + variable vars + dict set vars $name $varis + variable ids + dict set ids $name [GiD_OpenGL register $procedure] +} + +proc Drawer::Unregister {name} { + variable registered_procs + variable vars + variable ids + if {[dict exist $ids $name]} { + set id [dict get $ids $name] + GiD_OpenGL unregister $id + dict unset registered_procs $name + dict unset vars $name + dict unset ids $name + } +} + +proc Drawer::UnregisterAll {} { + variable ids + foreach key [dict keys $ids] { + Unregister $key + } +} + +proc Drawer::GetVars {name} { + variable vars + return [dict get $vars $name] +} + +proc Drawer::IsRegistered {name} { + variable ids + return [dict exist $ids $name] +} + +Drawer::Init \ No newline at end of file diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index adc623302..0e3cae1f9 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -18,7 +18,9 @@ proc Kratos::DestroyWindows { } { spdAux::DestroyWindows if {[info exists ::Kratos::kratos_private(UseWizard)] && $::Kratos::kratos_private(UseWizard)} { smart_wizard::DestroyWindow + catch {destroy $smart_wizard::wizwindow} } + catch {destroy $smart_wizard::wizwindow} ::Kratos::EndCreatePreprocessTBar } From 6fda90e4cda68e00bd70bf3eed1d6ab166bb3858 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 16:54:14 +0200 Subject: [PATCH 191/556] preview curvatures --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index e64847406..6bab19a52 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -11,6 +11,8 @@ proc StenosisWizard::Wizard::Init { } { set curr_win "" variable draw_cuts_name set draw_cuts_name StenosisWizard_cuts + variable draw_render_name + set draw_render_name StenosisWizard_render } proc StenosisWizard::Wizard::Geometry { win } { @@ -382,7 +384,7 @@ proc StenosisWizard::Wizard::NextFluid { } { proc StenosisWizard::Wizard::Simulation { win } { smart_wizard::AutoStep $win Simulation - smart_wizard::SetWindowSize 450 600 + smart_wizard::SetWindowSize 450 550 } proc StenosisWizard::Wizard::Mesh { } { @@ -593,6 +595,7 @@ proc StenosisWizard::Wizard::DrawCuts { } { } GiD_Process 'Redraw smart_wizard::AutoStep $curr_win Simulation + smart_wizard::SetWindowSize 450 550 } proc StenosisWizard::Wizard::RedrawCuts { } { @@ -610,5 +613,46 @@ proc StenosisWizard::Wizard::RedrawCuts { } { } } +proc StenosisWizard::Wizard::PreviewCurvature {} { + set surfaces [GiD_Geometry -v2 list surface] + + set x [list ] + set y [list ] + set z [list ] + + foreach surface_id $surfaces { + lassign [GiD_Geometry get surface $surface_id render_mesh] elemtype elementnnodes nodes elements normals uvs + foreach {cx cy cz} $nodes { + lappend x $cx + lappend y $cy + lappend z $cz + } + } + set coords [list [objarray new doublearray -values $x] [objarray new doublearray -values $y] [objarray new doublearray -values $z]] + + + set length [ smart_wizard::GetProperty Geometry Length,value] + set orig_x [ expr $length*-0.5] + set angle [ smart_wizard::GetProperty Simulation Bending,value] + set angle [expr $angle/2] + set nodes [StenosisWizard::Wizard::BendNodes $orig_x $length $angle $coords] + + variable draw_render_name + Drawer::Register $draw_render_name StenosisWizard::Wizard::RedrawRenderBended $nodes +} + + +proc StenosisWizard::Wizard::RedrawRenderBended { } { + variable draw_render_name + # blue + GiD_OpenGL draw -color "0.0 0.0 1.0" -pointsize 5 + lassign [Drawer::GetVars $draw_render_name] x y z + GiD_OpenGL draw -begin points + foreach cx $x cy $y cz $z { + GiD_OpenGL draw -vertex [list $cx $cy $cz] + } + GiD_OpenGL draw -end +} + StenosisWizard::Wizard::Init From 827731e9e1169f666d096dd6286a74ce28b01a14 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 23 Apr 2021 16:58:57 +0200 Subject: [PATCH 192/556] Toggle view --- .../StenosisWizard/wizard/Wizard_Steps.tcl | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 6bab19a52..1ef45b3f0 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -614,34 +614,50 @@ proc StenosisWizard::Wizard::RedrawCuts { } { } proc StenosisWizard::Wizard::PreviewCurvature {} { - set surfaces [GiD_Geometry -v2 list surface] - - set x [list ] - set y [list ] - set z [list ] - - foreach surface_id $surfaces { - lassign [GiD_Geometry get surface $surface_id render_mesh] elemtype elementnnodes nodes elements normals uvs - foreach {cx cy cz} $nodes { - lappend x $cx - lappend y $cy - lappend z $cz + variable draw_render_name + variable curr_win + if {[Drawer::IsRegistered $draw_render_name]} { + StenosisWizard::Wizard::UnregisterDrawPrecurvature + } else { + set surfaces [GiD_Geometry -v2 list surface] + + set x [list ] + set y [list ] + set z [list ] + + foreach surface_id $surfaces { + lassign [GiD_Geometry get surface $surface_id render_mesh] elemtype elementnnodes nodes elements normals uvs + foreach {cx cy cz} $nodes { + lappend x $cx + lappend y $cy + lappend z $cz + } } + set coords [list [objarray new doublearray -values $x] [objarray new doublearray -values $y] [objarray new doublearray -values $z]] + + set length [ smart_wizard::GetProperty Geometry Length,value] + set orig_x [ expr $length*-0.5] + set angle [ smart_wizard::GetProperty Simulation Bending,value] + set angle [expr $angle/2] + set nodes [StenosisWizard::Wizard::BendNodes $orig_x $length $angle $coords] + + Drawer::Register $draw_render_name StenosisWizard::Wizard::RedrawRenderBended $nodes + + smart_wizard::SetProperty Simulation PreviewCurvature,name "End preview curvature" } - set coords [list [objarray new doublearray -values $x] [objarray new doublearray -values $y] [objarray new doublearray -values $z]] - + GiD_Process 'Redraw + smart_wizard::AutoStep $curr_win Simulation + smart_wizard::SetWindowSize 450 550 +} - set length [ smart_wizard::GetProperty Geometry Length,value] - set orig_x [ expr $length*-0.5] - set angle [ smart_wizard::GetProperty Simulation Bending,value] - set angle [expr $angle/2] - set nodes [StenosisWizard::Wizard::BendNodes $orig_x $length $angle $coords] - + +proc StenosisWizard::Wizard::UnregisterDrawPrecurvature { } { variable draw_render_name - Drawer::Register $draw_render_name StenosisWizard::Wizard::RedrawRenderBended $nodes + Drawer::Unregister $draw_render_name + GiD_Process 'Redraw + smart_wizard::SetProperty Simulation PreviewCurvature,name "Preview curvature" } - proc StenosisWizard::Wizard::RedrawRenderBended { } { variable draw_render_name # blue From d5243ea9950768269e99b70a5bdb14b90c84515f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 24 Apr 2021 11:27:59 +0200 Subject: [PATCH 193/556] Force generate render mesh --- .../apps/StenosisWizard/wizard/Wizard_Steps.tcl | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 1ef45b3f0..8f28f60b0 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -384,7 +384,7 @@ proc StenosisWizard::Wizard::NextFluid { } { proc StenosisWizard::Wizard::Simulation { win } { smart_wizard::AutoStep $win Simulation - smart_wizard::SetWindowSize 450 550 + smart_wizard::SetWindowSize 450 600 } proc StenosisWizard::Wizard::Mesh { } { @@ -594,8 +594,7 @@ proc StenosisWizard::Wizard::DrawCuts { } { smart_wizard::SetProperty Simulation ViewCuts,name "End draw cuts" } GiD_Process 'Redraw - smart_wizard::AutoStep $curr_win Simulation - smart_wizard::SetWindowSize 450 550 + StenosisWizard::Wizard::Simulation $curr_win } proc StenosisWizard::Wizard::RedrawCuts { } { @@ -626,7 +625,7 @@ proc StenosisWizard::Wizard::PreviewCurvature {} { set z [list ] foreach surface_id $surfaces { - lassign [GiD_Geometry get surface $surface_id render_mesh] elemtype elementnnodes nodes elements normals uvs + lassign [GiD_Geometry get surface $surface_id -force render_mesh] elemtype elementnnodes nodes elements normals uvs foreach {cx cy cz} $nodes { lappend x $cx lappend y $cy @@ -646,8 +645,7 @@ proc StenosisWizard::Wizard::PreviewCurvature {} { smart_wizard::SetProperty Simulation PreviewCurvature,name "End preview curvature" } GiD_Process 'Redraw - smart_wizard::AutoStep $curr_win Simulation - smart_wizard::SetWindowSize 450 550 + StenosisWizard::Wizard::Simulation $curr_win } @@ -661,7 +659,7 @@ proc StenosisWizard::Wizard::UnregisterDrawPrecurvature { } { proc StenosisWizard::Wizard::RedrawRenderBended { } { variable draw_render_name # blue - GiD_OpenGL draw -color "0.0 0.0 1.0" -pointsize 5 + GiD_OpenGL draw -color "0.0 0.0 1.0" -pointsize 3 lassign [Drawer::GetVars $draw_render_name] x y z GiD_OpenGL draw -begin points foreach cx $x cy $y cz $z { From e67b6111c1f3b31e034b4a7978891b61447142a2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 12:23:12 +0200 Subject: [PATCH 194/556] add button in toolbar --- kratos.gid/apps/DEM/start.tcl | 7 +++++++ kratos.gid/apps/DEM/xml/XmlController.tcl | 3 +++ kratos.gid/images/material-relation-16.png | Bin 0 -> 821 bytes kratos.gid/images/material-relation.png | Bin 0 -> 1982 bytes 4 files changed, 10 insertions(+) create mode 100644 kratos.gid/images/material-relation-16.png create mode 100644 kratos.gid/images/material-relation.png diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 7816466af..ddf488640 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -48,6 +48,13 @@ proc ::DEM::GetAttribute {name} { return $value } + +proc ::DEM::CustomToolbarItems { } { + variable dir + + Kratos::ToolbarAddItem "MaterialRelations" "material-relation.png" [list -np- DEM::xml::ShowMaterialRelationWindow] [= "Material relations"] +} + proc ::DEM::BeforeMeshGeneration {elementsize} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute DEMParts]/group" diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 450403b55..7fa85819f 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -105,6 +105,9 @@ proc DEM::xml::InertiaType { args } { return $ret } +proc DEM::xml::ShowMaterialRelationWindow { } { + +} DEM::xml::Init diff --git a/kratos.gid/images/material-relation-16.png b/kratos.gid/images/material-relation-16.png new file mode 100644 index 0000000000000000000000000000000000000000..859af3e55e53485d6841bd27a21bcb262dc2d99e GIT binary patch literal 821 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 Date: Tue, 27 Apr 2021 14:20:36 +0200 Subject: [PATCH 195/556] first changes towards printing MaterialsDEM.json --- kratos.gid/apps/DEM/write/write.tcl | 8 ++- kratos.gid/apps/DEM/write/writeMaterials.tcl | 72 +++++++++++++++++++ .../apps/DEM/write/writeProjectParameters.tcl | 4 ++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/DEM/write/writeMaterials.tcl diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 2ad9f1657..f56db2cbe 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -16,7 +16,7 @@ proc DEM::write::Init { } { SetAttribute materials_un DEMMaterials SetAttribute conditions_un DEMConditions SetAttribute nodal_conditions_un DEMNodalConditions - SetAttribute materials_file "DEMMaterials.json" + SetAttribute materials_file "MaterialsDEM.json" SetAttribute main_script_file "KratosDEMAnalysis.py" variable inletProperties @@ -71,6 +71,12 @@ proc DEM::write::writeModelPartEvent { } { write::OpenFile "[Kratos::GetModelName]DEM_Clusters.mdpa" WriteMDPAClusters write::CloseFile + + # Materials + set mats_json [getDEMMaterialsDict $parts_un $materials_un] + write::OpenFile [GetAttribute materials_file] + write::WriteJSON $mats_json + write::CloseFile } proc DEM::write::writeCustomFilesEvent { } { diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl new file mode 100644 index 000000000..70e0c428f --- /dev/null +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -0,0 +1,72 @@ +proc DEM::write::getDEMMaterialsDict { parts_un materials_un } { + set global_dict [dict create] + set materials_list [list] + set material_relations_list [list] + set assignation_table_list [list] + + # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO + # print COMPUTE_WEAR as false always, too (temporal fix) + # While looping, create the assignation_table_list + + # Loop over the material relations, which is a new menu in the tree linking each possible pair of materials + + + dict set global_dict "materials" $materials_list + dict set global_dict "material_relations" $material_relations_list + dict set global_dict "material_assignation_table" $assignation_table_list + + return $global_dict +} + +# EXAMPLE +#{ +# "materials":[{ +# "material_name": "mat1", +# "material_id": 1, +# "properties":{ +# "PARTICLE_DENSITY": 4000.0, +# "YOUNG_MODULUS": 10000000.0, +# "POISSON_RATIO": 0.20 +# } +# },{ +# "material_name": "mat2", +# "material_id": 2, +# "properties":{ +# "YOUNG_MODULUS": 1.0e20, +# "POISSON_RATIO": 0.25, +# "COMPUTE_WEAR": false +# } +# }], +# "material_relations":[{ +# "material_names_list":["mat1", "mat1"], +# "material_ids_list":[1, 1], +# "properties":{ +# "COEFFICIENT_OF_RESTITUTION": 0.2, +# "STATIC_FRICTION": 0.577350269189494, +# "DYNAMIC_FRICTION": 0.577350269189494, +# "FRICTION_DECAY": 500, +# "ROLLING_FRICTION": 0.01, +# "ROLLING_FRICTION_WITH_WALLS": 0.01, +# "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME": "DEM_D_Hertz_viscous_Coulomb" +# } +# },{ +# "material_names_list":["mat1", "mat2"], +# "material_ids_list":[1, 2], +# "properties":{ +# "COEFFICIENT_OF_RESTITUTION": 0.2, +# "STATIC_FRICTION": 0.577350269189494, +# "DYNAMIC_FRICTION": 0.577350269189494, +# "FRICTION_DECAY": 500, +# "ROLLING_FRICTION": 0.01, +# "ROLLING_FRICTION_WITH_WALLS": 0.01, +# "SEVERITY_OF_WEAR": 0.001, +# "IMPACT_WEAR_SEVERITY": 0.001, +# "BRINELL_HARDNESS": 200.0, +# "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME": "DEM_D_Hertz_viscous_Coulomb" +# } +# }], +# "material_assignation_table":[ +# ["ClusterPart", "mat1"], +# ["RigidFacePart","mat2"] +# ] +#} diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 642ada9f9..167e85159 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -70,6 +70,10 @@ proc DEM::write::getParametersDict { } { dict set strategy_parameters_dict "RemoveBallsInitiallyTouchingWalls" [write::getValue AdvOptions RemoveParticlesInWalls] dict set strategy_parameters_dict "strategy" $dem_strategy + set material_import_settings [dict create] + dict set material_import_settings "materials_filename" [GetAttribute materials_file] + dict set strategy_parameters_dict "material_import_settings" $material_import_settings + dict set project_parameters_dict "solver_settings" $strategy_parameters_dict dict set project_parameters_dict "VirtualMassCoefficient" [write::getValue AdvOptions VirtualMassCoef] dict set project_parameters_dict "RollingFrictionOption" [write::getValue AdvOptions RollingFriction] From 953b2f5394649dc59a7d98881f2f3518fbcd5a14 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 14:50:54 +0200 Subject: [PATCH 196/556] Split material properties into relations and inner properties --- kratos.gid/apps/DEM/xml/MaterialRelations.xml | 13 +++++++++ kratos.gid/apps/DEM/xml/Materials.xml | 28 ------------------- 2 files changed, 13 insertions(+), 28 deletions(-) create mode 100644 kratos.gid/apps/DEM/xml/MaterialRelations.xml diff --git a/kratos.gid/apps/DEM/xml/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/MaterialRelations.xml new file mode 100644 index 000000000..8e45dc235 --- /dev/null +++ b/kratos.gid/apps/DEM/xml/MaterialRelations.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEM/xml/Materials.xml b/kratos.gid/apps/DEM/xml/Materials.xml index 96cf0710c..322b04810 100644 --- a/kratos.gid/apps/DEM/xml/Materials.xml +++ b/kratos.gid/apps/DEM/xml/Materials.xml @@ -5,11 +5,7 @@ - - - - @@ -19,11 +15,7 @@ - - - - @@ -32,11 +24,7 @@ - - - - @@ -45,11 +33,7 @@ - - - - @@ -58,11 +42,7 @@ - - - - @@ -71,11 +51,7 @@ - - - - @@ -84,11 +60,7 @@ - - - - From 2394dcfe01eafcac4a729c7b614d1447f8552cf8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 14:51:06 +0200 Subject: [PATCH 197/556] fix write proc --- kratos.gid/apps/DEM/start.tcl | 1 + kratos.gid/apps/DEM/write/write.tcl | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index ddf488640..28c6f0d08 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -36,6 +36,7 @@ proc ::DEM::LoadMyFiles { } { uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Walls.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Clusters.tcl]] + uplevel #0 [list source [file join $dir write writeMaterials.tcl]] uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] uplevel #0 [list source [file join $dir write write_utils.tcl]] uplevel #0 [list source [file join $dir examples examples.tcl]] diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index f56db2cbe..80842689b 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -73,7 +73,7 @@ proc DEM::write::writeModelPartEvent { } { write::CloseFile # Materials - set mats_json [getDEMMaterialsDict $parts_un $materials_un] + set mats_json [DEM::write::getDEMMaterialsDict [GetAttribute parts_un] [GetAttribute materials_un]] write::OpenFile [GetAttribute materials_file] write::WriteJSON $mats_json write::CloseFile From d4e047f14405822c7b4b111489a6c34d8ed0cb75 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 15:00:56 +0200 Subject: [PATCH 198/556] Place images properly --- .../{ => apps/DEM}/images/material-relation-16.png | Bin .../{ => apps/DEM}/images/material-relation.png | Bin kratos.gid/apps/DEM/xml/Main.spd | 3 ++- kratos.gid/apps/DEM/xml/MaterialRelations.spd | 4 ++++ 4 files changed, 6 insertions(+), 1 deletion(-) rename kratos.gid/{ => apps/DEM}/images/material-relation-16.png (100%) rename kratos.gid/{ => apps/DEM}/images/material-relation.png (100%) create mode 100644 kratos.gid/apps/DEM/xml/MaterialRelations.spd diff --git a/kratos.gid/images/material-relation-16.png b/kratos.gid/apps/DEM/images/material-relation-16.png similarity index 100% rename from kratos.gid/images/material-relation-16.png rename to kratos.gid/apps/DEM/images/material-relation-16.png diff --git a/kratos.gid/images/material-relation.png b/kratos.gid/apps/DEM/images/material-relation.png similarity index 100% rename from kratos.gid/images/material-relation.png rename to kratos.gid/apps/DEM/images/material-relation.png diff --git a/kratos.gid/apps/DEM/xml/Main.spd b/kratos.gid/apps/DEM/xml/Main.spd index fcbf4aa92..300f8bd77 100644 --- a/kratos.gid/apps/DEM/xml/Main.spd +++ b/kratos.gid/apps/DEM/xml/Main.spd @@ -5,6 +5,7 @@ - + + diff --git a/kratos.gid/apps/DEM/xml/MaterialRelations.spd b/kratos.gid/apps/DEM/xml/MaterialRelations.spd new file mode 100644 index 000000000..fd1d4b3f9 --- /dev/null +++ b/kratos.gid/apps/DEM/xml/MaterialRelations.spd @@ -0,0 +1,4 @@ + + + + From a81e49a9e0839ab053b124b61042f5bd492aa5a7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 15:17:33 +0200 Subject: [PATCH 199/556] Add material relation class in oo -> Model --- kratos.gid/apps/DEM/start.tcl | 2 + kratos.gid/apps/DEM/xml/Main.spd | 2 +- kratos.gid/apps/DEM/xml/XmlController.tcl | 5 + .../MaterialRelations.spd | 2 +- .../material_relations/MaterialRelations.tcl | 103 ++++++++++++++++++ .../MaterialRelations.xml | 4 +- 6 files changed, 114 insertions(+), 4 deletions(-) rename kratos.gid/apps/DEM/xml/{ => material_relations}/MaterialRelations.spd (73%) create mode 100644 kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl rename kratos.gid/apps/DEM/xml/{ => material_relations}/MaterialRelations.xml (87%) diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 28c6f0d08..e28ed14c2 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -29,6 +29,8 @@ proc ::DEM::Init { } { proc ::DEM::LoadMyFiles { } { variable dir + + uplevel #0 [list source [file join $dir xml material_relations MaterialRelations.tcl]] uplevel #0 [list source [file join $dir xml XmlController.tcl]] uplevel #0 [list source [file join $dir write write.tcl]] diff --git a/kratos.gid/apps/DEM/xml/Main.spd b/kratos.gid/apps/DEM/xml/Main.spd index 300f8bd77..721b7d6ee 100644 --- a/kratos.gid/apps/DEM/xml/Main.spd +++ b/kratos.gid/apps/DEM/xml/Main.spd @@ -6,6 +6,6 @@ - + diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 7fa85819f..1768866e7 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -13,6 +13,7 @@ proc DEM::xml::Init { } { Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml Model::getConditions Conditions.xml + Model::getMaterialRelations "material_relations/MaterialRelations.xml" } proc DEM::xml::getUniqueName {name} { @@ -105,6 +106,10 @@ proc DEM::xml::InertiaType { args } { return $ret } +proc DEM::xml::injectMaterialRelations { domNode args } { + W $domNode +} + proc DEM::xml::ShowMaterialRelationWindow { } { } diff --git a/kratos.gid/apps/DEM/xml/MaterialRelations.spd b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd similarity index 73% rename from kratos.gid/apps/DEM/xml/MaterialRelations.spd rename to kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd index fd1d4b3f9..d87d7e15d 100644 --- a/kratos.gid/apps/DEM/xml/MaterialRelations.spd +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl new file mode 100644 index 000000000..106313e75 --- /dev/null +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl @@ -0,0 +1,103 @@ +################################################################################## +# This file is common for all Kratos Applications. +# Do not change anything here unless it's strictly necessary. +################################################################################## + +namespace eval Model { +catch {MaterialRelation destroy} +oo::class create MaterialRelation { + superclass Entity + + variable Materials + + constructor {n} { + next $n + variable Materials + + set Materials [list ] + } + method setMaterials { ms } {variable Materials; set Materials $ms} + method getMaterials { } {variable Materials; return $Materials} + method addMaterial {mat} {variable Materials; lappend Materials $mat} + method getMaterial {i} {variable Materials; return [lindex $Materials $i]} +} + variable MaterialRelations + set MaterialRelations [list ] +} + + +proc Model::ParseMaterialRelations { doc } { + variable MaterialRelations + + set MatNodeList [$doc getElementsByTagName MaterialRelation] + foreach MatNode $MatNodeList { + lappend MaterialRelations [ParseMatRelNode $MatNode] + } +} + +proc Model::ParseMatRelNode { node } { + set name [$node getAttribute n] + + set mat [::Model::MaterialRelation new $name] + $mat setPublicName [$node getAttribute n] + $mat setHelp [$node getAttribute help] + + foreach att [$node attributes] { + $mat setAttribute $att [split [$node getAttribute $att] ","] + } + foreach in [[$node getElementsByTagName inputs] getElementsByTagName parameter] { + set mat [ParseInputParamNode $mat $in] + } + + return $mat +} + +proc Model::getMaterialRelations { MaterialRelationsFileName } { + variable dir + dom parse [tDOM::xmlReadFile [file join $dir xml $MaterialRelationsFileName]] doc + ParseMaterialRelations $doc +} + +proc Model::GetMaterialRelations {args} { + variable MaterialRelations + # W "Get materials $args" + set cumplen [list ] + foreach mat_rel $MaterialRelations { + # W [$mat getName] + if {[$mat_rel cumple {*}$args]} { lappend cumplen $mat_rel} + } + # W "Good materials $cumplen" + return $cumplen +} +proc Model::GetMaterialRelationNames {args} { + set material_relations [list ] + foreach mat [GetMaterialRelations {*}$args] { + lappend material_relations [$mat getName] + } + return $material_relations +} + +proc Model::getMaterialRelation {mid} { + + foreach mat_rel [GetMaterialRelations]] { + if {[$mat_rel getName] eq $mid} { return $mat_rel} + } + return "" +} + + +proc Model::ForgetMaterialRelations { } { + variable MaterialRelations + set MaterialRelations [list ] +} + +proc Model::ForgetMaterialRelation { mid } { + variable MaterialRelations + set MaterialRelations2 [list ] + foreach material_relation $MaterialRelations { + if {[$material_relation getName] ne $mid} { + lappend MaterialRelations2 $material_relation + } + } + set MaterialRelations $MaterialRelations2 +} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/xml/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml similarity index 87% rename from kratos.gid/apps/DEM/xml/MaterialRelations.xml rename to kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 8e45dc235..8d6d10abc 100644 --- a/kratos.gid/apps/DEM/xml/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -1,6 +1,6 @@ - + @@ -8,6 +8,6 @@ - + \ No newline at end of file From ddfdcfe34ed76838034d5e87e45b4bcfc6e8ed49 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 15:54:22 +0200 Subject: [PATCH 200/556] app icons first --- kratos.gid/scripts/Menus.tcl | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index 858da26c5..8f53a6da0 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -57,16 +57,26 @@ proc Kratos::CreatePreprocessModelTBar { {type "DEFAULT INSIDELEFT"} } { set helpslist [list ] foreach item [dict keys $kratos_private(MenuItems)] { set icon [dict get $kratos_private(MenuItems) $item icon] - if {![file exists $icon] && $icon ne ""} { - set good_dir $dir - if {$theme eq "GiD_black"} { - set good_dir [file join $dir Black] - if {![file exists [file join $good_dir $icon]]} {set good_dir $dir} + set icon_path "" + if {[file exists $icon]} { + set icon_path $icon + } else { + set list_dirs [list ] + if {[apps::getActiveApp] ne ""} {lappend list_dirs [file dirname [apps::getImgPathFrom [[apps::getActiveApp] getName] ]]} + lappend list_dirs $dir + foreach path $list_dirs { + if {$icon ne ""} { + set good_dir $path + if {$theme eq "GiD_black"} { + set good_dir [file join $path Black] + if {![file exists [file join $good_dir $icon]]} {set good_dir $path} + } + set icon_path [file join $good_dir $icon] + if {[file exists $icon_path]} {break;} + } } - set icon [file join $good_dir $icon] } - - lappend iconslist [expr {$icon ne "" ? $icon : "---"}] + lappend iconslist [expr {$icon ne "" ? $icon_path : "---"}] lappend commslist [dict get $kratos_private(MenuItems) $item code] lappend helpslist [dict get $kratos_private(MenuItems) $item tex] } From cb42186138b4a3c439f4eb060a0f150f05d228e1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 16:31:22 +0200 Subject: [PATCH 201/556] Show materials a and b --- kratos.gid/apps/DEM/xml/XmlController.tcl | 26 +++++++++++++++++-- .../material_relations/MaterialRelations.spd | 2 +- .../scripts/Controllers/CommonProcs.tcl | 17 +++++++----- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 1768866e7..2bf6fbe9e 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -106,8 +106,30 @@ proc DEM::xml::InertiaType { args } { return $ret } -proc DEM::xml::injectMaterialRelations { domNode args } { - W $domNode +proc DEM::xml::injectMaterialRelations { basenode args } { + + set base [$basenode parent] + set materials_relations [Model::GetMaterialRelations {*}$args] + foreach mat $materials_relations { + set matname [$mat getName] + set mathelp [$mat getAttribute help] + set icon [$mat getAttribute icon] + if {$icon eq ""} {set icon material-relation-16} + set inputs [$mat getInputs] + set matnode "" + append matnode "" + append matnode "" + + + foreach {inName in} $inputs { + set node [spdAux::GetParameterValueString $in [list base $mat state [$in getAttribute state]] $mat] + append matnode $node + } + append matnode " \n" + $base appendXML $matnode + } + $basenode delete + } proc DEM::xml::ShowMaterialRelationWindow { } { diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd index d87d7e15d..2ee2d2655 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index eba3255eb..4577d9dad 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -734,12 +734,15 @@ proc spdAux::ProcGetMaterialsList { domNode args } { # set xp3 [spdAux::getRoute $mats_un] set parentNode [$domNode selectNodes $xp3] - set const_law_name [write::getValueByNode [$domNode selectNodes "../value\[@n = 'ConstitutiveLaw'\]"] ] set filters [list ] - if {$const_law_name != ""} { - set const_law [Model::getConstitutiveLaw $const_law_name] - if {$const_law != ""} { - set filters [$const_law getMaterialFilters] + set const_law_node [$domNode selectNodes "../value\[@n = 'ConstitutiveLaw'\]"] + if {$const_law_node ne ""} { + set const_law_name [write::getValueByNode $const_law_node ] + if {$const_law_name != ""} { + set const_law [Model::getConstitutiveLaw $const_law_name] + if {$const_law != ""} { + set filters [$const_law getMaterialFilters] + } } } #W [$parentNode asXML] @@ -751,9 +754,9 @@ proc spdAux::ProcGetMaterialsList { domNode args } { set res_raw_list [list ] foreach m $resList {lappend res_raw_list [lindex $m 1]} - set v [get_domnode_attribute [$domNode selectNodes "../value\[@n = 'Material'\]"] v] + set v [get_domnode_attribute $domNode v] if {$v ni $res_raw_list} { - [$domNode selectNodes "../value\[@n = 'Material'\]"] setAttribute v [lindex $res_raw_list 0] + $domNode setAttribute v [lindex $res_raw_list 0] } return [join $res_raw_list ","] From 4559dfe06ade976324a66ab9b5cf50d0abbd9b23 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 16:36:46 +0200 Subject: [PATCH 202/556] material as parameter --- kratos.gid/apps/DEM/xml/XmlController.tcl | 4 ---- .../apps/DEM/xml/material_relations/MaterialRelations.xml | 2 ++ kratos.gid/scripts/Controllers/TreeInjections.tcl | 3 +++ 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 2bf6fbe9e..29dbd22db 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -117,10 +117,6 @@ proc DEM::xml::injectMaterialRelations { basenode args } { if {$icon eq ""} {set icon material-relation-16} set inputs [$mat getInputs] set matnode "" - append matnode "" - append matnode "" - - foreach {inName in} $inputs { set node [spdAux::GetParameterValueString $in [list base $mat state [$in getAttribute state]] $mat] append matnode $node diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 8d6d10abc..99ccd76c4 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -2,6 +2,8 @@ + + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index fefbd8c02..c7baeb1c6 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -388,6 +388,9 @@ proc spdAux::GetParameterValueString { param {forcedParams ""} {base ""}} { "integer" { append node "" } + "material" { + append node "" + } default { append node [_GetDoubleParameterString $param $inName $pn $v $state $help $show_in_window $has_units] } From 7ce99b62c66eae0ff1e86c12262b5a407f9185e5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 17:11:37 +0200 Subject: [PATCH 203/556] validation --- kratos.gid/apps/DEM/write/write.tcl | 5 +++++ kratos.gid/apps/DEM/xml/XmlController.tcl | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 80842689b..557794734 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -137,6 +137,11 @@ proc DEM::write::Validate {} { set err "Empty mesh detected (0 nodes present). A mesh is necessary to run the case." } + # Validation of Material relations + if {$err eq ""} { + set err [DEM::xml::MaterialRelationsValidation] + } + return $err } diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 29dbd22db..36c349e10 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -128,6 +128,15 @@ proc DEM::xml::injectMaterialRelations { basenode args } { } +proc DEM::xml::MaterialRelationsValidation { } { + set err "" + # Get Used Materials + + # At least all materials must be related + + return $err +} + proc DEM::xml::ShowMaterialRelationWindow { } { } From e6078cb599d576fb58314e9cd9488d858fa9864a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 27 Apr 2021 22:14:06 +0200 Subject: [PATCH 204/556] advances in material write --- kratos.gid/apps/DEM/write/write.tcl | 4 +- kratos.gid/apps/DEM/write/writeMaterials.tcl | 55 +++++++++++++++---- kratos.gid/scripts/Writing/WriteMaterials.tcl | 9 +-- kratos.gid/scripts/Writing/Writing.tcl | 3 + 4 files changed, 55 insertions(+), 16 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 557794734..762639e21 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -73,9 +73,9 @@ proc DEM::write::writeModelPartEvent { } { write::CloseFile # Materials - set mats_json [DEM::write::getDEMMaterialsDict [GetAttribute parts_un] [GetAttribute materials_un]] + set materials [DEM::write::getDEMMaterialsDict] write::OpenFile [GetAttribute materials_file] - write::WriteJSON $mats_json + write::WriteJSON $materials write::CloseFile } diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 70e0c428f..5ac8760d9 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -1,20 +1,21 @@ -proc DEM::write::getDEMMaterialsDict { parts_un materials_un } { - set global_dict [dict create] - set materials_list [list] - set material_relations_list [list] - set assignation_table_list [list] - +proc DEM::write::getDEMMaterialsDict { } { + # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO # print COMPUTE_WEAR as false always, too (temporal fix) # While looping, create the assignation_table_list - + set materials_list [DEM::write::GetMaterialsList] + # Loop over the material relations, which is a new menu in the tree linking each possible pair of materials - - + set material_relations_list [list ] + + + set assignation_table_list [list ] + + dict set global_dict "materials" $materials_list dict set global_dict "material_relations" $material_relations_list dict set global_dict "material_assignation_table" $assignation_table_list - + return $global_dict } @@ -70,3 +71,37 @@ proc DEM::write::getDEMMaterialsDict { parts_un materials_un } { # ["RigidFacePart","mat2"] # ] #} + + +proc DEM::write::GetMaterialsList { } { + # Dem needs more material information than default + set old_properties_exclusion_list $write::properties_exclusion_list + set write::properties_exclusion_list [list "APPID" "Element"] + + # Trick to use the common function, since DEM is the only app with materials inside conditions + # First we get material information used in Parts + set parts_un [GetAttribute parts_un] + set orig_parts_un $parts_un + write::processMaterials + set parts_material_dict [write::getPropertiesList $parts_un] + + # Then we get material information used in Conditions + write::SetConfigurationAttribute parts_un [GetAttribute conditions_un] + write::processMaterials + set conditions_material_dict [write::getPropertiesList [GetAttribute conditions_un]] + + # And finally we get the material information used in Nodal conditions + write::SetConfigurationAttribute parts_un [GetAttribute nodal_conditions_un] + write::processMaterials + set nodal_conditions_material_dict [write::getPropertiesList [GetAttribute nodal_conditions_un]] + + # Restore original variables + write::SetConfigurationAttribute parts_un $orig_parts_un + set write::properties_exclusion_list $old_properties_exclusion_list + + # Return the join of the 3 material dicts + return $parts_material_dict + set materials [dict merge $parts_material_dict $conditions_material_dict $nodal_conditions_material_dict] + W $materials + return $materials +} \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 061166bbf..1575ac8e6 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -35,9 +35,9 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { } set claw_node [$gNode selectNodes ".//value\[@n = 'ConstitutiveLaw'\]"] - set claw [write::getValueByNode $claw_node "force"] - set const_law [Model::getConstitutiveLaw $claw] - if {$const_law ne ""} { + if {$claw_node ne ""} { + set claw [write::getValueByNode $claw_node "force"] + set const_law [Model::getConstitutiveLaw $claw] set output_type [$const_law getOutputMode] if {$output_type eq "Parameters"} { set s1 [$gNode selectNodes ".//value"] @@ -113,6 +113,8 @@ proc write::writePropertiesJsonFile {{parts_un ""} {fname "materials.json"} {wri proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_name ""}} { variable mat_dict + variable properties_exclusion_list + set exclusionList $properties_exclusion_list set props_dict [dict create] set props [list ] @@ -139,7 +141,6 @@ proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_nam if {[dict exists $mat_dict $group ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $group ConstitutiveLaw]} set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] if {$constitutive_law ne ""} { - set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] set variables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $group] ] { if {$prop ni $exclusionList} { diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 56b5e933e..c535eb0a1 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -11,6 +11,7 @@ namespace eval write { variable current_configuration variable current_mdpa_indent_level variable formats_dict + variable properties_exclusion_list } proc write::Init { } { @@ -38,6 +39,8 @@ proc write::Init { } { variable formats_dict set formats_dict [dict create] + variable properties_exclusion_list + set properties_exclusion_list [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] } proc write::initWriteConfiguration {configuration} { From 31ec92066d3782413522615a5d8806216a6b19a2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 28 Apr 2021 12:49:14 +0200 Subject: [PATCH 205/556] Allow functions in pvalues --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index c7baeb1c6..29c618782 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -446,10 +446,14 @@ proc spdAux::_GetComboParameterString {param inName pn v state help show_in_wind set node "" set values [$param getValues] - set pvalues [spdAux::_StringifyPValues $values [$param getPValues]] + if {[string range [$param getPValues] 0 1] ne "\{\["} { + set pvalues [spdAux::_StringifyPValues $values [$param getPValues]] + } { + set pvalues [lindex [$param getPValues] 0] + } set values [join [$param getValues] ","] append node " Date: Wed, 28 Apr 2021 12:50:00 +0200 Subject: [PATCH 206/556] Remove constitutive laws from parts and conditions, and add material --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 2 +- kratos.gid/apps/DEM/xml/Conditions.xml | 2 +- kratos.gid/apps/DEM/xml/Parts.spd | 6 +- kratos.gid/apps/DEM/xml/Processes.xml | 246 +++++++++--------- kratos.gid/apps/DEM/xml/XmlController.tcl | 9 - .../material_relations/MaterialRelations.xml | 1 + 6 files changed, 128 insertions(+), 138 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 5ac8760d9..470144c05 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -12,7 +12,7 @@ proc DEM::write::getDEMMaterialsDict { } { set assignation_table_list [list ] - dict set global_dict "materials" $materials_list + dict set global_dict "materials" [dict get $materials_list properties] dict set global_dict "material_relations" $material_relations_list dict set global_dict "material_assignation_table" $assignation_table_list diff --git a/kratos.gid/apps/DEM/xml/Conditions.xml b/kratos.gid/apps/DEM/xml/Conditions.xml index 3b50cef8d..996dcf2e5 100644 --- a/kratos.gid/apps/DEM/xml/Conditions.xml +++ b/kratos.gid/apps/DEM/xml/Conditions.xml @@ -76,7 +76,7 @@ - + diff --git a/kratos.gid/apps/DEM/xml/Parts.spd b/kratos.gid/apps/DEM/xml/Parts.spd index 8516936ee..47060620a 100644 --- a/kratos.gid/apps/DEM/xml/Parts.spd +++ b/kratos.gid/apps/DEM/xml/Parts.spd @@ -5,8 +5,8 @@ - - + @@ -18,7 +18,7 @@ - + diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index c75424e65..58a645dcd 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -4,11 +4,11 @@ - - - - - + + + + + @@ -88,56 +88,58 @@ - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - + + + + - + - - - - - + + + + + @@ -217,44 +219,44 @@ - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - + + @@ -263,23 +265,23 @@ - - - - - - + + + + + + - - + + - - - + + + - - + + @@ -310,12 +312,12 @@ - - - - - - + + + + + + @@ -324,23 +326,23 @@ - - - - - + + + + + - - - - - - - - + + + + + + + + - - + + - + + + + + + @@ -402,7 +402,6 @@ - @@ -458,8 +457,7 @@ - - + @@ -469,13 +467,13 @@ - + - + diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 36c349e10..774e99707 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -46,15 +46,6 @@ proc DEM::xml::CustomTree { args } { # spdAux::parseRoutes } - -proc DEM::xml::InsertConstitutiveLawForParameters {input arguments} { - return { - - - - } -} - proc DEM::xml::ProcGetElements { domNode args } { set elems [Model::GetElements] set names [list ] diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 99ccd76c4..0ab4c7e5c 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -4,6 +4,7 @@ + From fe693563d002c6c32089983f4952b22a6936c78c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 28 Apr 2021 13:08:06 +0200 Subject: [PATCH 207/556] material and const law are special parameters --- kratos.gid/apps/DEM/xml/Elements.xml | 8 +++-- kratos.gid/apps/DEM/xml/Parts.spd | 9 +---- kratos.gid/apps/DEM/xml/Processes.xml | 6 ++-- .../material_relations/MaterialRelations.xml | 6 ++-- .../scripts/Controllers/TreeInjections.tcl | 34 ++++++++++++++++--- 5 files changed, 43 insertions(+), 20 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Elements.xml b/kratos.gid/apps/DEM/xml/Elements.xml index 9b72019c4..a13712a9c 100644 --- a/kratos.gid/apps/DEM/xml/Elements.xml +++ b/kratos.gid/apps/DEM/xml/Elements.xml @@ -12,7 +12,9 @@ - + + + @@ -26,7 +28,9 @@ - + + + diff --git a/kratos.gid/apps/DEM/xml/Parts.spd b/kratos.gid/apps/DEM/xml/Parts.spd index 47060620a..4e0f14cf8 100644 --- a/kratos.gid/apps/DEM/xml/Parts.spd +++ b/kratos.gid/apps/DEM/xml/Parts.spd @@ -4,13 +4,7 @@ - - - - - - + @@ -21,5 +15,4 @@ - diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 58a645dcd..2f36836c7 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -128,7 +128,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -457,7 +457,7 @@ - + diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 0ab4c7e5c..9c42d7bf6 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -2,9 +2,9 @@ - - - + + + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 29c618782..7e8e52110 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -376,7 +376,13 @@ proc spdAux::GetParameterValueString { param {forcedParams ""} {base ""}} { } "combo" { - append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] + if {[$param getAttribute "combotype"] eq "material"} { + append node "" + } elseif {[$param getAttribute "combotype"] eq "constitutive_law"} { + append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] + } else { + append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] + } } "bool" { append node [_GetBooleanParameterString $param $inName $pn $v $state $help $show_in_window $base] @@ -388,9 +394,6 @@ proc spdAux::GetParameterValueString { param {forcedParams ""} {base ""}} { "integer" { append node "" } - "material" { - append node "" - } default { append node [_GetDoubleParameterString $param $inName $pn $v $state $help $show_in_window $has_units] } @@ -526,6 +529,29 @@ proc spdAux::injectPartInputs { basenode {inputs ""} } { } $basenode delete } +proc spdAux::injectPartElementInputs { basenode {inputs ""} } { + set base [$basenode parent] + set processeds [list ] + spdAux::injectLocalAxesButton $basenode + foreach obj [Model::GetElements] { + set inputs [$obj getInputs] + foreach {inName in} $inputs { + if {$inName ni $processeds} { + lappend processeds $inName + set forcedParams [list state {[PartParamState]} ] + if {[$in getActualize]} { lappend forcedParams base $obj } + set node [GetParameterValueString $in $forcedParams $obj] + + $base appendXML $node + set orig [$base lastChild] + set new [$orig cloneNode -deep] + $orig delete + $base insertBefore $new $basenode + } + } + } + $basenode delete +} proc spdAux::injectMaterials { basenode args } { set base [$basenode parent] From f598d7b41f5a4212a907260b97b9fba026081070 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 28 Apr 2021 15:06:14 +0200 Subject: [PATCH 208/556] constitutive laws parameters --- kratos.gid/apps/DEM/xml/XmlController.tcl | 3 ++- .../material_relations/MaterialRelations.spd | 2 +- .../scripts/Controllers/TreeInjections.tcl | 25 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 774e99707..76ccb9026 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -44,6 +44,7 @@ proc DEM::xml::CustomTree { args } { # customlib::ProcessIncludes $::Kratos::kratos_private(Path) # spdAux::parseRoutes + spdAux::processDynamicNodes [customlib::GetBaseRoot] } proc DEM::xml::ProcGetElements { domNode args } { @@ -107,7 +108,7 @@ proc DEM::xml::injectMaterialRelations { basenode args } { set icon [$mat getAttribute icon] if {$icon eq ""} {set icon material-relation-16} set inputs [$mat getInputs] - set matnode "" + set matnode "" foreach {inName in} $inputs { set node [spdAux::GetParameterValueString $in [list base $mat state [$in getAttribute state]] $mat] append matnode $node diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd index 2ee2d2655..64db1844b 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 7e8e52110..423d2e36c 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -380,6 +380,7 @@ proc spdAux::GetParameterValueString { param {forcedParams ""} {base ""}} { append node "" } elseif {[$param getAttribute "combotype"] eq "constitutive_law"} { append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] + append node "" } else { append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] } @@ -506,6 +507,7 @@ proc spdAux::_insert_cond_param_dependencies {base param_name} { } return $ret } + proc spdAux::injectPartInputs { basenode {inputs ""} } { set base [$basenode parent] set processeds [list ] @@ -529,6 +531,29 @@ proc spdAux::injectPartInputs { basenode {inputs ""} } { } $basenode delete } +proc spdAux::injectConstitutiveLawsInputs { basenode {inputs ""} } { + set base [$basenode parent] + set processeds [list ] + spdAux::injectLocalAxesButton $basenode + foreach obj [Model::GetConstitutiveLaws] { + set inputs [$obj getInputs] + foreach {inName in} $inputs { + if {$inName ni $processeds} { + lappend processeds $inName + set forcedParams [list state {[PartParamState]} ] + if {[$in getActualize]} { lappend forcedParams base $obj } + set node [GetParameterValueString $in $forcedParams $obj] + + $base appendXML $node + set orig [$base lastChild] + set new [$orig cloneNode -deep] + $orig delete + $base insertBefore $new $basenode + } + } + } + $basenode delete +} proc spdAux::injectPartElementInputs { basenode {inputs ""} } { set base [$basenode parent] set processeds [list ] From 2fcb18b4ef16c8385882881e4c4bb1b950b05605 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 28 Apr 2021 16:33:07 +0200 Subject: [PATCH 209/556] materials write for dem --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 53 +++++++++---------- kratos.gid/scripts/Writing/WriteMaterials.tcl | 51 ++++++++++++------ 2 files changed, 59 insertions(+), 45 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 470144c05..d7f2500d1 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -3,7 +3,23 @@ proc DEM::write::getDEMMaterialsDict { } { # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO # print COMPUTE_WEAR as false always, too (temporal fix) # While looping, create the assignation_table_list - set materials_list [DEM::write::GetMaterialsList] + set materials_node_list [DEM::write::GetMaterialsNodeList] + + set materials_list [list ] + set processed_mats [list ] + foreach mat_node $materials_node_list { + set mat_name [write::getValueByNode $mat_node] + if {$mat_name ni $processed_mats} { + set mat [dict create] + dict set mat material_name $mat_name + set material_xp "[spdAux::getRoute [GetAttribute materials_un]]/blockdata\[@name='$mat_name'\]" + foreach param [[customlib::GetBaseRoot] selectNodes "$material_xp/value"] { + dict set mat properties [$param @n] [write::getValueByNode $param] + } + lappend materials_list $mat + lappend processed_mats $mat_name + } + } # Loop over the material relations, which is a new menu in the tree linking each possible pair of materials set material_relations_list [list ] @@ -12,7 +28,7 @@ proc DEM::write::getDEMMaterialsDict { } { set assignation_table_list [list ] - dict set global_dict "materials" [dict get $materials_list properties] + dict set global_dict "materials" $materials_list dict set global_dict "material_relations" $material_relations_list dict set global_dict "material_assignation_table" $assignation_table_list @@ -73,35 +89,14 @@ proc DEM::write::getDEMMaterialsDict { } { #} -proc DEM::write::GetMaterialsList { } { +proc DEM::write::GetMaterialsNodeList { } { # Dem needs more material information than default - set old_properties_exclusion_list $write::properties_exclusion_list - set write::properties_exclusion_list [list "APPID" "Element"] - - # Trick to use the common function, since DEM is the only app with materials inside conditions - # First we get material information used in Parts - set parts_un [GetAttribute parts_un] - set orig_parts_un $parts_un - write::processMaterials - set parts_material_dict [write::getPropertiesList $parts_un] - - # Then we get material information used in Conditions - write::SetConfigurationAttribute parts_un [GetAttribute conditions_un] - write::processMaterials - set conditions_material_dict [write::getPropertiesList [GetAttribute conditions_un]] + set materials [list ] - # And finally we get the material information used in Nodal conditions - write::SetConfigurationAttribute parts_un [GetAttribute nodal_conditions_un] - write::processMaterials - set nodal_conditions_material_dict [write::getPropertiesList [GetAttribute nodal_conditions_un]] + set root [customlib::GetBaseRoot] - # Restore original variables - write::SetConfigurationAttribute parts_un $orig_parts_un - set write::properties_exclusion_list $old_properties_exclusion_list - - # Return the join of the 3 material dicts - return $parts_material_dict - set materials [dict merge $parts_material_dict $conditions_material_dict $nodal_conditions_material_dict] - W $materials + foreach mat [$root selectNodes "//value\[@n='material'\]"] { + lappend materials $mat + } return $materials } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 1575ac8e6..f14d9f7b7 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -52,6 +52,25 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { } } + foreach valueNode $s1 { + write::forceUpdateNode $valueNode + set name [$valueNode getAttribute n] + set state [get_domnode_attribute $valueNode state] + if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { + # All the introduced values are translated to 'm' and 'kg' with the help of this function + set value [gid_groups_conds::convert_value_to_default $valueNode] + dict set mat_dict $group $name $value + } + } + } else { + set s1 "" + set matvalueNode [$gNode selectNodes $xp2] + if {$matvalueNode ne ""} { + set real_material_name [write::getValueByNode $matvalueNode "force"] + set xp3 "[spdAux::getRoute $materials_un]/blockdata\[@n='material' and @name='$real_material_name']" + set matNode [$root selectNodes $xp3] + set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] + } foreach valueNode $s1 { write::forceUpdateNode $valueNode set name [$valueNode getAttribute n] @@ -140,26 +159,26 @@ proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_nam set constitutive_law_id "" if {[dict exists $mat_dict $group ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $group ConstitutiveLaw]} set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] - if {$constitutive_law ne ""} { - set variables_dict [dict create] - foreach prop [dict keys [dict get $mat_dict $group] ] { - if {$prop ni $exclusionList} { - dict set variables_list $prop [getFormattedValue [dict get $mat_dict $group $prop]] - } + + set variables_dict [dict create] + foreach prop [dict keys [dict get $mat_dict $group] ] { + if {$prop ni $exclusionList} { + dict set variables_list $prop [getFormattedValue [dict get $mat_dict $group $prop]] } - set material_dict [dict create] + } + set material_dict [dict create] - if {$write_claw_name eq "True"} { - set constitutive_law_name [$constitutive_law getKratosName] - dict set material_dict constitutive_law [dict create name $constitutive_law_name] - } - dict set material_dict Variables $variables_list - dict set material_dict Tables dictnull + if {$constitutive_law ne "" && $write_claw_name eq "True"} { + set constitutive_law_name [$constitutive_law getKratosName] + dict set material_dict constitutive_law [dict create name $constitutive_law_name] + } + dict set material_dict Variables $variables_list + dict set material_dict Tables dictnull - dict set prop_dict Material $material_dict + dict set prop_dict Material $material_dict - lappend props $prop_dict - } + lappend props $prop_dict + } } From 18f1a4658dd2098ebca99242f2354fa38dc420d2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 28 Apr 2021 16:47:46 +0200 Subject: [PATCH 210/556] started material relations --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 27 ++++++++++++++++++++ kratos.gid/apps/DEM/xml/XmlController.tcl | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index d7f2500d1..aa05c8f14 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -22,7 +22,21 @@ proc DEM::write::getDEMMaterialsDict { } { } # Loop over the material relations, which is a new menu in the tree linking each possible pair of materials + set material_relations_node_list [DEM::write::GetMaterialRelationsNodeList] set material_relations_list [list ] + + foreach mat_rel_node $material_relations_node_list { + set mat_rel [dict create ] + set mat_a [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_A'\]"]] + set mat_B [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_B'\]"]] + dict set mat_rel material_names_list [list $mat_a $mat_b] + foreach param [$mat_rel_node selectNodes "./value"] { + set param_name [$param @n] + if {$param_name ni [list MATERIAL_A MATERIAL_B]} {} + + } + lappend materials_relations_list $mat_rel + } set assignation_table_list [list ] @@ -99,4 +113,17 @@ proc DEM::write::GetMaterialsNodeList { } { lappend materials $mat } return $materials +} + +proc DEM::write::GetMaterialRelationsNodeList { } { + # Dem needs more material information than default + set material_relations [list ] + + set root [customlib::GetBaseRoot] + + set material_relations_xp "[spdAux::getRoute DEMMaterialRelations]/blockdata\[@n='material_relation'\]" + foreach mat_rel_node [[customlib::GetBaseRoot] selectNodes "$material_relations_xp/value"] { + lappend material_relations $mat_rel_node + } + return $material_relations } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 76ccb9026..6302a93bd 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -108,7 +108,7 @@ proc DEM::xml::injectMaterialRelations { basenode args } { set icon [$mat getAttribute icon] if {$icon eq ""} {set icon material-relation-16} set inputs [$mat getInputs] - set matnode "" + set matnode "" foreach {inName in} $inputs { set node [spdAux::GetParameterValueString $in [list base $mat state [$in getAttribute state]] $mat] append matnode $node From a27f2a8f55dd426dc134891153a89a9936fe9539 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 29 Apr 2021 22:39:17 +0200 Subject: [PATCH 211/556] Soy incapaz de seguirle la pista a esta escritura --- kratos.gid/apps/DEM/write/write.tcl | 12 +++++---- kratos.gid/apps/DEM/write/writeMaterials.tcl | 27 ++++++++++++++++---- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 762639e21..54162d828 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -72,11 +72,6 @@ proc DEM::write::writeModelPartEvent { } { WriteMDPAClusters write::CloseFile - # Materials - set materials [DEM::write::getDEMMaterialsDict] - write::OpenFile [GetAttribute materials_file] - write::WriteJSON $materials - write::CloseFile } proc DEM::write::writeCustomFilesEvent { } { @@ -85,6 +80,13 @@ proc DEM::write::writeCustomFilesEvent { } { write::RenameFileInModel $orig_name "MainKratos.py" write::RenameFileInModel "ProjectParameters.json" "ProjectParametersDEM.json" + + + # Materials + set materials [DEM::write::getDEMMaterialsDict] + write::OpenFile [GetAttribute materials_file] + write::WriteJSON $materials + write::CloseFile } # Attributes block diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index aa05c8f14..4f6117c55 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -28,18 +28,35 @@ proc DEM::write::getDEMMaterialsDict { } { foreach mat_rel_node $material_relations_node_list { set mat_rel [dict create ] set mat_a [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_A'\]"]] - set mat_B [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_B'\]"]] + set mat_b [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_B'\]"]] dict set mat_rel material_names_list [list $mat_a $mat_b] foreach param [$mat_rel_node selectNodes "./value"] { set param_name [$param @n] - if {$param_name ni [list MATERIAL_A MATERIAL_B]} {} - + if {$param_name eq "ConstitutiveLaw"} {set param_name "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME"} + if {$param_name ni [list MATERIAL_A MATERIAL_B]} { + dict set mat_rel properties $param_name [write::getValueByNode $param] + } } - lappend materials_relations_list $mat_rel + lappend material_relations_list $mat_rel } set assignation_table_list [list ] + set gnodes [[customlib::GetBaseRoot] selectNodes "//condition/group"] + WV gnodes + foreach gnode $gnodes { + set mat_child [$gnode selectNodes "value\[@n='material'\]"] + WV mat_child + if {$mat_child ne ""} { + set mat_name [write::getValueByNode $mat_child] + set group_name [write::GetWriteGroupName [$gnode @n]] + set cond_name [[$gnode parent] @n] + WV cond_name + WV group_name + set submodelpart_id [write::getSubModelPartId $cond_name $group_name] + lappend assignation_table_list [list $submodelpart_id $mat_name] + } + } dict set global_dict "materials" $materials_list @@ -122,7 +139,7 @@ proc DEM::write::GetMaterialRelationsNodeList { } { set root [customlib::GetBaseRoot] set material_relations_xp "[spdAux::getRoute DEMMaterialRelations]/blockdata\[@n='material_relation'\]" - foreach mat_rel_node [[customlib::GetBaseRoot] selectNodes "$material_relations_xp/value"] { + foreach mat_rel_node [[customlib::GetBaseRoot] selectNodes $material_relations_xp] { lappend material_relations $mat_rel_node } return $material_relations From 84d2c25769dace075c366b057d4fadc0f0b58ad5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 3 May 2021 20:03:52 +0200 Subject: [PATCH 212/556] Bring embedded controls back --- kratos.gid/apps/EmbeddedFluid/start.tcl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 01f24a553..2e5ce904a 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -75,4 +75,12 @@ proc ::EmbeddedFluid::AfterMeshGeneration {fail} { GiD_Set MeshType $oldMeshType } +proc ::EmbeddedFluid::CustomToolbarItems { } { + Kratos::ToolbarAddItem "ImportMesh" "Import.png" [list -np- EmbeddedFluid::xml::ImportMeshWindow] [= "Import embedded mesh"] + Kratos::ToolbarAddItem "Move" "move.png" [list -np- CopyMove Move] [= "Move the geometry/mesh"] + Kratos::ToolbarAddItem "Box" "box.png" [list -np- EmbeddedFluid::xml::BoundingBox::CreateWindow] [= "Generate the bounding box"] + + +} + ::EmbeddedFluid::Init From ff6ee168c78c0421892d059f82e1a9b22e642ca7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 3 May 2021 20:04:02 +0200 Subject: [PATCH 213/556] formating --- kratos.gid/apps/DEM/examples/SpheresDrop.tcl | 4 +- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 776 +++++++++--------- 2 files changed, 392 insertions(+), 388 deletions(-) diff --git a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl index 85417d099..9baddb2dd 100644 --- a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl @@ -64,7 +64,7 @@ proc ::DEM::examples::AssignToTreeSpheresDrop { } { set DEMInlet "$DEMConditions/condition\[@n='Inlet'\]" set inletNode [customlib::AddConditionGroupOnXPath $DEMInlet "Inlet"] $inletNode setAttribute ov surface - set props [list Material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] + set props [list material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] spdAux::SetValuesOnBaseNode $inletNode $props @@ -72,7 +72,7 @@ proc ::DEM::examples::AssignToTreeSpheresDrop { } { set DEMClusterInlet "$DEMConditions/condition\[@n='Inlet'\]" set inletNode [customlib::AddConditionGroupOnXPath $DEMClusterInlet "ClusterInlet"] $inletNode setAttribute ov surface - set props [list Material "DEM-DefaultMaterial" InletElementType "Cluster3D" ClusterType "Rock1Cluster3D" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,1.0"] + set props [list material "DEM-DefaultMaterial" InletElementType "Cluster3D" ClusterType "Rock1Cluster3D" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,1.0"] spdAux::SetValuesOnBaseNode $inletNode $props diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index a5ce34eb0..6c8054f8d 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -8,8 +8,11 @@ proc DEM::write::WriteMDPAInlet { } { write::writeNodalCoordinatesOnGroups [GetInletGroups] # SubmodelParts - if {$::Model::SpatialDimension eq "2D"} { writeInletMeshes2D - } else {writeInletMeshes} + if {$::Model::SpatialDimension eq "2D"} { + writeInletMeshes2D + } else { + writeInletMeshes + } #Copy cluster files (.clu) copyClusterFiles @@ -20,13 +23,13 @@ proc DEM::write::GetInletGroups { } { set condition_name Inlet if {$::Model::SpatialDimension eq "2D"} { - set condition_name Inlet2D + set condition_name Inlet2D } set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } @@ -80,206 +83,206 @@ proc DEM::write::GetUsedClusters { } { proc DEM::write::writeInletMeshes { } { variable inletProperties foreach groupid [dict keys $inletProperties ] { - set what nodal - if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { - set mid [expr [llength [dict keys $::write::submodelparts]] +1] - set good_name [write::transformGroupName $groupid] - set mid "Inlet_${good_name}" - dict set ::write::submodelparts [list Inlet ${groupid}] $mid - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - set group_real_name [write::GetWriteGroupName $groupid] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" - - set is_active [dict get $inletProperties $groupid SetActive] - if {$is_active=="No"} { - continue - } - - if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid InletMotionType] - set TableNumber 0 - set TableVelocityComponent 0 - if {$motion_type == "FromATable"} { - set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] - } - if {$motion_type=="LinearPeriodic"} { - - # Linear velocity - set velocity [dict get $inletProperties $groupid VelocityModulus] - lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" - - # Period - set periodic [dict get $inletProperties $groupid LinearPeriodic] - if {[write::isBooleanTrue $periodic]} { - #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - set period [dict get $inletProperties $groupid LinearPeriod] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set velocity [dict get $inletProperties $groupid AngularVelocityModulus] - lassign [split [dict get $inletProperties $groupid AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ - write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" - - - # Angular center of rotation - #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY oZ - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" - - # Angular Period - set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid AngularPeriod] - } else { - set angular_period 0.0 - } - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # # Interval - # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] - # lassign [write::getInterval $interval] ini end - # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } - # # write::WriteString " ${cond}_START_TIME $ini" - # write::WriteString " VELOCITY_START_TIME $ini" - # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" - # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } - # # write::WriteString " ${cond}_STOP_TIME $end" - # write::WriteString " VELOCITY_STOP_TIME $end" - # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] - set rigid_body_motion 1 - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - } else { - set rigid_body_motion 0 - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + set what nodal + if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { + set mid [expr [llength [dict keys $::write::submodelparts]] +1] + set good_name [write::transformGroupName $groupid] + set mid "Inlet_${good_name}" + dict set ::write::submodelparts [list Inlet ${groupid}] $mid + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + set group_real_name [write::GetWriteGroupName $groupid] + dict set gdict $group_real_name $f + write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" + write::WriteString " Begin SubModelPartData" + write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" + + set is_active [dict get $inletProperties $groupid SetActive] + if {$is_active=="No"} { + continue + } + + if {[write::isBooleanTrue $is_active]} { + set motion_type [dict get $inletProperties $groupid InletMotionType] + set TableNumber 0 + set TableVelocityComponent 0 + if {$motion_type == "FromATable"} { + set TableNumber $mid + set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] + } + if {$motion_type=="LinearPeriodic"} { + + # Linear velocity + set velocity [dict get $inletProperties $groupid VelocityModulus] + lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" + + # Period + set periodic [dict get $inletProperties $groupid LinearPeriodic] + if {[write::isBooleanTrue $periodic]} { + #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + set period [dict get $inletProperties $groupid LinearPeriod] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + set velocity [dict get $inletProperties $groupid AngularVelocityModulus] + lassign [split [dict get $inletProperties $groupid AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ + write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" + + + # Angular center of rotation + #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY oZ + write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" + + # Angular Period + set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [dict get $inletProperties $groupid AngularPeriod] + } else { + set angular_period 0.0 + } + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # # Interval + # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] + # lassign [write::getInterval $interval] ini end + # if {![string is double $ini]} { + # set ini [write::getValue DEMTimeParameters StartTime] + # } + # # write::WriteString " ${cond}_START_TIME $ini" + # write::WriteString " VELOCITY_START_TIME $ini" + # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" + # if {![string is double $end]} { + # set end [write::getValue DEMTimeParameters EndTime] + # } + # # write::WriteString " ${cond}_STOP_TIME $end" + # write::WriteString " VELOCITY_STOP_TIME $end" + # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" + + + set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] + set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] + set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] + set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] + set rigid_body_motion 1 + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + } else { + set rigid_body_motion 0 + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + } + + set contains_clusters 0 + set random_orientation 0 + + + DefineInletConditions $inletProperties $groupid $mid $contains_clusters + + set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] + lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y velocity_Z + #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" + + set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] + write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" + + + if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties $groupid ClusterType] eq "SingleSphereCluster3D"} { + write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Excentricity]" + write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid ProbabilityDistributionOfExcentricity]" + write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid StandardDeviationOfExcentricity]" + } + } + + set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] + if {$type_of_measurement eq "Kilograms"} { + set mass_flow_option 1 + } else { + set mass_flow_option 0 + } + + if {$mass_flow_option == 0} { + set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] + write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" + } + + write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" + + # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem + if {$mass_flow_option == 1} { + set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] + write::WriteString " MASS_FLOW $inlet_mass_flow" + } + set inlet_start_time [dict get $inletProperties $groupid InletStartTime] + write::WriteString " INLET_START_TIME $inlet_start_time" + set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] + write::WriteString " INLET_STOP_TIME $inlet_stop_time" + set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] + write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" + set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] + write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" + set standard_deviation [dict get $inletProperties $groupid StandardDeviation] + write::WriteString " STANDARD_DEVIATION $standard_deviation" + + if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties $groupid RandomOrientation] == "Yes"} { + set random_orientation 1 + } else { + set random_orientation 0 + set orientation_x [dict get $inletProperties $groupid OrientationX] + set orientation_y [dict get $inletProperties $groupid OrientationY] + set orientation_z [dict get $inletProperties $groupid OrientationZ] + set orientation_w [dict get $inletProperties $groupid OrientationW] + write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" + } + write::WriteString " RANDOM_ORIENTATION $random_orientation" + } + + write::WriteString " End SubModelPartData" + # Write nodes + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted $gdict + write::WriteString " End SubModelPartNodes" + write::WriteString " End SubModelPart" + write::WriteString " " + + } } - set contains_clusters 0 - set random_orientation 0 - - - DefineInletConditions $inletProperties $groupid $mid $contains_clusters - - set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] - lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y velocity_Z - #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" - - set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] - write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - - - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid ClusterType] eq "SingleSphereCluster3D"} { - write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Excentricity]" - write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid ProbabilityDistributionOfExcentricity]" - write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid StandardDeviationOfExcentricity]" - } - } - - set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] - if {$type_of_measurement eq "Kilograms"} { - set mass_flow_option 1 - } else { - set mass_flow_option 0 + if {$motion_type=="NotReady-FromATable"} { + set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" + set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] + GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" + set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] + set file_data [read $file_open] + close $file_open + GiD_File fprintf -nonewline $deminletchannel $file_data + GiD_File fprintf $deminletchannel "End Table" + GiD_File fprintf $deminletchannel "" } - if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] - write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" - } - - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - - # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem - if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] - write::WriteString " MASS_FLOW $inlet_mass_flow" - } - set inlet_start_time [dict get $inletProperties $groupid InletStartTime] - write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] - write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] - write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] - write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid StandardDeviation] - write::WriteString " STANDARD_DEVIATION $standard_deviation" - - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid RandomOrientation] == "Yes"} { - set random_orientation 1 - } else { - set random_orientation 0 - set orientation_x [dict get $inletProperties $groupid OrientationX] - set orientation_y [dict get $inletProperties $groupid OrientationY] - set orientation_z [dict get $inletProperties $groupid OrientationZ] - set orientation_w [dict get $inletProperties $groupid OrientationW] - write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" - } - write::WriteString " RANDOM_ORIENTATION $random_orientation" - } - - write::WriteString " End SubModelPartData" - # Write nodes - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString " End SubModelPart" - write::WriteString " " - - } - } - - if {$motion_type=="NotReady-FromATable"} { - set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" - set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] - GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" - set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] - set file_data [read $file_open] - close $file_open - GiD_File fprintf -nonewline $deminletchannel $file_data - GiD_File fprintf $deminletchannel "End Table" - GiD_File fprintf $deminletchannel "" - } - - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " + write::WriteString " Begin Table 0 TIME VELOCITY" + write::WriteString " 0.0 0.0" + write::WriteString " 1.0 0.0" + write::WriteString " End Table" + write::WriteString " " } } @@ -309,178 +312,178 @@ proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clu proc DEM::write::writeInletMeshes2D { } { variable inletProperties foreach groupid [dict keys $inletProperties ] { - set what nodal - if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { - set mid [expr [llength [dict keys $::write::submodelparts]] +1] - set good_name [write::transformGroupName $groupid] - set mid "Inlet_${good_name}" - dict set ::write::submodelparts [list Inlet ${groupid}] $mid - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - set group_real_name [write::GetWriteGroupName $groupid] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" - - set is_active [dict get $inletProperties $groupid SetActive] - if {$is_active=="No"} { - continue - } - - if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid InletMotionType] - set TableNumber 0 - set TableVelocityComponent 0 - if {$motion_type == "FromATable"} { - set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] + set what nodal + if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { + set mid [expr [llength [dict keys $::write::submodelparts]] +1] + set good_name [write::transformGroupName $groupid] + set mid "Inlet_${good_name}" + dict set ::write::submodelparts [list Inlet ${groupid}] $mid + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + set group_real_name [write::GetWriteGroupName $groupid] + dict set gdict $group_real_name $f + write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" + write::WriteString " Begin SubModelPartData" + write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" + + set is_active [dict get $inletProperties $groupid SetActive] + if {$is_active=="No"} { + continue + } + + if {[write::isBooleanTrue $is_active]} { + set motion_type [dict get $inletProperties $groupid InletMotionType] + set TableNumber 0 + set TableVelocityComponent 0 + if {$motion_type == "FromATable"} { + set TableNumber $mid + set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] + } + if {$motion_type=="LinearPeriodic"} { + + # Linear velocity + set velocity [dict get $inletProperties $groupid VelocityModulus] + lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" + + + # Period + set periodic [dict get $inletProperties $groupid LinearPeriodic] + if {[write::isBooleanTrue $periodic]} { + #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + set period [dict get $inletProperties $groupid LinearPeriod] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + set avelocity [dict get $inletProperties $groupid AngularVelocityModulus] + write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" + + # Angular center of rotation + #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY + write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" + + # Angular Period + set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [dict get $inletProperties $groupid AngularPeriod] + } else { + set angular_period 0.0 + } + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # # Interval + # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] + # lassign [write::getInterval $interval] ini end + # if {![string is double $ini]} { + # set ini [write::getValue DEMTimeParameters StartTime] + # } + # # write::WriteString " ${cond}_START_TIME $ini" + # write::WriteString " VELOCITY_START_TIME $ini" + # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" + # if {![string is double $end]} { + # set end [write::getValue DEMTimeParameters EndTime] + # } + # # write::WriteString " ${cond}_STOP_TIME $end" + # write::WriteString " VELOCITY_STOP_TIME $end" + # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" + + + set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] + set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] + set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] + set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] + set rigid_body_motion 1 + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + } else { + set rigid_body_motion 0 + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + } + + set contains_clusters 0 + set random_orientation 0 + + DefineInletConditions2D $inletProperties $groupid $mid $contains_clusters + + set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] + lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" + + set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] + write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" + + set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] + if {$type_of_measurement eq "Kilograms"} { + set mass_flow_option 1 + } else { + set mass_flow_option 0 + } + + if {$mass_flow_option == 0} { + set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] + write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" + } + + write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" + + # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem + if {$mass_flow_option == 1} { + set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] + write::WriteString " MASS_FLOW $inlet_mass_flow" + } + set inlet_start_time [dict get $inletProperties $groupid InletStartTime] + write::WriteString " INLET_START_TIME $inlet_start_time" + set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] + write::WriteString " INLET_STOP_TIME $inlet_stop_time" + set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] + write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" + set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] + write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" + set standard_deviation [dict get $inletProperties $groupid StandardDeviation] + write::WriteString " STANDARD_DEVIATION $standard_deviation" + + write::WriteString " End SubModelPartData" + # Write nodes + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted $gdict + write::WriteString " End SubModelPartNodes" + write::WriteString " End SubModelPart" + write::WriteString " " + + } } - if {$motion_type=="LinearPeriodic"} { - - # Linear velocity - set velocity [dict get $inletProperties $groupid VelocityModulus] - lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" - - # Period - set periodic [dict get $inletProperties $groupid LinearPeriodic] - if {[write::isBooleanTrue $periodic]} { - #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - set period [dict get $inletProperties $groupid LinearPeriod] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set avelocity [dict get $inletProperties $groupid AngularVelocityModulus] - write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" - - # Angular center of rotation - #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" - - # Angular Period - set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid AngularPeriod] - } else { - set angular_period 0.0 - } - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # # Interval - # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] - # lassign [write::getInterval $interval] ini end - # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } - # # write::WriteString " ${cond}_START_TIME $ini" - # write::WriteString " VELOCITY_START_TIME $ini" - # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" - # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } - # # write::WriteString " ${cond}_STOP_TIME $end" - # write::WriteString " VELOCITY_STOP_TIME $end" - # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] - set rigid_body_motion 1 - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - } else { - set rigid_body_motion 0 - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + if {$motion_type=="NotReady-FromATable"} { + set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" + set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] + GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" + set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] + set file_data [read $file_open] + close $file_open + GiD_File fprintf -nonewline $deminletchannel $file_data + GiD_File fprintf $deminletchannel "End Table" + GiD_File fprintf $deminletchannel "" } - set contains_clusters 0 - set random_orientation 0 - - DefineInletConditions2D $inletProperties $groupid $mid $contains_clusters - - set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] - lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" - - set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] - write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - - set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] - if {$type_of_measurement eq "Kilograms"} { - set mass_flow_option 1 - } else { - set mass_flow_option 0 - } - - if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] - write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" - } - - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - - # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem - if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] - write::WriteString " MASS_FLOW $inlet_mass_flow" - } - set inlet_start_time [dict get $inletProperties $groupid InletStartTime] - write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] - write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] - write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] - write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid StandardDeviation] - write::WriteString " STANDARD_DEVIATION $standard_deviation" - - write::WriteString " End SubModelPartData" - # Write nodes - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString " End SubModelPart" - write::WriteString " " - - } - } - - if {$motion_type=="NotReady-FromATable"} { - set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" - set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] - GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" - set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] - set file_data [read $file_open] - close $file_open - GiD_File fprintf -nonewline $deminletchannel $file_data - GiD_File fprintf $deminletchannel "End Table" - GiD_File fprintf $deminletchannel "" - } - - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " + write::WriteString " Begin Table 0 TIME VELOCITY" + write::WriteString " 0.0 0.0" + write::WriteString " 1.0 0.0" + write::WriteString " End Table" + write::WriteString " " } } @@ -497,26 +500,26 @@ proc DEM::write::DefineInletConditions2D {inletProperties groupid mid contains_c proc DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_type} { if {$inlet_element_type eq "LineCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "linecluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "linecluster3D.clu" } elseif {$inlet_element_type eq "RingCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ringcluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ringcluster3D.clu" } elseif {$inlet_element_type eq "Wheat5Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "wheat5cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "wheat5cluster3D.clu" } elseif {$inlet_element_type eq "SoyBeanCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "soybeancluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "soybeancluster3D.clu" } elseif {$inlet_element_type eq "CornKernel3Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "corn3cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "corn3cluster3D.clu" } elseif {$inlet_element_type eq "CornKernelCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "cornkernelcluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "cornkernelcluster3D.clu" } elseif {$inlet_element_type eq "Rock1Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "rock1cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "rock1cluster3D.clu" } elseif {$inlet_element_type eq "Rock2Cluster3D"} { set inlet_element_type "Cluster3D" set cluster_file_name "rock2cluster3D.clu" @@ -656,9 +659,10 @@ proc DEM::write::writeMaterialsInlet { } { foreach group [dict keys $inletProperties] { write::WriteString "Begin Properties [dict get $inletProperties $group MID] // Inlet group: [write::GetWriteGroupName $group]" - if {$::Model::SpatialDimension eq "2D"} {set DEM_D_law "DEM_D_Hertz_viscous_Coulomb2D" - } else { set DEM_D_law "DEM_D_Hertz_viscous_Coulomb" - } + set DEM_D_law "DEM_D_Hertz_viscous_Coulomb" + if {$::Model::SpatialDimension eq "2D"} { + set DEM_D_law "${DEM_D_law}2D" + } dict set inletProperties $group DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME $DEM_D_law dict set inletProperties $group DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME DEMContinuumConstitutiveLaw From cc2e45114683df3ff919ea3fb7ee92c4da594067 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 3 May 2021 20:03:52 +0200 Subject: [PATCH 214/556] Bring embedded controls back --- kratos.gid/apps/EmbeddedFluid/start.tcl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 01f24a553..2e5ce904a 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -75,4 +75,12 @@ proc ::EmbeddedFluid::AfterMeshGeneration {fail} { GiD_Set MeshType $oldMeshType } +proc ::EmbeddedFluid::CustomToolbarItems { } { + Kratos::ToolbarAddItem "ImportMesh" "Import.png" [list -np- EmbeddedFluid::xml::ImportMeshWindow] [= "Import embedded mesh"] + Kratos::ToolbarAddItem "Move" "move.png" [list -np- CopyMove Move] [= "Move the geometry/mesh"] + Kratos::ToolbarAddItem "Box" "box.png" [list -np- EmbeddedFluid::xml::BoundingBox::CreateWindow] [= "Generate the bounding box"] + + +} + ::EmbeddedFluid::Init From 1d39b98207127cc95eb266a90b76b823eb17eb4f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 16:11:00 +0200 Subject: [PATCH 215/556] material to Material --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 4 ++-- kratos.gid/apps/DEM/xml/Processes.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 4f6117c55..12d48ff36 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -40,12 +40,12 @@ proc DEM::write::getDEMMaterialsDict { } { lappend material_relations_list $mat_rel } - + # Submodelpart - material assignation set assignation_table_list [list ] set gnodes [[customlib::GetBaseRoot] selectNodes "//condition/group"] WV gnodes foreach gnode $gnodes { - set mat_child [$gnode selectNodes "value\[@n='material'\]"] + set mat_child [$gnode selectNodes "value\[@n='Material'\]"] WV mat_child if {$mat_child ne ""} { set mat_name [write::getValueByNode $mat_child] diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 2f36836c7..41b82aa56 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -128,7 +128,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -457,7 +457,7 @@ - + From 48234cffd90eb1133580e54f363f9f700e307653 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 17:03:23 +0200 Subject: [PATCH 216/556] improved add submodelpart function --- .../scripts/Writing/WriteSubModelPart.tcl | 30 +++++++++++++++---- kratos.gid/scripts/Writing/Writing.tcl | 10 ------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl index 6c8c97263..c02c2b397 100644 --- a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl +++ b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl @@ -8,12 +8,9 @@ proc write::writeGroupSubModelPart { cid group {what "Elements"} {iniend ""} {ta set mid "" set what [split $what "&"] set group [GetWriteGroupName $group] - if {![dict exists $submodelparts [list $cid ${group}]]} { + if {[write::getSubModelPartId $cid $group] eq 0} { # Add the submodelpart to the catalog - set good_name [write::transformGroupName $group] - set mid "${cid}_${good_name}" - dict set submodelparts [list $cid ${group}] $mid - + set mid [write::AddSubmodelpart $cid $group] # Prepare the print formats incr ::write::current_mdpa_indent_level set s1 [mdpaIndent] @@ -163,3 +160,26 @@ proc write::GetSubModelPartFromCondition { base_UN condition_id } { } return $submodelpart_list } + + +proc write::AddSubmodelpart {condid group} { + variable submodelparts + set group_name [write::GetWriteGroupName $group] + set good_name [write::transformGroupName $group_name] + set mid "${condid}_${good_name}" + if {[write::getSubModelPartId $condid $group_name] eq 0} { + dict set submodelparts [list $condid ${group_name}] $mid + } + return $mid +} + +proc write::getSubModelPartId {cid group} { + variable submodelparts + + set find [list $cid ${group}] + if {[dict exists $submodelparts $find]} { + return [dict get $submodelparts [list $cid ${group}]] + } { + return 0 + } +} \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index c535eb0a1..0e850807e 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -243,16 +243,6 @@ proc write::GetListsOfNodes {elems nnodes {ignore 0} } { return $obj } -proc write::getSubModelPartId {cid group} { - variable submodelparts - - set find [list $cid ${group}] - if {[dict exists $submodelparts $find]} { - return [dict get $submodelparts [list $cid ${group}]] - } { - return 0 - } -} proc write::transformGroupName {groupid} { set new_parts [list ] From 8b10bcfdfb577457fa958d636e03ad5406bd7928 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 17:03:35 +0200 Subject: [PATCH 217/556] added submodelpart via function --- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 3daadc2f8..3d48d135f 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -147,13 +147,12 @@ proc DEM::write::writeSphereRadiusOnGroup { group } { } proc DEM::write::writeDEMConditionMeshes { } { - set i 0 foreach {cond group_list} [GetSpheresGroupsListInConditions] { - if {$cond eq "DEM-VelocityBC" || $cond eq "DEM-VelocityBC2D"} { + if {$cond in [list "DEM-VelocityBC" "DEM-VelocityBC2D"]} { #set cnd [Model::getCondition $cond] foreach group $group_list { - incr i - write::WriteString "Begin SubModelPart $i // GUI DEM-VelocityBC - $cond - group identifier: $group" + set mid [write::AddSubmodelpart $cond $group] + write::WriteString "Begin SubModelPart $mid // GUI DEM-VelocityBC - $cond - group identifier: $group" write::WriteString " Begin SubModelPartData // DEM-VelocityBC. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] From d8130ec3cb53b0f408dd15f5f073d31cd04a81b5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 17:08:59 +0200 Subject: [PATCH 218/556] fixed conditions submodelpart in demmdpa --- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 3d48d135f..9b352ee65 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -60,11 +60,11 @@ proc DEM::write::WriteCustomDEMSmp { } { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { set group_id [$group @n] - set group_raw [write::GetWriteGroupName $group_id] - set good_name [write::transformGroupName $group_raw] + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] if {$destination_mdpa == "DEM"} { - write::WriteString "Begin SubModelPart $good_name \/\/ Custom SubModelPart. Group name: $group_id" + set mid [write::AddSubmodelpart $cond $group_id] + write::WriteString "Begin SubModelPart $mid \/\/ Custom SubModelPart. Group name: $group_id" write::WriteString "Begin SubModelPartData" write::WriteString "End SubModelPartData" write::WriteString "Begin SubModelPartNodes" @@ -148,7 +148,7 @@ proc DEM::write::writeSphereRadiusOnGroup { group } { proc DEM::write::writeDEMConditionMeshes { } { foreach {cond group_list} [GetSpheresGroupsListInConditions] { - if {$cond in [list "DEM-VelocityBC" "DEM-VelocityBC2D"]} { + if {$cond in {"DEM-VelocityBC" "DEM-VelocityBC2D"}} { #set cnd [Model::getCondition $cond] foreach group $group_list { set mid [write::AddSubmodelpart $cond $group] @@ -287,12 +287,12 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString "End SubModelPart" write::WriteString "" } - } elseif {$cond eq "DEM-VelocityIC" || $cond eq "DEM-VelocityIC2D"} { + } elseif {$cond in {"DEM-VelocityIC" "DEM-VelocityIC2D"}} { set rigid_body_motion 0 #set cnd [Model::getCondition $cond] foreach group $group_list { - incr i - write::WriteString "Begin SubModelPart $i // GUI DEM-VelocityIC - $cond - group identifier: $group" + set mid [write::AddSubmodelpart $cond $group] + write::WriteString "Begin SubModelPart $mid // GUI DEM-VelocityIC - $cond - group identifier: $group" write::WriteString " Begin SubModelPartData // DEM-VelocityIC. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] @@ -342,10 +342,11 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString "End SubModelPart" write::WriteString "" } - } elseif {$cond eq "DEM-GraphCondition" || $cond eq "DEM-GraphCondition2D"} { + } elseif {$cond in {"DEM-GraphCondition" "DEM-GraphCondition2D"}} { foreach group $group_list { - incr i - write::WriteString "Begin SubModelPart $i // GUI DEM-GraphCondition - $cond - group identifier: $group" + + set mid [write::AddSubmodelpart $cond $group] + write::WriteString "Begin SubModelPart $mid // GUI DEM-GraphCondition - $cond - group identifier: $group" write::WriteString " Begin SubModelPartData // DEM-GraphCondition. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] From 55e4b4f9494519317bcabff9ce906c80b8dc7587 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 17:31:46 +0200 Subject: [PATCH 219/556] inlet write submodelparts --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 6c8054f8d..2e9798134 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -82,17 +82,15 @@ proc DEM::write::GetUsedClusters { } { proc DEM::write::writeInletMeshes { } { variable inletProperties + + set condition_name Inlet foreach groupid [dict keys $inletProperties ] { set what nodal - if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { - set mid [expr [llength [dict keys $::write::submodelparts]] +1] - set good_name [write::transformGroupName $groupid] - set mid "Inlet_${good_name}" - dict set ::write::submodelparts [list Inlet ${groupid}] $mid + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + set mid [write::AddSubmodelpart $condition_name $groupid] set gdict [dict create] set f "%10i\n" set f [subst $f] - set group_real_name [write::GetWriteGroupName $groupid] dict set gdict $group_real_name $f write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" write::WriteString " Begin SubModelPartData" @@ -311,17 +309,17 @@ proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clu proc DEM::write::writeInletMeshes2D { } { variable inletProperties + + set condition_name Inlet2D + foreach groupid [dict keys $inletProperties ] { set what nodal - if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { - set mid [expr [llength [dict keys $::write::submodelparts]] +1] - set good_name [write::transformGroupName $groupid] - set mid "Inlet_${good_name}" - dict set ::write::submodelparts [list Inlet ${groupid}] $mid + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + set mid [write::AddSubmodelpart $condition_name $groupid] + set group_real_name [write::GetWriteGroupName $groupid] set gdict [dict create] set f "%10i\n" set f [subst $f] - set group_real_name [write::GetWriteGroupName $groupid] dict set gdict $group_real_name $f write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" write::WriteString " Begin SubModelPartData" @@ -584,11 +582,8 @@ proc DEM::write::writeInletMeshes-old { } { variable inletProperties foreach groupid [dict keys $inletProperties ] { set what nodal - if {![dict exists $::write::submodelparts [list Inlet ${groupid}]]} { - set mid [expr [llength [dict keys $::write::submodelparts]] +1] - set good_name [write::transformGroupName $groupid] - set mid "Inlet_${good_name}" - dict set ::write::submodelparts [list Inlet ${groupid}] $mid + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + set mid [write::AddSubmodelpart $cond $group] set gdict [dict create] set f "%10i\n" set f [subst $f] From fd7c4b2d2b7562148ea1400ec9ca27ce362a6ac4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 17:59:31 +0200 Subject: [PATCH 220/556] dem fem walls --- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 821 +++++++++--------- 1 file changed, 413 insertions(+), 408 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 6b2fdeda5..cbbeaaf74 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -1,145 +1,148 @@ proc DEM::write::WriteMDPAWalls { } { # Headers write::writeModelPartData - + # Material set wall_properties [WriteRigidWallProperties] set phantom_wall_properties [WritePhantomWallProperties] - + # Nodal coordinates (only for Walls ) write::writeNodalCoordinatesOnGroups [GetWallsGroups] write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] + + WV wall_properties + WV phantom_wall_properties # Nodal conditions and conditions writeConditions $wall_properties writePhantomConditions $phantom_wall_properties - + # SubmodelParts writeWallConditionMeshes - + # CustomSubmodelParts WriteWallCustomSmp } proc DEM::write::WriteRigidWallProperties { } { set wall_properties [dict create ] - set condition_name 'DEM-FEM-Wall' + set condition_name 'DEM-FEM-Wall' set cnd [Model::getCondition $condition_name] - + if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = $condition_name\]/group" } - + #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" set i $DEM::write::last_property_id foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - write::WriteString "Begin Properties $i" - #foreach {prop obj} [$cnd getAllInputs] { - # if {$prop in $print_list} { - # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] - # write::WriteString " $prop $v" - # } - #} - set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] - set pi $MathUtils::PI - set propvalue [expr {tan($friction_value*$pi/180.0)}] - write::WriteString " FRICTION $propvalue" - # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" - write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" - set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] - if {[write::isBooleanTrue $compute_wear_bool]} { - set compute_wear 1 - set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] - set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] - set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] - } else { - set compute_wear 0 - set severiy_of_wear 0.001 - set impact_wear_severity 0.001 - set brinell_hardness 200.0 - } - set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] - if {[write::isBooleanTrue $rigid_structure_bool]} { - set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] - set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] - } else { - set young_modulus 1e20 - set poisson_ratio 0.25 - } - write::WriteString " COMPUTE_WEAR $compute_wear" - write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" - write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" - write::WriteString " BRINELL_HARDNESS $brinell_hardness" - write::WriteString " YOUNG_MODULUS $young_modulus" - write::WriteString " POISSON_RATIO $poisson_ratio" - - write::WriteString "End Properties" - set groupid [$group @n] - dict set wall_properties $groupid $i - incr DEM::write::last_property_id + incr i + write::WriteString "Begin Properties $i" + #foreach {prop obj} [$cnd getAllInputs] { + # if {$prop in $print_list} { + # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] + # write::WriteString " $prop $v" + # } + #} + set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] + set pi $MathUtils::PI + set propvalue [expr {tan($friction_value*$pi/180.0)}] + write::WriteString " FRICTION $propvalue" + # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" + write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" + set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] + if {[write::isBooleanTrue $compute_wear_bool]} { + set compute_wear 1 + set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] + set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] + set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] + } else { + set compute_wear 0 + set severiy_of_wear 0.001 + set impact_wear_severity 0.001 + set brinell_hardness 200.0 + } + set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] + if {[write::isBooleanTrue $rigid_structure_bool]} { + set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] + set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] + } else { + set young_modulus 1e20 + set poisson_ratio 0.25 + } + write::WriteString " COMPUTE_WEAR $compute_wear" + write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" + write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" + write::WriteString " BRINELL_HARDNESS $brinell_hardness" + write::WriteString " YOUNG_MODULUS $young_modulus" + write::WriteString " POISSON_RATIO $poisson_ratio" + + write::WriteString "End Properties" + set groupid [$group @n] + dict set wall_properties $groupid $i + incr DEM::write::last_property_id } write::WriteString "" return $wall_properties } -proc DEM::write::WritePhantomWallProperties { } { #TODO: remove all unnecessary prints +proc DEM::write::WritePhantomWallProperties { } { set wall_properties [dict create ] - set condition_name 'Phantom-Wall' + set condition_name 'Phantom-Wall' set cnd [Model::getCondition $condition_name] - + #TODO: Preguntar a ferran que quiere aqui. Se escriben 2 veces las dem fem walls en 2D if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = $condition_name\]/group" } - + #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" set i $DEM::write::last_property_id foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - write::WriteString "Begin Properties $i" - #foreach {prop obj} [$cnd getAllInputs] { - # if {$prop in $print_list} { - # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] - # write::WriteString " $prop $v" - # } - #} - set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] - set pi $MathUtils::PI - set propvalue [expr {tan($friction_value*$pi/180.0)}] - write::WriteString " FRICTION $propvalue" - # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" - write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" - set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] - if {[write::isBooleanTrue $compute_wear_bool]} { - set compute_wear 1 - set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] - set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] - set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] - } else { - set compute_wear 0 - set severiy_of_wear 0.001 - set impact_wear_severity 0.001 - set brinell_hardness 200.0 - } - set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] - if {[write::isBooleanTrue $rigid_structure_bool]} { - set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] - set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] - } else { - set young_modulus 1e20 - set poisson_ratio 0.25 - } - write::WriteString " COMPUTE_WEAR $compute_wear" - write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" - write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" - write::WriteString " BRINELL_HARDNESS $brinell_hardness" - write::WriteString " YOUNG_MODULUS $young_modulus" - write::WriteString " POISSON_RATIO $poisson_ratio" - - write::WriteString "End Properties" - set groupid [$group @n] - dict set wall_properties $groupid $i - incr DEM::write::last_property_id + incr i + write::WriteString "Begin Properties $i" + #foreach {prop obj} [$cnd getAllInputs] { + # if {$prop in $print_list} { + # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] + # write::WriteString " $prop $v" + # } + #} + set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] + set pi $MathUtils::PI + set propvalue [expr {tan($friction_value*$pi/180.0)}] + write::WriteString " FRICTION $propvalue" + # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" + write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" + set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] + if {[write::isBooleanTrue $compute_wear_bool]} { + set compute_wear 1 + set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] + set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] + set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] + } else { + set compute_wear 0 + set severiy_of_wear 0.001 + set impact_wear_severity 0.001 + set brinell_hardness 200.0 + } + set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] + if {[write::isBooleanTrue $rigid_structure_bool]} { + set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] + set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] + } else { + set young_modulus 1e20 + set poisson_ratio 0.25 + } + write::WriteString " COMPUTE_WEAR $compute_wear" + write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" + write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" + write::WriteString " BRINELL_HARDNESS $brinell_hardness" + write::WriteString " YOUNG_MODULUS $young_modulus" + write::WriteString " POISSON_RATIO $poisson_ratio" + + write::WriteString "End Properties" + set groupid [$group @n] + dict set wall_properties $groupid $i + incr DEM::write::last_property_id } write::WriteString "" return $wall_properties @@ -147,24 +150,24 @@ proc DEM::write::WritePhantomWallProperties { } { #TODO: remove all unnecessary proc DEM::write::WriteWallCustomSmp { } { + set condition_name "DEM-CustomSmp" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" - set i $DEM::write::last_property_id + foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - set groupid [$group @n] - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "FEM"} { - - #write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" - write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" - write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid" - write::WriteString "End SubModelPartData" - write::WriteString "Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]] - write::WriteString "End SubModelPartNodes" - write::WriteString "End SubModelPart" - write::WriteString "" - } + + set groupid [$group @n] + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "FEM"} { + set mid [write::AddSubmodelpart $condition_name $groupid] + write::WriteString "Begin SubModelPart $mid \/\/ Custom SubModelPart. Group name: $groupid" + write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid" + write::WriteString "End SubModelPartData" + write::WriteString "Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]] + write::WriteString "End SubModelPartNodes" + write::WriteString "End SubModelPart" + write::WriteString "" + } } } @@ -183,19 +186,22 @@ proc DEM::write::writePhantomConditions { wall_properties } { proc DEM::write::GetWallsGroups { } { set groups [list ] - set groups_rigid [GetRigidWallsGroups] - set groups_phantom [GetPhantomWallsGroups] - set groups [concat $groups_rigid $groups_phantom] + set groups_rigid [GetRigidWallsGroups] + set groups_phantom [GetPhantomWallsGroups] + set groups [concat $groups_rigid $groups_phantom] return $groups } proc DEM::write::GetRigidWallsGroups { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group"} + set condition_name "DEM-FEM-Wall" + if {$::Model::SpatialDimension eq "2D"} { + set condition_name "DEM-FEM-Wall2D" + } + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } @@ -203,10 +209,10 @@ proc DEM::write::GetRigidWallsGroups { } { proc DEM::write::GetPhantomWallsGroups { } { set groups [list ] if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Phantom-Wall'\]/group"} + } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Phantom-Wall'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } @@ -215,11 +221,11 @@ proc DEM::write::GetWallsGroupsSmp { } { set groups [list ] set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "FEM"} { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] - } + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "FEM"} { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] + } } return $groups } @@ -228,34 +234,34 @@ proc DEM::write::GetWallsGroupsSmp { } { proc DEM::write::GetWallsGroupsListInConditions { } { set conds_groups_dict [dict create ] set groups [list ] - + # Get all the groups with surfaces involved in walls foreach group [GetRigidWallsGroups] { - foreach surface [GiD_EntitiesGroups get $group surfaces] { - foreach involved_group [GiD_EntitiesGroups entity_groups surfaces $surface] { - set involved_group_id [write::GetWriteGroupName $involved_group] - if {$involved_group_id ni $groups} {lappend groups $involved_group_id} - } - } + foreach surface [GiD_EntitiesGroups get $group surfaces] { + foreach involved_group [GiD_EntitiesGroups entity_groups surfaces $surface] { + set involved_group_id [write::GetWriteGroupName $involved_group] + if {$involved_group_id ni $groups} {lappend groups $involved_group_id} + } + } } - + foreach group [GetRigidWallsGroups] { - foreach line [GiD_EntitiesGroups get $group lines] { - foreach involved_group [GiD_EntitiesGroups entity_groups lines $line] { - set involved_group_id [write::GetWriteGroupName $involved_group] - if {$involved_group_id ni $groups} {lappend groups $involved_group_id} - } - } + foreach line [GiD_EntitiesGroups get $group lines] { + foreach involved_group [GiD_EntitiesGroups entity_groups lines $line] { + set involved_group_id [write::GetWriteGroupName $involved_group] + if {$involved_group_id ni $groups} {lappend groups $involved_group_id} + } + } } - + # Find the relations condition -> group set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition" foreach cond [[customlib::GetBaseRoot] selectNodes $xp1] { - set condid [$cond @n] - foreach cond_group [$cond selectNodes "group"] { - set group [write::GetWriteGroupName [$cond_group @n]] - if {$group in $groups} {dict lappend conds_groups_dict $condid [$cond_group @n]} - } + set condid [$cond @n] + foreach cond_group [$cond selectNodes "group"] { + set group [write::GetWriteGroupName [$cond_group @n]] + if {$group in $groups} {dict lappend conds_groups_dict $condid [$cond_group @n]} + } } return $conds_groups_dict } @@ -266,281 +272,280 @@ proc DEM::write::GetConditionsGroups { } { set groups [list ] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } proc DEM::write::writeWallConditionMeshes { } { - set i 0 - + foreach group [GetRigidWallsGroups] { - incr i - writeWallConditionMesh $i $group "DEM-FEM-Wall" + writeWallConditionMesh $group "DEM-FEM-Wall" } - + foreach group [GetPhantomWallsGroups] { - incr i - writeWallConditionMesh $i $group "Phantom-Wall" + writeWallConditionMesh $group "Phantom-Wall" } } -proc DEM::write::writeWallConditionMesh { i group condition_type } { - +proc DEM::write::writeWallConditionMesh { group condition_type } { + if {$::Model::SpatialDimension eq "2D"} { - set cond "DEM-FEM-Wall2D" + set cond "DEM-FEM-Wall2D" } else { - set cond $condition_type + set cond $condition_type } - - write::WriteString "Begin SubModelPart $i // $cond - group identifier: $group" - write::WriteString " Begin SubModelPartData // $cond. Group name: $group" - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" - set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - - set is_active [write::getValueByNode [$group_node selectNodes "./value\[@n='SetActive'\]"]] - if {[write::isBooleanTrue $is_active]} { - set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-ImposedMotion'\]"]] - if {$motion_type == "LinearPeriodic"} { - # Linear velocity - set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='VelocityModulus'\]"]] - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='DirectionVector'\]"]] velocity_X velocity_Y velocity_Z - if {$::Model::SpatialDimension eq "2D"} { - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" - } else { - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} - # set vX [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearVelocityX'\]"]] - - # Period - set periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriodic'\]"]] - if {[write::isBooleanTrue $periodic]} { - set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" - } else { - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularDirectionVector'\]"]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wx wy wz - write::WriteString " ANGULAR_VELOCITY \[3\] ($wx,$wy,$wz)"} - - # Angular center of rotation - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" - } else {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)"} - - # Angular Period - set angular_periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriodic'\]"]] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriod'\]"]] - } else {set angular_period 0.0} - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # set intervals - set LinearStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearStartTime'\]"]] - set LinearEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearEndTime'\]"]] - set AngularStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularStartTime'\]"]] - set AngularEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularEndTime'\]"]] - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - - set fixed_mesh_option_bool [write::getValueByNode [$group_node selectNodes "./value\[@n='fixed_wall'\]"]] - if {[write::isBooleanTrue $fixed_mesh_option_bool]} {set fixed_mesh_option 1 - } else {set fixed_mesh_option 0} - set rigid_body_motion 1 - set free_body_motion 0 - #Hardcoded - write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " FREE_BODY_MOTION $free_body_motion" - - } elseif {$motion_type == "FreeMotion"} { - set fixed_mesh_option 0 - set rigid_body_motion 0 - set free_body_motion 1 - - set mass [write::getValueByNode [$group_node selectNodes "./value\[@n='Mass'\]"]] - write::WriteString " RIGID_BODY_MASS $mass" - - lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfMass'\]"]] cX cY cZ - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,0.0)" - } else {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,$cZ)"} - - set inertias [write::getValueByNode [$group_node selectNodes "./value\[@n='Inertia'\]"]] - if {$::Model::SpatialDimension eq "2D"} { - set iX $inertias - write::WriteString " RIGID_BODY_INERTIAS \[3\] (0.0,0.0,$iX)" - } else { - lassign $inertias iX iY iZ - write::WriteString " RIGID_BODY_INERTIAS \[3\] ($iX,$iY,$iZ)" - } - - # DOFS - set Ax [write::getValueByNode [$group_node selectNodes "./value\[@n='Ax'\]"]] - set Ay [write::getValueByNode [$group_node selectNodes "./value\[@n='Ay'\]"]] - set Az [write::getValueByNode [$group_node selectNodes "./value\[@n='Az'\]"]] - set Bx [write::getValueByNode [$group_node selectNodes "./value\[@n='Bx'\]"]] - set By [write::getValueByNode [$group_node selectNodes "./value\[@n='By'\]"]] - set Bz [write::getValueByNode [$group_node selectNodes "./value\[@n='Bz'\]"]] - if {$Ax == "Constant"} { - set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='Vx'\]"]] - write::WriteString " IMPOSED_VELOCITY_X_VALUE $fix_vx" - } - if {$Ay == "Constant"} { - set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='Vy'\]"]] - write::WriteString " IMPOSED_VELOCITY_Y_VALUE $fix_vy" - } - if {$Az == "Constant"} { - set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='Vz'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_VELOCITY_Z_VALUE 0.0" - } else {write::WriteString " IMPOSED_VELOCITY_Z_VALUE $fix_vz"} - - } - if {$Bx == "Constant"} { - set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='AVx'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE 0.0" - } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE $fix_avx"} - - } - if {$By == "Constant"} { - set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='AVy'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE 0.0" - } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} - - } - if {$Bz == "Constant"} { - set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='AVz'\]"]] - write::WriteString " IMPOSED_ANGULAR_VELOCITY_Z_VALUE $fix_avz" - } - set VStart [write::getValueByNode [$group_node selectNodes "./value\[@n='VStart'\]"]] - set VEnd [write::getValueByNode [$group_node selectNodes "./value\[@n='VEnd'\]"]] - write::WriteString " VELOCITY_START_TIME $VStart" - write::WriteString " VELOCITY_STOP_TIME $VEnd" - - # initial conditions - set iAx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAx'\]"]] - set iAy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAy'\]"]] - set iAz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAz'\]"]] - set iBx [write::getValueByNode [$group_node selectNodes "./value\[@n='iBx'\]"]] - set iBy [write::getValueByNode [$group_node selectNodes "./value\[@n='iBy'\]"]] - set iBz [write::getValueByNode [$group_node selectNodes "./value\[@n='iBz'\]"]] - if {$iAx == "true"} { - set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='iVx'\]"]] - write::WriteString " INITIAL_VELOCITY_X_VALUE $fix_vx" - } - if {$iAy == "true"} { - set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='iVy'\]"]] - write::WriteString " INITIAL_VELOCITY_Y_VALUE $fix_vy" - } - if {$iAz == "true"} { - set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='iVz'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_VELOCITY_Z_VALUE 0.0" - } else {write::WriteString " INITIAL_VELOCITY_Z_VALUE $fix_vz"} - - } - if {$iBx == "true"} { - set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVx'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE 0.0" - } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE $fix_avx"} - - } - if {$iBy == "true"} { - set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVy'\]"]] - if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE 0.0" - } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} - - } - if {$iBz == "true"} { - set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVz'\]"]] - write::WriteString " INITIAL_ANGULAR_VELOCITY_Z_VALUE $fix_avz" - } - - # impose forces and moments - set ExternalForceX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceX'\]"]] - set ExternalForceY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceY'\]"]] - set ExternalForceZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceZ'\]"]] - set ExternalMomentX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentX'\]"]] - set ExternalMomentY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentY'\]"]] - set ExternalMomentZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentZ'\]"]] - - if {$ExternalForceX == "true"} { - set FX [write::getValueByNode [$group_node selectNodes "./value\[@n='FX'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_X $FX" - } - if {$ExternalForceY == "true"} { - set FY [write::getValueByNode [$group_node selectNodes "./value\[@n='FY'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_Y $FY" - } - if {$ExternalForceZ == "true"} { - set FZ [write::getValueByNode [$group_node selectNodes "./value\[@n='FZ'\]"]] - write::WriteString " EXTERNAL_APPLIED_FORCE_Z $FZ" - } - if {$ExternalMomentX == "true"} { - set MX [write::getValueByNode [$group_node selectNodes "./value\[@n='MX'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_X $MX" - } - if {$ExternalMomentY == "true"} { - set MY [write::getValueByNode [$group_node selectNodes "./value\[@n='MY'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_Y $MY" - } - if {$ExternalMomentZ == "true"} { - set MZ [write::getValueByNode [$group_node selectNodes "./value\[@n='MZ'\]"]] - write::WriteString " EXTERNAL_APPLIED_MOMENT_Z $MZ" - } - #Hardcoded - write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " FREE_BODY_MOTION $free_body_motion" - } - - #Hardcoded - set is_ghost [write::getValueByNode [$group_node selectNodes "./value\[@n='IsGhost'\]"]] - if {$is_ghost == "true"} { - write::WriteString " IS_GHOST 1" - } else { - write::WriteString " IS_GHOST 0" - } - write::WriteString " IDENTIFIER [write::transformGroupName $group]" - - DefineFEMExtraConditions $group_node - - } - write::WriteString " End SubModelPartData" - - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] - write::WriteString " End SubModelPartNodes" - - write::WriteString "Begin SubModelPartConditions" - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - dict set gdict $group $f - GiD_WriteCalculationFile elements -sorted $gdict - write::WriteString "End SubModelPartConditions" - write::WriteString "" - write::WriteString "End SubModelPart" - write::WriteString "" + + set mid [write::AddSubmodelpart $cond $group] + + write::WriteString "Begin SubModelPart $mid // $cond - group identifier: $group" + write::WriteString " Begin SubModelPartData // $cond. Group name: $group" + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" + set group_node [[customlib::GetBaseRoot] selectNodes $xp1] + + set is_active [write::getValueByNode [$group_node selectNodes "./value\[@n='SetActive'\]"]] + if {[write::isBooleanTrue $is_active]} { + set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-ImposedMotion'\]"]] + if {$motion_type == "LinearPeriodic"} { + # Linear velocity + set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='VelocityModulus'\]"]] + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='DirectionVector'\]"]] velocity_X velocity_Y velocity_Z + if {$::Model::SpatialDimension eq "2D"} { + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" + } else { + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} + # set vX [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearVelocityX'\]"]] + + # Period + set periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriodic'\]"]] + if {[write::isBooleanTrue $periodic]} { + set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" + } else { + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularDirectionVector'\]"]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wx wy wz + write::WriteString " ANGULAR_VELOCITY \[3\] ($wx,$wy,$wz)"} + + # Angular center of rotation + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" + } else {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)"} + + # Angular Period + set angular_periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriodic'\]"]] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriod'\]"]] + } else {set angular_period 0.0} + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # set intervals + set LinearStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearStartTime'\]"]] + set LinearEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearEndTime'\]"]] + set AngularStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularStartTime'\]"]] + set AngularEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularEndTime'\]"]] + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + + set fixed_mesh_option_bool [write::getValueByNode [$group_node selectNodes "./value\[@n='fixed_wall'\]"]] + if {[write::isBooleanTrue $fixed_mesh_option_bool]} {set fixed_mesh_option 1 + } else {set fixed_mesh_option 0} + set rigid_body_motion 1 + set free_body_motion 0 + #Hardcoded + write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " FREE_BODY_MOTION $free_body_motion" + + } elseif {$motion_type == "FreeMotion"} { + set fixed_mesh_option 0 + set rigid_body_motion 0 + set free_body_motion 1 + + set mass [write::getValueByNode [$group_node selectNodes "./value\[@n='Mass'\]"]] + write::WriteString " RIGID_BODY_MASS $mass" + + lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfMass'\]"]] cX cY cZ + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,0.0)" + } else {write::WriteString " RIGID_BODY_CENTER_OF_MASS \[3\] ($cX,$cY,$cZ)"} + + set inertias [write::getValueByNode [$group_node selectNodes "./value\[@n='Inertia'\]"]] + if {$::Model::SpatialDimension eq "2D"} { + set iX $inertias + write::WriteString " RIGID_BODY_INERTIAS \[3\] (0.0,0.0,$iX)" + } else { + lassign $inertias iX iY iZ + write::WriteString " RIGID_BODY_INERTIAS \[3\] ($iX,$iY,$iZ)" + } + + # DOFS + set Ax [write::getValueByNode [$group_node selectNodes "./value\[@n='Ax'\]"]] + set Ay [write::getValueByNode [$group_node selectNodes "./value\[@n='Ay'\]"]] + set Az [write::getValueByNode [$group_node selectNodes "./value\[@n='Az'\]"]] + set Bx [write::getValueByNode [$group_node selectNodes "./value\[@n='Bx'\]"]] + set By [write::getValueByNode [$group_node selectNodes "./value\[@n='By'\]"]] + set Bz [write::getValueByNode [$group_node selectNodes "./value\[@n='Bz'\]"]] + if {$Ax == "Constant"} { + set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='Vx'\]"]] + write::WriteString " IMPOSED_VELOCITY_X_VALUE $fix_vx" + } + if {$Ay == "Constant"} { + set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='Vy'\]"]] + write::WriteString " IMPOSED_VELOCITY_Y_VALUE $fix_vy" + } + if {$Az == "Constant"} { + set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='Vz'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_VELOCITY_Z_VALUE 0.0" + } else {write::WriteString " IMPOSED_VELOCITY_Z_VALUE $fix_vz"} + + } + if {$Bx == "Constant"} { + set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='AVx'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE 0.0" + } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_X_VALUE $fix_avx"} + + } + if {$By == "Constant"} { + set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='AVy'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE 0.0" + } else {write::WriteString " IMPOSED_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} + + } + if {$Bz == "Constant"} { + set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='AVz'\]"]] + write::WriteString " IMPOSED_ANGULAR_VELOCITY_Z_VALUE $fix_avz" + } + set VStart [write::getValueByNode [$group_node selectNodes "./value\[@n='VStart'\]"]] + set VEnd [write::getValueByNode [$group_node selectNodes "./value\[@n='VEnd'\]"]] + write::WriteString " VELOCITY_START_TIME $VStart" + write::WriteString " VELOCITY_STOP_TIME $VEnd" + + # initial conditions + set iAx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAx'\]"]] + set iAy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAy'\]"]] + set iAz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAz'\]"]] + set iBx [write::getValueByNode [$group_node selectNodes "./value\[@n='iBx'\]"]] + set iBy [write::getValueByNode [$group_node selectNodes "./value\[@n='iBy'\]"]] + set iBz [write::getValueByNode [$group_node selectNodes "./value\[@n='iBz'\]"]] + if {$iAx == "true"} { + set fix_vx [write::getValueByNode [$group_node selectNodes "./value\[@n='iVx'\]"]] + write::WriteString " INITIAL_VELOCITY_X_VALUE $fix_vx" + } + if {$iAy == "true"} { + set fix_vy [write::getValueByNode [$group_node selectNodes "./value\[@n='iVy'\]"]] + write::WriteString " INITIAL_VELOCITY_Y_VALUE $fix_vy" + } + if {$iAz == "true"} { + set fix_vz [write::getValueByNode [$group_node selectNodes "./value\[@n='iVz'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_VELOCITY_Z_VALUE 0.0" + } else {write::WriteString " INITIAL_VELOCITY_Z_VALUE $fix_vz"} + + } + if {$iBx == "true"} { + set fix_avx [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVx'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE 0.0" + } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_X_VALUE $fix_avx"} + + } + if {$iBy == "true"} { + set fix_avy [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVy'\]"]] + if {$::Model::SpatialDimension eq "2D"} {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE 0.0" + } else {write::WriteString " INITIAL_ANGULAR_VELOCITY_Y_VALUE $fix_avy"} + + } + if {$iBz == "true"} { + set fix_avz [write::getValueByNode [$group_node selectNodes "./value\[@n='iAVz'\]"]] + write::WriteString " INITIAL_ANGULAR_VELOCITY_Z_VALUE $fix_avz" + } + + # impose forces and moments + set ExternalForceX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceX'\]"]] + set ExternalForceY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceY'\]"]] + set ExternalForceZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalForceZ'\]"]] + set ExternalMomentX [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentX'\]"]] + set ExternalMomentY [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentY'\]"]] + set ExternalMomentZ [write::getValueByNode [$group_node selectNodes "./value\[@n='ExternalMomentZ'\]"]] + + if {$ExternalForceX == "true"} { + set FX [write::getValueByNode [$group_node selectNodes "./value\[@n='FX'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_X $FX" + } + if {$ExternalForceY == "true"} { + set FY [write::getValueByNode [$group_node selectNodes "./value\[@n='FY'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_Y $FY" + } + if {$ExternalForceZ == "true"} { + set FZ [write::getValueByNode [$group_node selectNodes "./value\[@n='FZ'\]"]] + write::WriteString " EXTERNAL_APPLIED_FORCE_Z $FZ" + } + if {$ExternalMomentX == "true"} { + set MX [write::getValueByNode [$group_node selectNodes "./value\[@n='MX'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_X $MX" + } + if {$ExternalMomentY == "true"} { + set MY [write::getValueByNode [$group_node selectNodes "./value\[@n='MY'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_Y $MY" + } + if {$ExternalMomentZ == "true"} { + set MZ [write::getValueByNode [$group_node selectNodes "./value\[@n='MZ'\]"]] + write::WriteString " EXTERNAL_APPLIED_MOMENT_Z $MZ" + } + #Hardcoded + write::WriteString " FIXED_MESH_OPTION $fixed_mesh_option" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " FREE_BODY_MOTION $free_body_motion" + } + + #Hardcoded + set is_ghost [write::getValueByNode [$group_node selectNodes "./value\[@n='IsGhost'\]"]] + if {$is_ghost == "true"} { + write::WriteString " IS_GHOST 1" + } else { + write::WriteString " IS_GHOST 0" + } + write::WriteString " IDENTIFIER [write::transformGroupName $group]" + + DefineFEMExtraConditions $group_node + + } + write::WriteString " End SubModelPartData" + + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] + write::WriteString " End SubModelPartNodes" + + write::WriteString "Begin SubModelPartConditions" + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + dict set gdict $group $f + GiD_WriteCalculationFile elements -sorted $gdict + write::WriteString "End SubModelPartConditions" + write::WriteString "" + write::WriteString "End SubModelPart" + write::WriteString "" } proc DEM::write::DefineFEMExtraConditions {group_node} { set GraphPrint [write::getValueByNode [$group_node selectNodes "./value\[@n='GraphPrint'\]"]] if {$GraphPrint == "true"} { - set GraphPrintval 1 + set GraphPrintval 1 } else { - set GraphPrintval 0 + set GraphPrintval 0 } write::WriteString " FORCE_INTEGRATION_GROUP $GraphPrintval" -} \ No newline at end of file +} From fceb979f2fcf5e19a4ecd0ceed57c630c85cb8ab Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 18:05:48 +0200 Subject: [PATCH 221/556] Material must be capital first --- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 3 --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index cbbeaaf74..cb98b487a 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -9,9 +9,6 @@ proc DEM::write::WriteMDPAWalls { } { # Nodal coordinates (only for Walls ) write::writeNodalCoordinatesOnGroups [GetWallsGroups] write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] - - WV wall_properties - WV phantom_wall_properties # Nodal conditions and conditions writeConditions $wall_properties diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 12d48ff36..87651e90c 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -126,7 +126,7 @@ proc DEM::write::GetMaterialsNodeList { } { set root [customlib::GetBaseRoot] - foreach mat [$root selectNodes "//value\[@n='material'\]"] { + foreach mat [$root selectNodes "//value\[@n='Material'\]"] { lappend materials $mat } return $materials From 80040d3d1f8d8a4fa7273d96f22c6655216a84ca Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 18:08:25 +0200 Subject: [PATCH 222/556] Variables instead of properties --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 87651e90c..3a1cd3947 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -14,7 +14,7 @@ proc DEM::write::getDEMMaterialsDict { } { dict set mat material_name $mat_name set material_xp "[spdAux::getRoute [GetAttribute materials_un]]/blockdata\[@name='$mat_name'\]" foreach param [[customlib::GetBaseRoot] selectNodes "$material_xp/value"] { - dict set mat properties [$param @n] [write::getValueByNode $param] + dict set mat Variables [$param @n] [write::getValueByNode $param] } lappend materials_list $mat lappend processed_mats $mat_name @@ -34,7 +34,7 @@ proc DEM::write::getDEMMaterialsDict { } { set param_name [$param @n] if {$param_name eq "ConstitutiveLaw"} {set param_name "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME"} if {$param_name ni [list MATERIAL_A MATERIAL_B]} { - dict set mat_rel properties $param_name [write::getValueByNode $param] + dict set mat_rel Variables $param_name [write::getValueByNode $param] } } lappend material_relations_list $mat_rel @@ -43,16 +43,12 @@ proc DEM::write::getDEMMaterialsDict { } { # Submodelpart - material assignation set assignation_table_list [list ] set gnodes [[customlib::GetBaseRoot] selectNodes "//condition/group"] - WV gnodes foreach gnode $gnodes { set mat_child [$gnode selectNodes "value\[@n='Material'\]"] - WV mat_child if {$mat_child ne ""} { set mat_name [write::getValueByNode $mat_child] set group_name [write::GetWriteGroupName [$gnode @n]] set cond_name [[$gnode parent] @n] - WV cond_name - WV group_name set submodelpart_id [write::getSubModelPartId $cond_name $group_name] lappend assignation_table_list [list $submodelpart_id $mat_name] } From 670e8339e83c760b00562b2e636b3834be4101d0 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 22:02:14 +0200 Subject: [PATCH 223/556] missing todos --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 3a1cd3947..a494f659a 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -1,4 +1,8 @@ proc DEM::write::getDEMMaterialsDict { } { + # TODO: Add material_id in materials + # TODO: Add material_ids_list in material_relations + # TODO: Add SpheresPart RigidFacePart DEMInletPart in material_assignation_table + # TODO: Remove properties in mdpas ? Check with MA. Probably remove material properties but check the process properties # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO # print COMPUTE_WEAR as false always, too (temporal fix) From da6d73e9fe321ce9029d2051dd42fc4279421f67 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 4 May 2021 22:03:46 +0200 Subject: [PATCH 224/556] missing todos --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index a494f659a..39f22e21e 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -3,6 +3,7 @@ proc DEM::write::getDEMMaterialsDict { } { # TODO: Add material_ids_list in material_relations # TODO: Add SpheresPart RigidFacePart DEMInletPart in material_assignation_table # TODO: Remove properties in mdpas ? Check with MA. Probably remove material properties but check the process properties + # TODO: Check 2d dem fem wall is written twice, also as phantom # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO # print COMPUTE_WEAR as false always, too (temporal fix) From d1563c9d741cdc2a01e92c3e66af1d51c6ccba0c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 12:07:01 +0200 Subject: [PATCH 225/556] delete old comments --- .../Writing/WriteProjectParameters.tcl | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index cd9662e48..b7cc696c2 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -1,27 +1,3 @@ - -# proc write::dict2json {dictVal} { -# # XXX: Currently this API isn't symmetrical, as to create proper -# # XXX: JSON text requires type knowledge of the input data -# set json "" -# dict for {key val} $dictVal { -# # key must always be a string, val may be a number, string or -# # bare word (true|false|null) -# if {0 && ![string is double -strict $val] && ![regexp {^(?:true|false|null)$} $val]} { -# set val "\"$val\"" -# } -# if {[isDict $val]} { -# set val [dict2json $val] -# set val "\[${val}\]" -# } else { -# set val \"$val\" -# } -# append json "\"$key\": $val," \n -# } -# if {[string range $json end-1 end] eq ",\n"} {set json [string range $json 0 end-2]} -# return "\{${json}\}" -# } - - package require json::write proc write::json2dict {JSONtext} { From e1561247ff0f8f97f49740b227a0dc35938ae32c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 12:34:52 +0200 Subject: [PATCH 226/556] material_ids in system --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 39f22e21e..16e4be7f0 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -9,20 +9,23 @@ proc DEM::write::getDEMMaterialsDict { } { # print COMPUTE_WEAR as false always, too (temporal fix) # While looping, create the assignation_table_list set materials_node_list [DEM::write::GetMaterialsNodeList] - set materials_list [list ] - set processed_mats [list ] + set processed_mats [dict create ] + + set matid 0 foreach mat_node $materials_node_list { set mat_name [write::getValueByNode $mat_node] - if {$mat_name ni $processed_mats} { + if {$mat_name ni [dict keys $processed_mats]} { + incr matid set mat [dict create] dict set mat material_name $mat_name + dict set mat material_id $matid set material_xp "[spdAux::getRoute [GetAttribute materials_un]]/blockdata\[@name='$mat_name'\]" foreach param [[customlib::GetBaseRoot] selectNodes "$material_xp/value"] { dict set mat Variables [$param @n] [write::getValueByNode $param] } lappend materials_list $mat - lappend processed_mats $mat_name + dict set processed_mats $mat_name $matid } } @@ -35,6 +38,7 @@ proc DEM::write::getDEMMaterialsDict { } { set mat_a [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_A'\]"]] set mat_b [write::getValueByNode [$mat_rel_node selectNodes "./value\[@n = 'MATERIAL_B'\]"]] dict set mat_rel material_names_list [list $mat_a $mat_b] + dict set mat_rel material_ids_list [list [dict get $processed_mats $mat_a] [dict get $processed_mats $mat_b]] foreach param [$mat_rel_node selectNodes "./value"] { set param_name [$param @n] if {$param_name eq "ConstitutiveLaw"} {set param_name "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME"} From f8e4978df3417073ef41cd3dc8a35d89799b05d1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 12:50:14 +0200 Subject: [PATCH 227/556] walls are 2 times in 2d --- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index cb98b487a..d66644c37 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -8,11 +8,15 @@ proc DEM::write::WriteMDPAWalls { } { # Nodal coordinates (only for Walls ) write::writeNodalCoordinatesOnGroups [GetWallsGroups] - write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] + if {$::Model::SpatialDimension ne "2D"} { + write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] + } # Nodal conditions and conditions writeConditions $wall_properties - writePhantomConditions $phantom_wall_properties + if {$::Model::SpatialDimension ne "2D"} { + writePhantomConditions $phantom_wall_properties + } # SubmodelParts writeWallConditionMeshes @@ -281,8 +285,10 @@ proc DEM::write::writeWallConditionMeshes { } { writeWallConditionMesh $group "DEM-FEM-Wall" } - foreach group [GetPhantomWallsGroups] { - writeWallConditionMesh $group "Phantom-Wall" + if {$::Model::SpatialDimension ne "2D"} { + foreach group [GetPhantomWallsGroups] { + writeWallConditionMesh $group "Phantom-Wall" + } } } From f2c61fc0dedb725051f913590e47bcef2fad72cf Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 12:50:24 +0200 Subject: [PATCH 228/556] modelpart parent --- kratos.gid/apps/DEM/write/writeMaterials.tcl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 16e4be7f0..30fcf5d63 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -59,7 +59,8 @@ proc DEM::write::getDEMMaterialsDict { } { set group_name [write::GetWriteGroupName [$gnode @n]] set cond_name [[$gnode parent] @n] set submodelpart_id [write::getSubModelPartId $cond_name $group_name] - lappend assignation_table_list [list $submodelpart_id $mat_name] + set modelpart_parent [DEM::write::GetModelPartParentNameFromGroup $group_name] + lappend assignation_table_list [list ${modelpart_parent}.${submodelpart_id} $mat_name] } } @@ -124,6 +125,13 @@ proc DEM::write::getDEMMaterialsDict { } { # ] #} +proc DEM::write::GetModelPartParentNameFromGroup {group} { + set model_part_parent SpheresPart + if {$group in [DEM::write::GetWallsGroups]} {set model_part_parent "RigidFacePart"} + if {$group in [DEM::write::GetInletGroups]} {set model_part_parent "DEMInletPart"} + return $model_part_parent +} + proc DEM::write::GetMaterialsNodeList { } { # Dem needs more material information than default From 78d3b6ac6aa6168239c129e3c70d8db401082801 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 13:21:38 +0200 Subject: [PATCH 229/556] dont print properties in mdpa --- kratos.gid/apps/DEM/write/write.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 63 +++++++++++-------- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 9 +++ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 54162d828..bd97cac5d 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -11,7 +11,7 @@ proc DEM::write::Init { } { set writeAttributes [dict create] SetAttribute validApps [list "DEM"] SetAttribute writeCoordinatesByGroups 1 - SetAttribute properties_location mdpa + SetAttribute properties_location json SetAttribute parts_un DEMParts SetAttribute materials_un DEMMaterials SetAttribute conditions_un DEMConditions diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 2e9798134..45cedf4da 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -1,7 +1,6 @@ proc DEM::write::WriteMDPAInlet { } { # Headers write::writeModelPartData - writeMaterialsInlet # Nodal coordinates (only for DEM Parts ) @@ -18,16 +17,19 @@ proc DEM::write::WriteMDPAInlet { } { copyClusterFiles } -proc DEM::write::GetInletGroups { } { - set groups [list ] - - set condition_name Inlet +proc DEM::write::GetInletConditionXpath { } { + set condition_name Inlet if {$::Model::SpatialDimension eq "2D"} { set condition_name Inlet2D } set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" + return $xp1 +} + +proc DEM::write::GetInletGroups { } { + set groups [list ] - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetInletConditionXpath]] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] } @@ -638,6 +640,13 @@ proc DEM::write::writeInletMeshes-old { } { } proc DEM::write::writeMaterialsInlet { } { + # if materials are written in json -> write property 1 empty and go away + if {[GetAttribute properties_location] eq "json"} { + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" + } + variable inletProperties variable last_property_id if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Inlet2D'\]/group" @@ -653,24 +662,28 @@ proc DEM::write::writeMaterialsInlet { } { set printable [list PARTICLE_DENSITY YOUNG_MODULUS POISSON_RATIO FRICTION PARTICLE_COHESION COEFFICIENT_OF_RESTITUTION PARTICLE_MATERIAL ROLLING_FRICTION ROLLING_FRICTION_WITH_WALLS PARTICLE_SPHERICITY DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME] foreach group [dict keys $inletProperties] { - write::WriteString "Begin Properties [dict get $inletProperties $group MID] // Inlet group: [write::GetWriteGroupName $group]" - set DEM_D_law "DEM_D_Hertz_viscous_Coulomb" - if {$::Model::SpatialDimension eq "2D"} { - set DEM_D_law "${DEM_D_law}2D" - } - - dict set inletProperties $group DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME $DEM_D_law - dict set inletProperties $group DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME DEMContinuumConstitutiveLaw - foreach {prop val} [dict get $inletProperties $group] { - if {$prop in $printable} { - if {$prop eq "FRICTION"} { - set propvalue [expr {tan($val)}] - write::WriteString " FRICTION $propvalue" - } else { - write::WriteString " $prop $val" - } - } - } - write::WriteString "End Properties\n" + set DEM_D_law "DEM_D_Hertz_viscous_Coulomb" + if {$::Model::SpatialDimension eq "2D"} { + set DEM_D_law "${DEM_D_law}2D" + } + + dict set inletProperties $group DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME $DEM_D_law + dict set inletProperties $group DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME DEMContinuumConstitutiveLaw + if {[dict exists $inletProperties $group FRICTION]} { + set val [dict get $inletProperties $group FRICTION] + dict set inletProperties $group $prop [expr {tan($val)}] + } + } + if {[GetAttribute properties_location] eq "mdpa"} { + foreach group [dict keys $inletProperties] { + write::WriteString "Begin Properties [dict get $inletProperties $group MID] // Inlet group: [write::GetWriteGroupName $group]" + + foreach {prop val} [dict get $inletProperties $group] { + if {$prop in $printable} { + write::WriteString " $prop $val" + } + } + write::WriteString "End Properties\n" + } } } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 9b352ee65..ffd2004c3 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -8,6 +8,7 @@ proc DEM::write::WriteMDPAParts { } { # Materials writeMaterialsParts + # Nodal coordinates (only for DEM Parts ) write::writeNodalCoordinatesOnParts @@ -427,6 +428,14 @@ proc DEM::write::GetSpheresGroups { } { proc DEM::write::writeMaterialsParts { } { + # if materials are written in json -> write property 0 empty and go away + if {[GetAttribute properties_location] eq "json"} { + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" + return + } + variable partsProperties #TODO: check this nonsense conditions/parts ?? set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Parts'\]/group" From 1b48671710c6493a0396a94f86105cac2db0b29e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 16:55:22 +0200 Subject: [PATCH 230/556] Changin old materials for new properties. Unfinished --- kratos.gid/apps/DEM/write/write.tcl | 12 ++- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 61 ++++--------- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 63 ++++---------- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 85 +++++-------------- kratos.gid/apps/DEM/write/writeMaterials.tcl | 4 +- kratos.gid/apps/DEM/xml/Processes.xml | 8 +- kratos.gid/scripts/Writing/WriteMaterials.tcl | 5 ++ 7 files changed, 77 insertions(+), 161 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index bd97cac5d..5f9aec595 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -1,6 +1,8 @@ namespace eval DEM::write { variable writeAttributes + variable partsProperties variable inletProperties + variable wallsProperties variable last_property_id variable delete_previous_mdpa variable restore_ov @@ -19,9 +21,16 @@ proc DEM::write::Init { } { SetAttribute materials_file "MaterialsDEM.json" SetAttribute main_script_file "KratosDEMAnalysis.py" + variable partsProperties + set partsProperties [dict create] + variable inletProperties set inletProperties [dict create] + variable wallsProperties + set wallsProperties [dict create] + + variable last_property_id set last_property_id 0 @@ -53,6 +62,7 @@ proc DEM::write::writeModelPartEvent { } { catch {file delete -force [file join [write::GetConfigurationAttribute dir] "[Kratos::GetModelName].mdpa"]} } + # MDPA Parts write::OpenFile "[Kratos::GetModelName]DEM.mdpa" WriteMDPAParts write::CloseFile @@ -67,7 +77,7 @@ proc DEM::write::writeModelPartEvent { } { WriteMDPAWalls write::CloseFile - # MDPA Walls + # MDPA Clusters write::OpenFile "[Kratos::GetModelName]DEM_Clusters.mdpa" WriteMDPAClusters write::CloseFile diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 45cedf4da..6f8eed1b8 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -1,6 +1,10 @@ proc DEM::write::WriteMDPAInlet { } { # Headers write::writeModelPartData + # process materials + DEM::write::processInletMaterials + + # Properties section writeMaterialsInlet # Nodal coordinates (only for DEM Parts ) @@ -640,50 +644,17 @@ proc DEM::write::writeInletMeshes-old { } { } proc DEM::write::writeMaterialsInlet { } { - # if materials are written in json -> write property 1 empty and go away - if {[GetAttribute properties_location] eq "json"} { - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::WriteString "" - } + + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" - variable inletProperties - variable last_property_id - if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Inlet2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Inlet'\]/group" - } - set old_mat_dict $::write::mat_dict - set ::write::mat_dict [dict create] - write::processMaterials $xp1 $DEM::write::last_property_id - set DEM::write::last_property_id [expr $last_property_id + [dict size $::write::mat_dict]] - set inletProperties $::write::mat_dict - set ::write::mat_dict $old_mat_dict - - set printable [list PARTICLE_DENSITY YOUNG_MODULUS POISSON_RATIO FRICTION PARTICLE_COHESION COEFFICIENT_OF_RESTITUTION PARTICLE_MATERIAL ROLLING_FRICTION ROLLING_FRICTION_WITH_WALLS PARTICLE_SPHERICITY DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME] - - foreach group [dict keys $inletProperties] { - set DEM_D_law "DEM_D_Hertz_viscous_Coulomb" - if {$::Model::SpatialDimension eq "2D"} { - set DEM_D_law "${DEM_D_law}2D" - } - - dict set inletProperties $group DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME $DEM_D_law - dict set inletProperties $group DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME DEMContinuumConstitutiveLaw - if {[dict exists $inletProperties $group FRICTION]} { - set val [dict get $inletProperties $group FRICTION] - dict set inletProperties $group $prop [expr {tan($val)}] - } - } - if {[GetAttribute properties_location] eq "mdpa"} { - foreach group [dict keys $inletProperties] { - write::WriteString "Begin Properties [dict get $inletProperties $group MID] // Inlet group: [write::GetWriteGroupName $group]" - - foreach {prop val} [dict get $inletProperties $group] { - if {$prop in $printable} { - write::WriteString " $prop $val" - } - } - write::WriteString "End Properties\n" - } - } +} + +proc DEM::write::processInletMaterials { } { + variable inletProperties + + set inlet_xpath [DEM::write::GetInletConditionXpath] + set inletProperties [write::processMaterials $inlet_xpath] + WV inletProperties } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index ffd2004c3..98293d55d 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -1,12 +1,11 @@ proc DEM::write::WriteMDPAParts { } { - variable last_property_id - # Prepare properties - write::processMaterials "" $last_property_id - set last_property_id [expr $last_property_id + [dict size $::write::mat_dict]] # Headers write::writeModelPartData + + # Process properties + DEM::write::processPartMaterials - # Materials + # Write Materials writeMaterialsParts @@ -110,7 +109,7 @@ proc DEM::write::GetDEMGroupsInitialC { } { proc DEM::write::GetDEMGroupsBoundayC { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" + if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" } else {set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp4] { set groupid [$group @n] @@ -121,7 +120,7 @@ proc DEM::write::GetDEMGroupsBoundayC { } { proc DEM::write::GetNodesForGraphs { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" + if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" } else {set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp5] { set groupid [$group @n] @@ -405,7 +404,7 @@ proc DEM::write::GetSpheresGroupsListInConditions { } { proc DEM::write::GetSpheresGroups { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" + if {$::Model::SpatialDimension eq "2D"} { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" } else {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { set groupid [$group @n] @@ -427,44 +426,18 @@ proc DEM::write::GetSpheresGroups { } { } -proc DEM::write::writeMaterialsParts { } { - # if materials are written in json -> write property 0 empty and go away - if {[GetAttribute properties_location] eq "json"} { - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::WriteString "" - return - } - +proc DEM::write::processPartMaterials { } { variable partsProperties - #TODO: check this nonsense conditions/parts ?? - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Parts'\]/group" - set partsProperties $::write::mat_dict - #set ::write::mat_dict [dict create] - #write::processMaterials $xp1 - #set partsProperties $::write::mat_dict - #set ::write::mat_dict $old_mat_dict - # WV inletProperties - set printable [list PARTICLE_DENSITY YOUNG_MODULUS POISSON_RATIO FRICTION PARTICLE_COHESION COEFFICIENT_OF_RESTITUTION PARTICLE_MATERIAL ROLLING_FRICTION ROLLING_FRICTION_WITH_WALLS PARTICLE_SPHERICITY DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME ConstitutiveLaw] - foreach group [dict keys $partsProperties] { - if { [dict get $partsProperties $group APPID] eq "DEM"} { - write::WriteString "Begin Properties [dict get $partsProperties $group MID]" - dict set partsProperties $group DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME DEMContinuumConstitutiveLaw - foreach {prop val} [dict get $partsProperties $group] { - if {$prop in $printable} { - if {$prop eq "ConstitutiveLaw"} { - write::WriteString " DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME $val" - } elseif {$prop eq "FRICTION"} { - set propvalue [expr {tan($val)}] - write::WriteString " FRICTION $propvalue" - } else { - write::WriteString " $prop $val" - } - } - } - write::WriteString "End Properties\n" - } - } + write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart + set partsProperties [write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart] + WV partsProperties +} + +proc DEM::write::writeMaterialsParts { } { + + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" } proc DEM::write::PrepareCustomMeshedParts { } { diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index d66644c37..17089f944 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -3,7 +3,7 @@ proc DEM::write::WriteMDPAWalls { } { write::writeModelPartData # Material - set wall_properties [WriteRigidWallProperties] + set wall_properties [processRigidWallMaterials] set phantom_wall_properties [WritePhantomWallProperties] # Nodal coordinates (only for Walls ) @@ -25,65 +25,20 @@ proc DEM::write::WriteMDPAWalls { } { WriteWallCustomSmp } + +proc DEM::write::processRigidWallMaterials { } { + variable wallsProperties + set walls_xpath [DEM::write::GetRigidWallXPath] + set wallsProperties [write::processMaterials $walls_xpath] + +} proc DEM::write::WriteRigidWallProperties { } { - set wall_properties [dict create ] - set condition_name 'DEM-FEM-Wall' - set cnd [Model::getCondition $condition_name] - - if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = $condition_name\]/group" - } - - #set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall'\]/group" - set i $DEM::write::last_property_id - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - write::WriteString "Begin Properties $i" - #foreach {prop obj} [$cnd getAllInputs] { - # if {$prop in $print_list} { - # set v [write::getValueByNode [$group selectNodes "./value\[@n='$prop'\]"]] - # write::WriteString " $prop $v" - # } - #} - set friction_value [write::getValueByNode [$group selectNodes "./value\[@n='friction_angle'\]"]] - set pi $MathUtils::PI - set propvalue [expr {tan($friction_value*$pi/180.0)}] - write::WriteString " FRICTION $propvalue" - # write::WriteString " FRICTION [write::getValueByNode [$group selectNodes "./value\[@n='friction_coeff'\]"]]" - write::WriteString " WALL_COHESION [write::getValueByNode [$group selectNodes "./value\[@n='WallCohesion'\]"]]" - set compute_wear_bool [write::getValueByNode [$group selectNodes "./value\[@n='DEM_Wear'\]"]] - if {[write::isBooleanTrue $compute_wear_bool]} { - set compute_wear 1 - set severiy_of_wear [write::getValueByNode [$group selectNodes "./value\[@n='K_Abrasion'\]"]] - set impact_wear_severity [write::getValueByNode [$group selectNodes "./value\[@n='K_Impact'\]"]] - set brinell_hardness [write::getValueByNode [$group selectNodes "./value\[@n='H_Brinell'\]"]] - } else { - set compute_wear 0 - set severiy_of_wear 0.001 - set impact_wear_severity 0.001 - set brinell_hardness 200.0 - } - set rigid_structure_bool [write::getValueByNode [$group selectNodes "./value\[@n='RigidPlane'\]"]] - if {[write::isBooleanTrue $rigid_structure_bool]} { - set young_modulus [write::getValueByNode [$group selectNodes "./value\[@n='YoungModulus'\]"]] - set poisson_ratio [write::getValueByNode [$group selectNodes "./value\[@n='PoissonRatio'\]"]] - } else { - set young_modulus 1e20 - set poisson_ratio 0.25 - } - write::WriteString " COMPUTE_WEAR $compute_wear" - write::WriteString " SEVERITY_OF_WEAR $severiy_of_wear" - write::WriteString " IMPACT_WEAR_SEVERITY $impact_wear_severity" - write::WriteString " BRINELL_HARDNESS $brinell_hardness" - write::WriteString " YOUNG_MODULUS $young_modulus" - write::WriteString " POISSON_RATIO $poisson_ratio" - write::WriteString "End Properties" - set groupid [$group @n] - dict set wall_properties $groupid $i - incr DEM::write::last_property_id - } - write::WriteString "" + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" + + return $wall_properties } @@ -193,14 +148,18 @@ proc DEM::write::GetWallsGroups { } { return $groups } -proc DEM::write::GetRigidWallsGroups { } { - set groups [list ] - set condition_name "DEM-FEM-Wall" +proc DEM::write::GetRigidWallXPath { } { + set condition_name "DEM-FEM-Wall" if {$::Model::SpatialDimension eq "2D"} { set condition_name "DEM-FEM-Wall2D" } - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" +} + +proc DEM::write::GetRigidWallsGroups { } { + set groups [list ] + + foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetRigidWallXPath]] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] } diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 30fcf5d63..cd42a2114 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -1,9 +1,7 @@ proc DEM::write::getDEMMaterialsDict { } { - # TODO: Add material_id in materials - # TODO: Add material_ids_list in material_relations - # TODO: Add SpheresPart RigidFacePart DEMInletPart in material_assignation_table # TODO: Remove properties in mdpas ? Check with MA. Probably remove material properties but check the process properties # TODO: Check 2d dem fem wall is written twice, also as phantom + # TODO: Materials have more properties than expected. Write from properties variables, not from xml # Loop over parts, inlets and walls to list the materials to print. For each material used print: DENSITY, YOUNG_MODULUS, POISSON_RATIO # print COMPUTE_WEAR as false always, too (temporal fix) diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 41b82aa56..dfa8d98c9 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -106,7 +106,7 @@ - + @@ -240,7 +240,7 @@ - + diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index f14d9f7b7..4e89f9e43 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -1,7 +1,10 @@ +# This function stores in mat dict all the processed materials, and returns the new ones proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { variable mat_dict + set new_mats [dict create ] + set parts [GetConfigurationAttribute parts_un] set materials_un [GetConfigurationAttribute materials_un] set root [customlib::GetBaseRoot] @@ -82,8 +85,10 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { } } } + dict set new_mats $group [dict get $mat_dict $group] } } + return $new_mats } proc write::writeMaterials { {appid ""} {const_law_write_name ""}} { From 50150430877d791caf3d89ea5a4d4d5bfa59b695 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 5 May 2021 22:07:55 +0200 Subject: [PATCH 231/556] SOy incapaz de seguirle la pista a esta escritura --- kratos.gid/apps/DEM/write/write.tcl | 3 ++ kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 32 +++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 5f9aec595..e923dc3a9 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -3,6 +3,7 @@ namespace eval DEM::write { variable partsProperties variable inletProperties variable wallsProperties + variable phantomwallsProperties variable last_property_id variable delete_previous_mdpa variable restore_ov @@ -30,6 +31,8 @@ proc DEM::write::Init { } { variable wallsProperties set wallsProperties [dict create] + variable phantomwallsProperties + set phantomwallsProperties [dict create] variable last_property_id set last_property_id 0 diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 17089f944..22d3fa4f0 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -3,13 +3,15 @@ proc DEM::write::WriteMDPAWalls { } { write::writeModelPartData # Material - set wall_properties [processRigidWallMaterials] - set phantom_wall_properties [WritePhantomWallProperties] + set wall_properties [DEM::write::processRigidWallMaterials] + if {$::Model::SpatialDimension ne "2D"} { + set phantom_wall_properties [DEM::write::processPhantomWallMaterials] + } # Nodal coordinates (only for Walls ) - write::writeNodalCoordinatesOnGroups [GetWallsGroups] + write::writeNodalCoordinatesOnGroups [DEM::write::GetWallsGroups] if {$::Model::SpatialDimension ne "2D"} { - write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] + write::writeNodalCoordinatesOnGroups [DEM::write::GetWallsGroupsSmp] } # Nodal conditions and conditions @@ -30,8 +32,14 @@ proc DEM::write::processRigidWallMaterials { } { variable wallsProperties set walls_xpath [DEM::write::GetRigidWallXPath] set wallsProperties [write::processMaterials $walls_xpath] +} +proc DEM::write::processPhantomWallMaterials { } { + variable wallsProperties + set phantom_walls_xpath [DEM::write::GetPhantomWallXPath] + set phantomwallsProperties [write::processMaterials $phantom_walls_xpath] } + proc DEM::write::WriteRigidWallProperties { } { write::WriteString "Begin Properties 0" @@ -153,13 +161,20 @@ proc DEM::write::GetRigidWallXPath { } { if {$::Model::SpatialDimension eq "2D"} { set condition_name "DEM-FEM-Wall2D" } - return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" + return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" +} +proc DEM::write::GetPhantomWallXPath { } { + set condition_name "Phantom-Wall" + if {$::Model::SpatialDimension eq "2D"} { + set condition_name "Phantom-Wall2D" + } + return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" } proc DEM::write::GetRigidWallsGroups { } { set groups [list ] - foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetRigidWallXPath]] { + foreach group [[customlib::GetBaseRoot] selectNodes "[DEM::write::GetRigidWallXPath]/group"] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] } @@ -168,9 +183,8 @@ proc DEM::write::GetRigidWallsGroups { } { proc DEM::write::GetPhantomWallsGroups { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-FEM-Wall2D'\]/group" - } else { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'Phantom-Wall'\]/group"} - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + + foreach group [[customlib::GetBaseRoot] selectNodes "[DEM::write::GetPhantomWallXPath]/group"] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] } From 95399b1ffa35db965f5eeff6abf0147bf7d81794 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 6 May 2021 14:05:00 +0200 Subject: [PATCH 232/556] advances in material write --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 981 ++++++++---------- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 68 +- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 5 +- kratos.gid/scripts/Writing/WriteMaterials.tcl | 64 +- .../scripts/Writing/WriteSubModelPart.tcl | 7 +- 5 files changed, 531 insertions(+), 594 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 6f8eed1b8..afcc3149b 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -1,52 +1,53 @@ proc DEM::write::WriteMDPAInlet { } { # Headers write::writeModelPartData - # process materials - DEM::write::processInletMaterials - - # Properties section + + # process materials + DEM::write::processInletMaterials + + # Properties section writeMaterialsInlet - + # Nodal coordinates (only for DEM Parts ) write::writeNodalCoordinatesOnGroups [GetInletGroups] - + # SubmodelParts if {$::Model::SpatialDimension eq "2D"} { - writeInletMeshes2D + writeInletMeshes2D } else { - writeInletMeshes - } - + writeInletMeshes + } + #Copy cluster files (.clu) copyClusterFiles } proc DEM::write::GetInletConditionXpath { } { - set condition_name Inlet + set condition_name Inlet if {$::Model::SpatialDimension eq "2D"} { - set condition_name Inlet2D + set condition_name Inlet2D } - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]/group" - return $xp1 + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" + return $xp1 } proc DEM::write::GetInletGroups { } { set groups [list ] - - foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetInletConditionXpath]] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + + foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetInletConditionXpath]/group] { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] } return $groups } proc DEM::write::copyClusterFiles { } { - + set dir [write::GetConfigurationAttribute dir] set src_dir $::Kratos::kratos_private(Path) set cluster_dir [file join $src_dir exec Kratos applications DEMApplication custom_elements custom_clusters] - + set two_lists_of_clusters [GetUsedClusters ] set pre_built_clusters_list [lindex $two_lists_of_clusters 0] set custom_clusters_list [lindex $two_lists_of_clusters 1] @@ -73,9 +74,9 @@ proc DEM::write::GetUsedClusters { } { set custom_clusters_list [list] foreach groupid [dict keys $inletProperties ] { if {[dict get $inletProperties $groupid InletElementType] in [list "Cluster2D" "Cluster3D"]} { - set inlet_element_type [dict get $inletProperties $groupid ClusterType] + set inlet_element_type [dict get $inletProperties $groupid Variables ClusterType] if { $inlet_element_type == "FromFile" } { - set cluster_full_path [dict get $inletProperties $groupid ClusterFilename] + set cluster_full_path [dict get $inletProperties $groupid Variables ClusterFilename] lappend custom_clusters_list $cluster_full_path } else { lappend clusters_list $inlet_element_type @@ -88,573 +89,511 @@ proc DEM::write::GetUsedClusters { } { proc DEM::write::writeInletMeshes { } { variable inletProperties - - set condition_name Inlet + + set condition_name Inlet foreach groupid [dict keys $inletProperties ] { - set what nodal - if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + set what nodal + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { set mid [write::AddSubmodelpart $condition_name $groupid] - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" - - set is_active [dict get $inletProperties $groupid SetActive] - if {$is_active=="No"} { - continue - } - - if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid InletMotionType] - set TableNumber 0 - set TableVelocityComponent 0 - if {$motion_type == "FromATable"} { - set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] - } - if {$motion_type=="LinearPeriodic"} { - - # Linear velocity - set velocity [dict get $inletProperties $groupid VelocityModulus] - lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" - - # Period - set periodic [dict get $inletProperties $groupid LinearPeriodic] - if {[write::isBooleanTrue $periodic]} { - #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - set period [dict get $inletProperties $groupid LinearPeriod] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set velocity [dict get $inletProperties $groupid AngularVelocityModulus] - lassign [split [dict get $inletProperties $groupid AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ - write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" - - - # Angular center of rotation - #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY oZ - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" - - # Angular Period - set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid AngularPeriod] - } else { - set angular_period 0.0 - } - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # # Interval - # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] - # lassign [write::getInterval $interval] ini end - # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } - # # write::WriteString " ${cond}_START_TIME $ini" - # write::WriteString " VELOCITY_START_TIME $ini" - # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" - # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } - # # write::WriteString " ${cond}_STOP_TIME $end" - # write::WriteString " VELOCITY_STOP_TIME $end" - # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] - set rigid_body_motion 1 - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - } else { - set rigid_body_motion 0 - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" - } - - set contains_clusters 0 - set random_orientation 0 - - - DefineInletConditions $inletProperties $groupid $mid $contains_clusters - - set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] - lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y velocity_Z - #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" - - set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] - write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - - - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid ClusterType] eq "SingleSphereCluster3D"} { - write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Excentricity]" - write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid ProbabilityDistributionOfExcentricity]" - write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid StandardDeviationOfExcentricity]" - } - } - - set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] - if {$type_of_measurement eq "Kilograms"} { - set mass_flow_option 1 - } else { - set mass_flow_option 0 - } - - if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] - write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" - } - - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - - # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem - if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] - write::WriteString " MASS_FLOW $inlet_mass_flow" - } - set inlet_start_time [dict get $inletProperties $groupid InletStartTime] - write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] - write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] - write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] - write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid StandardDeviation] - write::WriteString " STANDARD_DEVIATION $standard_deviation" - - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid RandomOrientation] == "Yes"} { - set random_orientation 1 - } else { - set random_orientation 0 - set orientation_x [dict get $inletProperties $groupid OrientationX] - set orientation_y [dict get $inletProperties $groupid OrientationY] - set orientation_z [dict get $inletProperties $groupid OrientationZ] - set orientation_w [dict get $inletProperties $groupid OrientationW] - write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" - } - write::WriteString " RANDOM_ORIENTATION $random_orientation" - } - - write::WriteString " End SubModelPartData" - # Write nodes - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString " End SubModelPart" - write::WriteString " " - - } - } - - if {$motion_type=="NotReady-FromATable"} { - set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" - set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] - GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" - set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] - set file_data [read $file_open] - close $file_open - GiD_File fprintf -nonewline $deminletchannel $file_data - GiD_File fprintf $deminletchannel "End Table" - GiD_File fprintf $deminletchannel "" - } - - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + dict set gdict $group_real_name $f + write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" + write::WriteString " Begin SubModelPartData" + + set is_active [dict get $inletProperties $groupid Variables SetActive] + if {$is_active=="No"} { + continue + } + + if {[write::isBooleanTrue $is_active]} { + set motion_type [dict get $inletProperties $groupid Variables InletMotionType] + set TableNumber 0 + set TableVelocityComponent 0 + if {$motion_type == "FromATable"} { + set TableNumber $mid + set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] + } + if {$motion_type=="LinearPeriodic"} { + + # Linear velocity + set velocity [dict get $inletProperties $groupid Variables VelocityModulus] + lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" + + # Period + set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] + if {[write::isBooleanTrue $periodic]} { + #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + set period [dict get $inletProperties $groupid Variables LinearPeriod] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + set velocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] + lassign [split [dict get $inletProperties $groupid Variables AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ + write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" + + + # Angular center of rotation + #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + lassign [split [dict get $inletProperties $groupid Variables CenterOfRotation] ","] oX oY oZ + write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" + + # Angular Period + set angular_periodic [dict get $inletProperties $groupid Variables ngularPeriodic] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] + } else { + set angular_period 0.0 + } + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # # Interval + # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] + # lassign [write::getInterval $interval] ini end + # if {![string is double $ini]} { + # set ini [write::getValue DEMTimeParameters StartTime] + # } + # # write::WriteString " ${cond}_START_TIME $ini" + # write::WriteString " VELOCITY_START_TIME $ini" + # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" + # if {![string is double $end]} { + # set end [write::getValue DEMTimeParameters EndTime] + # } + # # write::WriteString " ${cond}_STOP_TIME $end" + # write::WriteString " VELOCITY_STOP_TIME $end" + # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" + + + set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] + set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] + set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] + set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] + set rigid_body_motion 1 + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + } else { + set rigid_body_motion 0 + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + } + + set contains_clusters 0 + set random_orientation 0 + + + DefineInletConditions $inletProperties $groupid $mid $contains_clusters + + set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] + lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y velocity_Z + #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" + + set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] + write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" + + + if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties $groupid Variables ClusterType] eq "SingleSphereCluster3D"} { + write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Variables Excentricity]" + write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid Variables ProbabilityDistributionOfExcentricity]" + write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid Variables StandardDeviationOfExcentricity]" + } + } + + set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] + if {$type_of_measurement eq "Kilograms"} { + set mass_flow_option 1 + } else { + set mass_flow_option 0 + } + + if {$mass_flow_option == 0} { + set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] + write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" + } + + write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" + + # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem + if {$mass_flow_option == 1} { + set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] + write::WriteString " MASS_FLOW $inlet_mass_flow" + } + set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] + write::WriteString " INLET_START_TIME $inlet_start_time" + set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] + write::WriteString " INLET_STOP_TIME $inlet_stop_time" + set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] + write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" + set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] + write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" + set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] + write::WriteString " STANDARD_DEVIATION $standard_deviation" + + if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties $groupid Variables RandomOrientation] == "Yes"} { + set random_orientation 1 + } else { + set random_orientation 0 + set orientation_x [dict get $inletProperties $groupid Variables OrientationX] + set orientation_y [dict get $inletProperties $groupid Variables OrientationY] + set orientation_z [dict get $inletProperties $groupid Variables OrientationZ] + set orientation_w [dict get $inletProperties $groupid Variables OrientationW] + write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" + } + write::WriteString " RANDOM_ORIENTATION $random_orientation" + } + + write::WriteString " End SubModelPartData" + # Write nodes + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted $gdict + write::WriteString " End SubModelPartNodes" + write::WriteString " End SubModelPart" + write::WriteString " " + + } + } + + if {$motion_type=="NotReady-FromATable"} { + set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" + set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] + GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" + set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] + set file_data [read $file_open] + close $file_open + GiD_File fprintf -nonewline $deminletchannel $file_data + GiD_File fprintf $deminletchannel "End Table" + GiD_File fprintf $deminletchannel "" + } + + write::WriteString " Begin Table 0 TIME VELOCITY" + write::WriteString " 0.0 0.0" + write::WriteString " 1.0 0.0" + write::WriteString " End Table" + write::WriteString " " } } proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clusters} { set inlet_element_type SphericParticle3D - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { set contains_clusters 1 - if {[dict get $inletProperties $groupid ClusterType] eq "FromFile"} { - set custom_file_name [dict get $inletProperties $groupid ClusterFilename] + if {[dict get $inletProperties $groupid Variables ClusterType] eq "FromFile"} { + set custom_file_name [dict get $inletProperties $groupid Variables ClusterFilename] set only_name [file tail $custom_file_name] write::WriteString " CLUSTER_FILE_NAME $only_name" - + } else { - set cluster_file_name [dict get $inletProperties $groupid ClusterType] + set cluster_file_name [dict get $inletProperties $groupid Variables ClusterType] lassign [GetClusterFileNameAndReplaceInletElementType $cluster_file_name] inlet_element_type cluster_file_name write::WriteString " CLUSTER_FILE_NAME $cluster_file_name" } } - + write::WriteString " IDENTIFIER $mid" write::WriteString " INJECTOR_ELEMENT_TYPE SphericParticle3D" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" + write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" write::WriteString " CONTAINS_CLUSTERS $contains_clusters" # Change to SphericSwimmingParticle3D in FLUIDDEM interface } proc DEM::write::writeInletMeshes2D { } { variable inletProperties - - set condition_name Inlet2D - - foreach groupid [dict keys $inletProperties ] { - set what nodal - if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + + set condition_name Inlet2D + + foreach groupid [DEM::write::GetInletGroups] { + set what nodal + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { set mid [write::AddSubmodelpart $condition_name $groupid] - set group_real_name [write::GetWriteGroupName $groupid] - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" - - set is_active [dict get $inletProperties $groupid SetActive] - if {$is_active=="No"} { - continue - } - - if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid InletMotionType] - set TableNumber 0 - set TableVelocityComponent 0 - if {$motion_type == "FromATable"} { - set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid TableVelocityComponent] - } - if {$motion_type=="LinearPeriodic"} { - - # Linear velocity - set velocity [dict get $inletProperties $groupid VelocityModulus] - lassign [split [dict get $inletProperties $groupid DirectionVector] ","] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" - - - # Period - set periodic [dict get $inletProperties $groupid LinearPeriodic] - if {[write::isBooleanTrue $periodic]} { - #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - set period [dict get $inletProperties $groupid LinearPeriod] - } else { - set period 0.0 - } - write::WriteString " VELOCITY_PERIOD $period" - - # Angular velocity - #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set avelocity [dict get $inletProperties $groupid AngularVelocityModulus] - write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" - - # Angular center of rotation - #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $inletProperties $groupid CenterOfRotation] ","] oX oY - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" - - # Angular Period - set angular_periodic [dict get $inletProperties $groupid AngularPeriodic] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid AngularPeriod] - } else { - set angular_period 0.0 - } - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - - # # Interval - # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] - # lassign [write::getInterval $interval] ini end - # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } - # # write::WriteString " ${cond}_START_TIME $ini" - # write::WriteString " VELOCITY_START_TIME $ini" - # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" - # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } - # # write::WriteString " ${cond}_STOP_TIME $end" - # write::WriteString " VELOCITY_STOP_TIME $end" - # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - set LinearStartTime [dict get $inletProperties $groupid LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid AngularEndTime] - set rigid_body_motion 1 - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - } else { - set rigid_body_motion 0 - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" - } - - set contains_clusters 0 - set random_orientation 0 - - DefineInletConditions2D $inletProperties $groupid $mid $contains_clusters - - set velocity_modulus [dict get $inletProperties $groupid InVelocityModulus] - lassign [split [dict get $inletProperties $groupid InDirectionVector] ","] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" - - set max_deviation_angle [dict get $inletProperties $groupid VelocityDeviation] - write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - - set type_of_measurement [dict get $inletProperties $groupid TypeOfFlowMeasurement] - if {$type_of_measurement eq "Kilograms"} { - set mass_flow_option 1 - } else { - set mass_flow_option 0 - } - - if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid NumberOfParticles] - write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" - } - - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - - # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem - if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid InletMassFlow] - write::WriteString " MASS_FLOW $inlet_mass_flow" - } - set inlet_start_time [dict get $inletProperties $groupid InletStartTime] - write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid InletStopTime] - write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid ParticleDiameter] - write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid ProbabilityDistribution] - write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid StandardDeviation] - write::WriteString " STANDARD_DEVIATION $standard_deviation" - - write::WriteString " End SubModelPartData" - # Write nodes - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString " End SubModelPart" - write::WriteString " " - - } - } - - if {$motion_type=="NotReady-FromATable"} { - set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" - set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] - GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" - set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] - set file_data [read $file_open] - close $file_open - GiD_File fprintf -nonewline $deminletchannel $file_data - GiD_File fprintf $deminletchannel "End Table" - GiD_File fprintf $deminletchannel "" - } - - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " + set group_real_name [write::GetWriteGroupName $groupid] + set gdict [dict create] + set f "%10i\n" + set f [subst $f] + dict set gdict $group_real_name $f + write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" + write::WriteString " Begin SubModelPartData" + + set is_active [dict get $inletProperties $mid Variables SetActive] + if {$is_active=="No"} { + continue + } + + if {[write::isBooleanTrue $is_active]} { + set motion_type [dict get $inletProperties $groupid Variables InletMotionType] + set TableNumber 0 + set TableVelocityComponent 0 + if {$motion_type == "FromATable"} { + set TableNumber $mid + set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] + } + if {$motion_type=="LinearPeriodic"} { + + # Linear velocity + set velocity [dict get $inletProperties $groupid Variables VelocityModulus] + lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" + + + # Period + set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] + if {[write::isBooleanTrue $periodic]} { + #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] + set period [dict get $inletProperties $groupid Variables LinearPeriod] + } else { + set period 0.0 + } + write::WriteString " VELOCITY_PERIOD $period" + + # Angular velocity + #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] + set avelocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] + write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" + + # Angular center of rotation + #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ + lassign [split [dict get $inletProperties $groupid Variables enterOfRotation] ","] oX oY + write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" + + # Angular Period + set angular_periodic [dict get $inletProperties $groupid Variables AngularPeriodic] + if {[write::isBooleanTrue $angular_periodic]} { + set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] + } else { + set angular_period 0.0 + } + write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" + + # # Interval + # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] + # lassign [write::getInterval $interval] ini end + # if {![string is double $ini]} { + # set ini [write::getValue DEMTimeParameters StartTime] + # } + # # write::WriteString " ${cond}_START_TIME $ini" + # write::WriteString " VELOCITY_START_TIME $ini" + # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" + # if {![string is double $end]} { + # set end [write::getValue DEMTimeParameters EndTime] + # } + # # write::WriteString " ${cond}_STOP_TIME $end" + # write::WriteString " VELOCITY_STOP_TIME $end" + # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" + + + set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] + set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] + set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] + set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] + set rigid_body_motion 1 + write::WriteString " VELOCITY_START_TIME $LinearStartTime" + write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" + write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" + write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + } else { + set rigid_body_motion 0 + write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" + write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" + } + + set contains_clusters 0 + set random_orientation 0 + + DefineInletConditions2D $inletProperties $groupid $mid $contains_clusters + + set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] + lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y + lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy + write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" + + set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] + write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" + + set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] + if {$type_of_measurement eq "Kilograms"} { + set mass_flow_option 1 + } else { + set mass_flow_option 0 + } + + if {$mass_flow_option == 0} { + set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] + write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" + } + + write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" + + # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem + if {$mass_flow_option == 1} { + set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] + write::WriteString " MASS_FLOW $inlet_mass_flow" + } + set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] + write::WriteString " INLET_START_TIME $inlet_start_time" + set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] + write::WriteString " INLET_STOP_TIME $inlet_stop_time" + set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] + write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" + set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] + write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" + set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] + write::WriteString " STANDARD_DEVIATION $standard_deviation" + + write::WriteString " End SubModelPartData" + # Write nodes + write::WriteString " Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted $gdict + write::WriteString " End SubModelPartNodes" + write::WriteString " End SubModelPart" + write::WriteString " " + + } + } + + if {$motion_type=="NotReady-FromATable"} { + set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" + set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] + GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" + set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] + set file_data [read $file_open] + close $file_open + GiD_File fprintf -nonewline $deminletchannel $file_data + GiD_File fprintf $deminletchannel "End Table" + GiD_File fprintf $deminletchannel "" + } + + write::WriteString " Begin Table 0 TIME VELOCITY" + write::WriteString " 0.0 0.0" + write::WriteString " 1.0 0.0" + write::WriteString " End Table" + write::WriteString " " } } proc DEM::write::DefineInletConditions2D {inletProperties groupid mid contains_clusters} { - + set inlet_element_type CylinderPartDEMElement2D write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" + write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" + write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" write::WriteString " CONTAINS_CLUSTERS 0" # Change to SphericSwimmingParticle3D in FLUIDDEM interface } proc DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_type} { if {$inlet_element_type eq "LineCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "linecluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "linecluster3D.clu" } elseif {$inlet_element_type eq "RingCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ringcluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ringcluster3D.clu" } elseif {$inlet_element_type eq "Wheat5Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "wheat5cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "wheat5cluster3D.clu" } elseif {$inlet_element_type eq "SoyBeanCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "soybeancluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "soybeancluster3D.clu" } elseif {$inlet_element_type eq "CornKernel3Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "corn3cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "corn3cluster3D.clu" } elseif {$inlet_element_type eq "CornKernelCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "cornkernelcluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "cornkernelcluster3D.clu" } elseif {$inlet_element_type eq "Rock1Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "rock1cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "rock1cluster3D.clu" } elseif {$inlet_element_type eq "Rock2Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "rock2cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "rock2cluster3D.clu" } elseif {$inlet_element_type eq "Ballast1Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast1cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast1cluster3D.clu" } elseif {$inlet_element_type eq "Ballast1Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast1cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast1cluster3Dred.clu" } elseif {$inlet_element_type eq "Ballast2Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast2cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast2cluster3D.clu" } elseif {$inlet_element_type eq "Ballast2Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast2cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast2cluster3Dred.clu" } elseif {$inlet_element_type eq "Ballast3Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast3cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast3cluster3D.clu" } elseif {$inlet_element_type eq "Ballast3Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast3cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast3cluster3Dred.clu" } elseif {$inlet_element_type eq "Ballast4Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast4cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast4cluster3D.clu" } elseif {$inlet_element_type eq "Ballast4Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast4cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast4cluster3Dred.clu" } elseif {$inlet_element_type eq "Ballast5Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast5cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast5cluster3D.clu" } elseif {$inlet_element_type eq "Ballast5Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast5cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast5cluster3Dred.clu" } elseif {$inlet_element_type eq "Ballast6Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast6cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast6cluster3D.clu" } elseif {$inlet_element_type eq "Ballast6Cluster3Dred"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "ballast6cluster3Dred.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "ballast6cluster3Dred.clu" } elseif {$inlet_element_type eq "SoyBean3Cluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "soybean3cluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "soybean3cluster3D.clu" } elseif {$inlet_element_type eq "CapsuleCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "capsulecluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "capsulecluster3D.clu" } elseif {$inlet_element_type eq "SingleSphereCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "singlespherecluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "singlespherecluster3D.clu" } elseif {$inlet_element_type eq "Rock3RefinedCluster3D"} { - set inlet_element_type "Cluster3D" - set cluster_file_name "rock3refinedcluster3D.clu" + set inlet_element_type "Cluster3D" + set cluster_file_name "rock3refinedcluster3D.clu" } else { - error "No cluster found" + error "No cluster found" } - + return [list $inlet_element_type $cluster_file_name] } - - -proc DEM::write::writeInletMeshes-old { } { - variable inletProperties - foreach groupid [dict keys $inletProperties ] { - set what nodal - if {[write::getSubModelPartId $condition_name $groupid] eq 0} { - set mid [write::AddSubmodelpart $cond $group] - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - set group_real_name [write::GetWriteGroupName $groupid] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - write::WriteString " PROPERTIES_ID [dict get $inletProperties $groupid MID]" - write::WriteString " RIGID_BODY_MOTION 0" - write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " CONTAINS_CLUSTERS 0" - set velocity [dict get $inletProperties $groupid VELOCITY_MODULUS] - lassign [split [dict get $inletProperties $groupid DIRECTION_VECTOR] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" - write::WriteString " MAX_RAND_DEVIATION_ANGLE [dict get $inletProperties $groupid MAX_RAND_DEVIATION_ANGLE]" - set type_of_measurement [dict get $inletProperties $groupid FLOW_MEASUREMENT] - if {$type_of_measurement eq "Kilograms"} { - set number_of_particles 200.0 - set mass_flow_option 1 - set mass_flow [dict get $inletProperties $groupid INLET_NUMBER_OF_KILOGRAMS] - } else { - set number_of_particles [dict get $inletProperties $groupid INLET_NUMBER_OF_PARTICLES] - set mass_flow_option 0 - set mass_flow 0.5 - write::WriteString " INLET_NUMBER_OF_PARTICLES $number_of_particles" - } - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - write::WriteString " MASS_FLOW $mass_flow" - set interval [dict get $inletProperties $groupid Interval] - lassign [write::getInterval $interval] ini end - write::WriteString " INLET_START_TIME $ini" - if {$end in [list "End" "end"]} {set end [write::getValue DEMTimeParameters EndTime]} - write::WriteString " INLET_STOP_TIME $end" - set diameter [dict get $inletProperties $groupid DIAMETER] - write::WriteString " RADIUS [expr $diameter / 2]" - write::WriteString " PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid PROBABILITY_DISTRIBUTION]" - write::WriteString " STANDARD_DEVIATION [dict get $inletProperties $groupid STANDARD_DEVIATION]" - write::WriteString " RANDOM_ORIENTATION 1" - write::WriteString " ORIENTATION \[4\] (0.0, 0.0, 0.0, 1.0)" - - write::WriteString " End SubModelPartData" - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString "End SubModelPart" - } - } -} - proc DEM::write::writeMaterialsInlet { } { - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::WriteString "" - + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" + } proc DEM::write::processInletMaterials { } { - variable inletProperties - - set inlet_xpath [DEM::write::GetInletConditionXpath] - set inletProperties [write::processMaterials $inlet_xpath] - WV inletProperties + variable inletProperties + + set inlet_xpath [DEM::write::GetInletConditionXpath] + W [write::processMaterials $inlet_xpath/group] + set inletProperties [write::getPropertiesListByConditionXPath $inlet_xpath 0 DEMInletPart] + WV inletProperties } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 98293d55d..24cf35409 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -8,7 +8,6 @@ proc DEM::write::WriteMDPAParts { } { # Write Materials writeMaterialsParts - # Nodal coordinates (only for DEM Parts ) write::writeNodalCoordinatesOnParts write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart] @@ -26,7 +25,6 @@ proc DEM::write::WriteMDPAParts { } { # SubmodelParts write::writePartSubModelPart - writeDEMConditionMeshes # CustomSubmodelParts @@ -34,48 +32,6 @@ proc DEM::write::WriteMDPAParts { } { } - - -# TODO: Simulations do not run with this. Bad mdpa -proc DEM::write::WriteCustomDEMSmp-simulation_does_not_run { } { - foreach group [GetDEMGroupsCustomSubmodelpart] { - set groupid [write::GetWriteGroupName [$group @n]] - - # TODO: Missing write properties for Custom Submodelparts - - # Nodes are previously printed - # Print elements and connectivities - set elem [write::getValueByNode [$group selectNodes ".//value\[@n='Element']"] ] - write::writeGroupElementConnectivities $group $elem - - DEM::write::writeSphereRadiusOnGroup $group - - write::writeGroupSubModelPart DEM-CustomSmp $groupid Elements - } -} - - - -proc DEM::write::WriteCustomDEMSmp { } { - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_id [$group @n] - - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "DEM"} { - set mid [write::AddSubmodelpart $cond $group_id] - write::WriteString "Begin SubModelPart $mid \/\/ Custom SubModelPart. Group name: $group_id" - write::WriteString "Begin SubModelPartData" - write::WriteString "End SubModelPartData" - write::WriteString "Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group_id] [subst "%10i\n"]] - write::WriteString "End SubModelPartNodes" - write::WriteString "End SubModelPart" - write::WriteString "" - } - } -} - proc DEM::write::GetDEMGroupNamesCustomSubmodelpart { } { set groups [list ] foreach group [DEM::write::GetDEMGroupsCustomSubmodelpart] { @@ -276,7 +232,6 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" } - } DefineDEMExtraConditions $group_node $group @@ -428,7 +383,7 @@ proc DEM::write::GetSpheresGroups { } { proc DEM::write::processPartMaterials { } { variable partsProperties - write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart + #W [write::processMaterials] set partsProperties [write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart] WV partsProperties } @@ -470,4 +425,25 @@ proc DEM::write::RestoreCustomMeshedParts { } { } } set restore_ov [dict create] +} + + +proc DEM::write::WriteCustomDEMSmp { } { + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" + foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + set group_id [$group @n] + + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "DEM"} { + set mid [write::AddSubmodelpart $cond $group_id] + write::WriteString "Begin SubModelPart $mid \/\/ Custom SubModelPart. Group name: $group_id" + write::WriteString "Begin SubModelPartData" + write::WriteString "End SubModelPartData" + write::WriteString "Begin SubModelPartNodes" + GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group_id] [subst "%10i\n"]] + write::WriteString "End SubModelPartNodes" + write::WriteString "End SubModelPart" + write::WriteString "" + } + } } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 22d3fa4f0..56028a19b 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -31,7 +31,7 @@ proc DEM::write::WriteMDPAWalls { } { proc DEM::write::processRigidWallMaterials { } { variable wallsProperties set walls_xpath [DEM::write::GetRigidWallXPath] - set wallsProperties [write::processMaterials $walls_xpath] + set wallsProperties [write::getPropertiesListByConditionXPath $walls_xpath 0 RigidFacePart] } proc DEM::write::processPhantomWallMaterials { } { @@ -294,7 +294,8 @@ proc DEM::write::writeWallConditionMesh { group condition_type } { } else { lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" + } # set vX [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearVelocityX'\]"]] # Period diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 4e89f9e43..f827b94ae 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -19,15 +19,17 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set material_number [expr {$last_assigned_id == -1 ? [llength [dict keys $mat_dict] ] : $last_assigned_id }] foreach gNode [$root selectNodes $xp1] { set nodeApp [spdAux::GetAppIdFromNode $gNode] - set group [$gNode getAttribute n] + set group_name [write::GetWriteGroupName [$gNode @n]] + set cond_name [[$gNode parent] @n] + set submodelpart_id [write:GetSubModelPartName $cond_name $group_name] set material_name "material $material_number" - if { ![dict exists $mat_dict $group] } { + if { ![dict exists $mat_dict $submodelpart_id] } { incr material_number set mid $material_number - dict set mat_dict $group MID $material_number - dict set mat_dict $group APPID $nodeApp + dict set mat_dict $submodelpart_id MID $material_number + dict set mat_dict $submodelpart_id APPID $nodeApp catch { set element_node [$gNode selectNodes ".//value\[@n = 'Element'\]"] @@ -62,7 +64,7 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { # All the introduced values are translated to 'm' and 'kg' with the help of this function set value [gid_groups_conds::convert_value_to_default $valueNode] - dict set mat_dict $group $name $value + dict set mat_dict $submodelpart_id $name $value } } } else { @@ -81,11 +83,11 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { # All the introduced values are translated to 'm' and 'kg' with the help of this function set value [gid_groups_conds::convert_value_to_default $valueNode] - dict set mat_dict $group $name $value + dict set mat_dict $submodelpart_id $name $value } } } - dict set new_mats $group [dict get $mat_dict $group] + dict set new_mats $submodelpart_id [dict get $mat_dict $submodelpart_id] } } return $new_mats @@ -135,7 +137,7 @@ proc write::writePropertiesJsonFile {{parts_un ""} {fname "materials.json"} {wri write::CloseFile } -proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_name ""}} { +proc write::getPropertiesListByConditionXPath {cnd_xpath {write_claw_name "True"} {model_part_name ""}} { variable mat_dict variable properties_exclusion_list set exclusionList $properties_exclusion_list @@ -144,31 +146,33 @@ proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_nam set doc $gid_groups_conds::doc set root [$doc documentElement] - #set root [customlib::GetBaseRoot] - - set xp1 "[spdAux::getRoute $parts_un]/group" - if {[llength [$root selectNodes $xp1]] < 1} { - set xp1 "[spdAux::getRoute $parts_un]/condition/group" - } - foreach gNode [$root selectNodes $xp1] { + + # iterate over the groups of the conditions + foreach gNode [$root selectNodes "$cnd_xpath/group"] { + # Group name set group [get_domnode_attribute $gNode n] + # Condition name set cond_id [get_domnode_attribute [$gNode parent] n] - set sub_model_part [write::getSubModelPartId $cond_id $group] - if {$model_part_name ne ""} {set sub_model_part $model_part_name.$sub_model_part} - set sub_model_part [string trim $sub_model_part "."] - if { [dict exists $mat_dict $group] } { - set mid [dict get $mat_dict $group MID] + # We get the submodelpart name and the modelpart.submodelpart + set submodelpart_id [write:GetSubModelPartName $cond_id $group] + set submodelpart_fullname $submodelpart_id + if {$model_part_name ne ""} {set submodelpart_fullname $model_part_name.$submodelpart_id} + set submodelpart_id [string trim $submodelpart_id "."] + if { [dict exists $mat_dict $submodelpart_id] } { + set mid [dict get $mat_dict $submodelpart_id MID] set prop_dict [dict create] - dict set prop_dict "model_part_name" $sub_model_part + dict set prop_dict "model_part_name" $submodelpart_fullname dict set prop_dict "properties_id" $mid set constitutive_law_id "" - if {[dict exists $mat_dict $group ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $group ConstitutiveLaw]} + if {[dict exists $mat_dict $submodelpart_id ConstitutiveLaw ]} { + set constitutive_law_id [dict get $mat_dict $submodelpart_id ConstitutiveLaw] + } set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] set variables_dict [dict create] - foreach prop [dict keys [dict get $mat_dict $group] ] { + foreach prop [dict keys [dict get $mat_dict $submodelpart_id] ] { if {$prop ni $exclusionList} { - dict set variables_list $prop [getFormattedValue [dict get $mat_dict $group $prop]] + dict set variables_list $prop [getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] } } set material_dict [dict create] @@ -189,4 +193,16 @@ proc write::getPropertiesList {parts_un {write_claw_name "True"} {model_part_nam dict set props_dict properties $props return $props_dict +} + +proc write::getPropertiesList {unique_name {write_claw_name "True"} {model_part_name ""}} { + + set doc $gid_groups_conds::doc + set root [$doc documentElement] + + set xp1 "[spdAux::getRoute $unique_name]" + if {[llength [$root selectNodes $xp1/group]] < 1} { + set xp1 "[spdAux::getRoute $unique_name]/condition" + } + return [write::getPropertiesListByConditionXPath $xp1 $write_claw_name $model_part_name] } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl index c02c2b397..f0572d3ca 100644 --- a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl +++ b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl @@ -161,12 +161,17 @@ proc write::GetSubModelPartFromCondition { base_UN condition_id } { return $submodelpart_list } +proc write:GetSubModelPartName {condid group} { + set group_name [write::GetWriteGroupName $group] + set good_name [write::transformGroupName $group_name] + return "${condid}_${good_name}" +} proc write::AddSubmodelpart {condid group} { variable submodelparts + set mid [write:GetSubModelPartName $condid $group] set group_name [write::GetWriteGroupName $group] set good_name [write::transformGroupName $group_name] - set mid "${condid}_${good_name}" if {[write::getSubModelPartId $condid $group_name] eq 0} { dict set submodelparts [list $condid ${group_name}] $mid } From f177eb9fce347d27ce82d340c189eabc8976a1de Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 6 May 2021 16:57:24 +0200 Subject: [PATCH 233/556] fix inlet 2d file --- kratos.gid/apps/DEM/write/write.tcl | 11 +++ kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 89 +++++++++-------- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 98 +++++++++---------- 3 files changed, 106 insertions(+), 92 deletions(-) diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index e923dc3a9..f17305a40 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -160,4 +160,15 @@ proc DEM::write::Validate {} { return $err } +proc DEM::write::FindPropertiesBySubmodelpart {props subid } { + + set result "" + foreach prop [dict get $props properties] { + if { [dict get $prop model_part_name] eq $subid || [lindex [split [dict get $prop model_part_name] "."] end] eq $subid } { + set result $prop + } + } + return $result +} + DEM::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index afcc3149b..52ce582a0 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -72,14 +72,23 @@ proc DEM::write::GetUsedClusters { } { variable inletProperties set clusters_list [list ] set custom_clusters_list [list] - foreach groupid [dict keys $inletProperties ] { - if {[dict get $inletProperties $groupid InletElementType] in [list "Cluster2D" "Cluster3D"]} { - set inlet_element_type [dict get $inletProperties $groupid Variables ClusterType] - if { $inlet_element_type == "FromFile" } { - set cluster_full_path [dict get $inletProperties $groupid Variables ClusterFilename] - lappend custom_clusters_list $cluster_full_path - } else { - lappend clusters_list $inlet_element_type + set condition_name Inlet + if {$::Model::SpatialDimension eq "2D"} { + set condition_name Inlet2D + } + + foreach groupid [DEM::write::GetInletGroups] { + if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + set mid [write::AddSubmodelpart $condition_name $groupid] + set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] + if {[dict get $props Material Variables InletElementType] in [list "Cluster2D" "Cluster3D"]} { + set inlet_element_type [dict get $props Material Variables ClusterType] + if { $inlet_element_type == "FromFile" } { + set cluster_full_path [dict get $props Material Variables ClusterFilename] + lappend custom_clusters_list $cluster_full_path + } else { + lappend clusters_list $inlet_element_type + } } } } @@ -322,6 +331,7 @@ proc DEM::write::writeInletMeshes2D { } { set what nodal if {[write::getSubModelPartId $condition_name $groupid] eq 0} { set mid [write::AddSubmodelpart $condition_name $groupid] + set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] set group_real_name [write::GetWriteGroupName $groupid] set gdict [dict create] set f "%10i\n" @@ -330,34 +340,34 @@ proc DEM::write::writeInletMeshes2D { } { write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" write::WriteString " Begin SubModelPartData" - set is_active [dict get $inletProperties $mid Variables SetActive] + set is_active [dict get $props Material Variables SetActive] if {$is_active=="No"} { continue } if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid Variables InletMotionType] + set motion_type [dict get $props Material Variables InletMotionType] set TableNumber 0 set TableVelocityComponent 0 if {$motion_type == "FromATable"} { set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] + set TableVelocityComponent [dict get $props Material Variables TableVelocityComponent] } if {$motion_type=="LinearPeriodic"} { # Linear velocity - set velocity [dict get $inletProperties $groupid Variables VelocityModulus] - lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y + set velocity [dict get $props Material Variables VelocityModulus] + lassign [split [dict get $props Material Variables DirectionVector] ","] velocity_X velocity_Y lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" # Period - set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] + set periodic [dict get $props Material Variables LinearPeriodic] if {[write::isBooleanTrue $periodic]} { #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] - set period [dict get $inletProperties $groupid Variables LinearPeriod] + set period [dict get $props Material Variables LinearPeriod] } else { set period 0.0 } @@ -365,18 +375,18 @@ proc DEM::write::writeInletMeshes2D { } { # Angular velocity #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set avelocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] + set avelocity [dict get $props Material Variables AngularVelocityModulus] write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" # Angular center of rotation #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $inletProperties $groupid Variables enterOfRotation] ","] oX oY + lassign [split [dict get $props Material Variables enterOfRotation] ","] oX oY write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" # Angular Period - set angular_periodic [dict get $inletProperties $groupid Variables AngularPeriodic] + set angular_periodic [dict get $props Material Variables AngularPeriodic] if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] + set angular_period [dict get $props Material Variables AngularPeriod] } else { set angular_period 0.0 } @@ -399,10 +409,10 @@ proc DEM::write::writeInletMeshes2D { } { # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] + set LinearStartTime [dict get $props Material Variables LinearStartTime] + set LinearEndTime [dict get $props Material Variables LinearEndTime] + set AngularStartTime [dict get $props Material Variables AngularStartTime] + set AngularEndTime [dict get $props Material Variables AngularEndTime] set rigid_body_motion 1 write::WriteString " VELOCITY_START_TIME $LinearStartTime" write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" @@ -418,18 +428,18 @@ proc DEM::write::writeInletMeshes2D { } { set contains_clusters 0 set random_orientation 0 - DefineInletConditions2D $inletProperties $groupid $mid $contains_clusters + DefineInletConditions2D $props $mid $contains_clusters - set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] - lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y + set velocity_modulus [dict get $props Material Variables InVelocityModulus] + lassign [dict get $props Material Variables InDirectionVector] velocity_X velocity_Y lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" - set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] + set max_deviation_angle [dict get $props Material Variables VelocityDeviation] write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] + set type_of_measurement [dict get $props Material Variables TypeOfFlowMeasurement] if {$type_of_measurement eq "Kilograms"} { set mass_flow_option 1 } else { @@ -437,7 +447,7 @@ proc DEM::write::writeInletMeshes2D { } { } if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] + set inlet_number_of_particles [dict get $props Material Variables NumberOfParticles] write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" } @@ -445,18 +455,18 @@ proc DEM::write::writeInletMeshes2D { } { # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] + set inlet_mass_flow [dict get $props Material Variables InletMassFlow] write::WriteString " MASS_FLOW $inlet_mass_flow" } - set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] + set inlet_start_time [dict get $props Material Variables InletStartTime] write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] + set inlet_stop_time [dict get $props Material Variables InletStopTime] write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] + set particle_diameter [dict get $props Material Variables ParticleDiameter] write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] + set probability_distribution [dict get $props Material Variables ProbabilityDistribution] write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] + set standard_deviation [dict get $props Material Variables StandardDeviation] write::WriteString " STANDARD_DEVIATION $standard_deviation" write::WriteString " End SubModelPartData" @@ -491,12 +501,12 @@ proc DEM::write::writeInletMeshes2D { } { } -proc DEM::write::DefineInletConditions2D {inletProperties groupid mid contains_clusters} { +proc DEM::write::DefineInletConditions2D {props mid contains_clusters} { set inlet_element_type CylinderPartDEMElement2D write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" + write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $props Material Variables InletElementType]" + write::WriteString " ELEMENT_TYPE [dict get $props Material Variables InletElementType]" write::WriteString " CONTAINS_CLUSTERS 0" # Change to SphericSwimmingParticle3D in FLUIDDEM interface } @@ -591,9 +601,6 @@ proc DEM::write::writeMaterialsInlet { } { proc DEM::write::processInletMaterials { } { variable inletProperties - set inlet_xpath [DEM::write::GetInletConditionXpath] - W [write::processMaterials $inlet_xpath/group] set inletProperties [write::getPropertiesListByConditionXPath $inlet_xpath 0 DEMInletPart] - WV inletProperties } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 24cf35409..cc561201b 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -4,7 +4,7 @@ proc DEM::write::WriteMDPAParts { } { # Process properties DEM::write::processPartMaterials - + # Write Materials writeMaterialsParts @@ -14,19 +14,19 @@ proc DEM::write::WriteMDPAParts { } { write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC] write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundayC] write::writeNodalCoordinatesOnGroups [GetNodesForGraphs] - + # Element connectivities (Groups on STParts) PrepareCustomMeshedParts write::writeElementConnectivities RestoreCustomMeshedParts - + # Element radius writeSphereRadius - + # SubmodelParts write::writePartSubModelPart writeDEMConditionMeshes - + # CustomSubmodelParts WriteCustomDEMSmp; } @@ -65,7 +65,7 @@ proc DEM::write::GetDEMGroupsInitialC { } { proc DEM::write::GetDEMGroupsBoundayC { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" + if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" } else {set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp4] { set groupid [$group @n] @@ -76,7 +76,7 @@ proc DEM::write::GetDEMGroupsBoundayC { } { proc DEM::write::GetNodesForGraphs { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" + if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" } else {set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition'\]/group"} foreach group [[customlib::GetBaseRoot] selectNodes $xp5] { set groupid [$group @n] @@ -112,13 +112,13 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " Begin SubModelPartData // DEM-VelocityBC. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - + set prescribeMotion_flag [write::getValueByNode [$group_node selectNodes "./value\[@n='PrescribeMotion_flag'\]"]] if {[write::isBooleanTrue $prescribeMotion_flag]} { - + set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-VelocityBCMotion'\]"]] if {$motion_type == "LinearPeriodic"} { - + # Linear velocity set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='VelocityModulus'\]"]] lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='DirectionVector'\]"]] velocity_X velocity_Y velocity_Z @@ -130,14 +130,14 @@ proc DEM::write::writeDEMConditionMeshes { } { lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)"} - + # Period set periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriodic'\]"]] if {[write::isBooleanTrue $periodic]} { set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] } else {set period 0.0} write::WriteString " VELOCITY_PERIOD $period" - + # Angular velocity set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" @@ -146,12 +146,12 @@ proc DEM::write::writeDEMConditionMeshes { } { lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)"} - + # Angular center of rotation lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ if {$::Model::SpatialDimension eq "2D"} {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" } else {write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)"} - + # Angular Period set angular_periodic [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularPeriodic'\]"]] if {[write::isBooleanTrue $angular_periodic]} { @@ -160,7 +160,7 @@ proc DEM::write::writeDEMConditionMeshes { } { set angular_period 0.0 } write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - + set LinearStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearStartTime'\]"]] set LinearEndTime [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearEndTime'\]"]] set AngularStartTime [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularStartTime'\]"]] @@ -171,29 +171,29 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - - + + # # Interval # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] # lassign [write::getInterval $interval] ini end # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } + # set ini [write::getValue DEMTimeParameters StartTime] + # } # # write::WriteString " ${cond}_START_TIME $ini" # write::WriteString " VELOCITY_START_TIME $ini" # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } + # set end [write::getValue DEMTimeParameters EndTime] + # } # # write::WriteString " ${cond}_STOP_TIME $end" # write::WriteString " VELOCITY_STOP_TIME $end" # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - + + + } elseif {$motion_type == "FixedDOFs"} { set rigid_body_motion 0 - + # DOFS set Ax [write::getValueByNode [$group_node selectNodes "./value\[@n='Ax'\]"]] set Ay [write::getValueByNode [$group_node selectNodes "./value\[@n='Ay'\]"]] @@ -230,10 +230,10 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " VELOCITY_START_TIME $VStart" write::WriteString " VELOCITY_STOP_TIME $VEnd" write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - + } } - + DefineDEMExtraConditions $group_node $group write::WriteString " End SubModelPartData" write::WriteString " Begin SubModelPartNodes" @@ -251,10 +251,10 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " Begin SubModelPartData // DEM-VelocityIC. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - + set prescribeMotion_flag [write::getValueByNode [$group_node selectNodes "./value\[@n='PrescribeMotion_flag'\]"]] if {[write::isBooleanTrue $prescribeMotion_flag]} { - + # Linear velocity set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='InitialVelocityModulus'\]"]] lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='iDirectionVector'\]"]] velocity_X velocity_Y velocity_Z @@ -271,7 +271,7 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " INITIAL_VELOCITY_X_VALUE $vx" write::WriteString " INITIAL_VELOCITY_Y_VALUE $vy" write::WriteString " INITIAL_VELOCITY_Z_VALUE $vz"} - + # Angular velocity set avelocity [write::getValueByNode [$group_node selectNodes "./value\[@n='InitialAngularVelocityModulus'\]"]] if {$::Model::SpatialDimension eq "2D"} { @@ -289,7 +289,7 @@ proc DEM::write::writeDEMConditionMeshes { } { #Hardcoded write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" DefineDEMExtraConditions $group_node $group - + write::WriteString " End SubModelPartData" write::WriteString " Begin SubModelPartNodes" GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] @@ -305,9 +305,9 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " Begin SubModelPartData // DEM-GraphCondition. Group name: $group" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - + DefineDEMExtraConditions $group_node $group - + write::WriteString " End SubModelPartData" write::WriteString " Begin SubModelPartNodes" GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group] [subst "%10i\n"]] @@ -334,7 +334,7 @@ proc DEM::write::DefineDEMExtraConditions {group_node group} { proc DEM::write::GetSpheresGroupsListInConditions { } { set conds_groups_dict [dict create ] set groups [list ] - + # Get all the groups with spheres foreach group [GetSpheresGroups] { foreach surface [GiD_EntitiesGroups get $group nodes] { @@ -344,7 +344,7 @@ proc DEM::write::GetSpheresGroupsListInConditions { } { } } } - + # Find the relations condition -> group set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition" foreach cond [[customlib::GetBaseRoot] selectNodes $xp1] { @@ -359,24 +359,20 @@ proc DEM::write::GetSpheresGroupsListInConditions { } { proc DEM::write::GetSpheresGroups { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" - } else {set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group"} - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] - } - if {$::Model::SpatialDimension eq "2D"} { set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC2D'\]/group" - } else {set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC'\]/group"} - foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + + set conditions_list {DEM-VelocityBC DEM-VelocityIC DEM-GraphCondition} + if {$::Model::SpatialDimension eq "2D"} { + set conditions_list {DEM-VelocityBC2D DEM-VelocityIC2D DEM-GraphCondition2D} } - if {$::Model::SpatialDimension eq "2D"} { set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" - } else {set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition'\]/group"} - foreach group [[customlib::GetBaseRoot] selectNodes $xp3] { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] + + foreach condition $conditions_list { + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition'\]/group" + foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] + } } + return $groups } From b7bf2f7ab5cc233829f1e1aa97ea9c66a3e13340 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 6 May 2021 17:12:47 +0200 Subject: [PATCH 234/556] process inlet materials is mandatory --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 5 ++++- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 52ce582a0..e11853932 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -3,7 +3,7 @@ proc DEM::write::WriteMDPAInlet { } { write::writeModelPartData # process materials - DEM::write::processInletMaterials + processInletMaterials # Properties section writeMaterialsInlet @@ -332,6 +332,7 @@ proc DEM::write::writeInletMeshes2D { } { if {[write::getSubModelPartId $condition_name $groupid] eq 0} { set mid [write::AddSubmodelpart $condition_name $groupid] set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] + if {$props eq ""} {W "Error printing inlet $groupid"} set group_real_name [write::GetWriteGroupName $groupid] set gdict [dict create] set f "%10i\n" @@ -602,5 +603,7 @@ proc DEM::write::writeMaterialsInlet { } { proc DEM::write::processInletMaterials { } { variable inletProperties set inlet_xpath [DEM::write::GetInletConditionXpath] + write::processMaterials $inlet_xpath/group set inletProperties [write::getPropertiesListByConditionXPath $inlet_xpath 0 DEMInletPart] + } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index cc561201b..c7cda3174 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -379,9 +379,9 @@ proc DEM::write::GetSpheresGroups { } { proc DEM::write::processPartMaterials { } { variable partsProperties + # Materials for parts are already processed #W [write::processMaterials] set partsProperties [write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart] - WV partsProperties } proc DEM::write::writeMaterialsParts { } { From 220d4307f94c252eef4deef7cd55318e50ec7cc2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 6 May 2021 17:50:13 +0200 Subject: [PATCH 235/556] walls conditions --- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 101 ++++++++++-------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 56028a19b..e2bdff2fb 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -3,9 +3,9 @@ proc DEM::write::WriteMDPAWalls { } { write::writeModelPartData # Material - set wall_properties [DEM::write::processRigidWallMaterials] + DEM::write::processRigidWallMaterials if {$::Model::SpatialDimension ne "2D"} { - set phantom_wall_properties [DEM::write::processPhantomWallMaterials] + DEM::write::processPhantomWallMaterials } # Nodal coordinates (only for Walls ) @@ -13,11 +13,11 @@ proc DEM::write::WriteMDPAWalls { } { if {$::Model::SpatialDimension ne "2D"} { write::writeNodalCoordinatesOnGroups [DEM::write::GetWallsGroupsSmp] } - + # Nodal conditions and conditions - writeConditions $wall_properties + writeConditions if {$::Model::SpatialDimension ne "2D"} { - writePhantomConditions $phantom_wall_properties + writePhantomConditions } # SubmodelParts @@ -30,22 +30,24 @@ proc DEM::write::WriteMDPAWalls { } { proc DEM::write::processRigidWallMaterials { } { variable wallsProperties - set walls_xpath [DEM::write::GetRigidWallXPath] + set walls_xpath [DEM::write::GetRigidWallXPath] + write::processMaterials $walls_xpath/group set wallsProperties [write::getPropertiesListByConditionXPath $walls_xpath 0 RigidFacePart] } proc DEM::write::processPhantomWallMaterials { } { variable wallsProperties - set phantom_walls_xpath [DEM::write::GetPhantomWallXPath] + set phantom_walls_xpath [DEM::write::GetPhantomWallXPath] + write::processMaterials $phantom_walls_xpath/group set phantomwallsProperties [write::processMaterials $phantom_walls_xpath] } proc DEM::write::WriteRigidWallProperties { } { - - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::WriteString "" - + + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" + return $wall_properties } @@ -136,16 +138,14 @@ proc DEM::write::WriteWallCustomSmp { } { } -proc DEM::write::writeConditions { wall_properties } { - if {$::Model::SpatialDimension eq "2D"} {write::writeConditionsByGiDId DEMConditions DEM-FEM-Wall2D $wall_properties - } else {write::writeConditionsByGiDId DEMConditions DEM-FEM-Wall $wall_properties - } +proc DEM::write::writeConditions { } { + variable wallsProperties + write::writeConditionsByGiDId DEMConditions [GetRigidWallConditionName] $wallsProperties } proc DEM::write::writePhantomConditions { wall_properties } { - if {$::Model::SpatialDimension eq "2D"} {write::writeConditionsByGiDId DEMConditions DEM-FEM-Wall2D $wall_properties - } else {write::writeConditionsByGiDId DEMConditions Phantom-Wall $wall_properties - } + variable phantomwallsProperties + write::writeConditionsByGiDId DEMConditions [GetPhantomWallConditionName] $phantomwallsProperties } proc DEM::write::GetWallsGroups { } { @@ -156,24 +156,33 @@ proc DEM::write::GetWallsGroups { } { return $groups } -proc DEM::write::GetRigidWallXPath { } { +proc DEM::write::GetRigidWallConditionName {} { set condition_name "DEM-FEM-Wall" if {$::Model::SpatialDimension eq "2D"} { - set condition_name "DEM-FEM-Wall2D" - } - return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" + set condition_name "DEM-FEM-Wall2D" + } + return $condition_name } -proc DEM::write::GetPhantomWallXPath { } { +proc DEM::write::GetPhantomWallConditionName {} { set condition_name "Phantom-Wall" if {$::Model::SpatialDimension eq "2D"} { - set condition_name "Phantom-Wall2D" - } - return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" + set condition_name "Phantom-Wall2D" + } + return $condition_name +} + +proc DEM::write::GetRigidWallXPath { } { + set condition_name [GetRigidWallConditionName] + return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" +} +proc DEM::write::GetPhantomWallXPath { } { + set condition_name [GetPhantomWallConditionName] + return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" } proc DEM::write::GetRigidWallsGroups { } { set groups [list ] - + foreach group [[customlib::GetBaseRoot] selectNodes "[DEM::write::GetRigidWallXPath]/group"] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] @@ -253,34 +262,40 @@ proc DEM::write::GetConditionsGroups { } { } proc DEM::write::writeWallConditionMeshes { } { + variable wallsProperties + variable phantomwallsProperties + set condition_name [GetRigidWallConditionName] foreach group [GetRigidWallsGroups] { - writeWallConditionMesh $group "DEM-FEM-Wall" + set mid [write::AddSubmodelpart $condition_name $group] + set props [DEM::write::FindPropertiesBySubmodelpart $wallsProperties $mid] + writeWallConditionMesh $condition_name $group $props } if {$::Model::SpatialDimension ne "2D"} { + set condition_name [GetPhantomWallConditionName] foreach group [GetPhantomWallsGroups] { - writeWallConditionMesh $group "Phantom-Wall" + set mid [write::AddSubmodelpart $condition_name $group] + set props [DEM::write::FindPropertiesBySubmodelpart $phantomwallsProperties $mid] + writeWallConditionMesh $condition_name $group $props } } } -proc DEM::write::writeWallConditionMesh { group condition_type } { - - if {$::Model::SpatialDimension eq "2D"} { - set cond "DEM-FEM-Wall2D" - } else { - set cond $condition_type - } +proc DEM::write::writeWallConditionMesh { condition group props } { - set mid [write::AddSubmodelpart $cond $group] + set mid [write::AddSubmodelpart $condition $group] - write::WriteString "Begin SubModelPart $mid // $cond - group identifier: $group" - write::WriteString " Begin SubModelPartData // $cond. Group name: $group" - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$cond'\]/group\[@n = '$group'\]" + write::WriteString "Begin SubModelPart $mid // $condition - group identifier: $group" + write::WriteString " Begin SubModelPartData // $condition. Group name: $group" + set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition'\]/group\[@n = '$group'\]" set group_node [[customlib::GetBaseRoot] selectNodes $xp1] - set is_active [write::getValueByNode [$group_node selectNodes "./value\[@n='SetActive'\]"]] + W $condition + W $group + WV props + + set is_active [dict get $props Material Variables SetActive] if {[write::isBooleanTrue $is_active]} { set motion_type [write::getValueByNode [$group_node selectNodes "./value\[@n='DEM-ImposedMotion'\]"]] if {$motion_type == "LinearPeriodic"} { @@ -494,7 +509,7 @@ proc DEM::write::writeWallConditionMesh { group condition_type } { } else { write::WriteString " IS_GHOST 0" } - write::WriteString " IDENTIFIER [write::transformGroupName $group]" + write::WriteString " IDENTIFIER [write::transformGroupName $group]" DefineFEMExtraConditions $group_node From f2cd51292d3ceba509629d6f9556b3f9e5628a8e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 6 May 2021 18:09:19 +0200 Subject: [PATCH 236/556] restore missing paramters --- kratos.gid/apps/DEM/xml/Processes.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index dfa8d98c9..50de1f6d2 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -106,13 +106,14 @@ - + - - - - \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 100d8e412..3b3f8f181 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -15,7 +15,7 @@ proc CDEM::xml::Init { } { Model::getConditions Conditions.xml Model::getConditions "../../DEM/xml/Conditions.xml" Model::getConstitutiveLaws ConstitutiveLawsC.xml - Model::getMaterials MaterialsC.xml + Model::getMaterials "../../DEM/xml/Materials.xml" Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml } diff --git a/kratos.gid/apps/DEM/xml/Materials.xml b/kratos.gid/apps/DEM/xml/Materials.xml index 322b04810..ec2936e25 100644 --- a/kratos.gid/apps/DEM/xml/Materials.xml +++ b/kratos.gid/apps/DEM/xml/Materials.xml @@ -5,7 +5,6 @@ - @@ -15,7 +14,6 @@ - @@ -24,7 +22,6 @@ - @@ -33,7 +30,6 @@ - @@ -42,7 +38,6 @@ - @@ -51,7 +46,6 @@ - @@ -60,7 +54,6 @@ - From 00afee1273a668435c2f454f35afdd15e8a04d23 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 12:17:29 +0200 Subject: [PATCH 245/556] fixed example 3d --- kratos.gid/apps/DEM/examples/SpheresDrop.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl index 9baddb2dd..4a866028f 100644 --- a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl @@ -43,7 +43,7 @@ proc ::DEM::examples::DrawGeometrySpheresDrop { } { proc ::DEM::examples::AssignToTreeSpheresDrop { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props @@ -64,7 +64,7 @@ proc ::DEM::examples::AssignToTreeSpheresDrop { } { set DEMInlet "$DEMConditions/condition\[@n='Inlet'\]" set inletNode [customlib::AddConditionGroupOnXPath $DEMInlet "Inlet"] $inletNode setAttribute ov surface - set props [list material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] + set props [list Material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] spdAux::SetValuesOnBaseNode $inletNode $props @@ -72,7 +72,7 @@ proc ::DEM::examples::AssignToTreeSpheresDrop { } { set DEMClusterInlet "$DEMConditions/condition\[@n='Inlet'\]" set inletNode [customlib::AddConditionGroupOnXPath $DEMClusterInlet "ClusterInlet"] $inletNode setAttribute ov surface - set props [list material "DEM-DefaultMaterial" InletElementType "Cluster3D" ClusterType "Rock1Cluster3D" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,1.0"] + set props [list Material "DEM-DefaultMaterial" InletElementType "Cluster3D" ClusterType "Rock1Cluster3D" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,1.0"] spdAux::SetValuesOnBaseNode $inletNode $props From d49aea82dcab97756247b986b7133d48dc3b843c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 15:28:25 +0200 Subject: [PATCH 246/556] remove particle color --- kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl | 2 +- kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl | 2 +- kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl | 1 - kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 2 +- kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl | 2 +- kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl index c5c6bddac..2107d4370 100644 --- a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl @@ -38,7 +38,7 @@ proc ::CDEM::examples::DrawGeometryContSpheres { } { proc ::CDEM::examples::AssignToTreeContSpheres { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index 649d34fbd..88c50f98c 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -53,7 +53,7 @@ proc ::CDEM::examples::DrawGeometryContinuumDrop { } { proc ::CDEM::examples::AssignToTreeContinuumDrop { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 79f6ce226..20baf48fa 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -136,7 +136,6 @@ proc CDEM::write::writeMaterialsParts { } { POISSON_RATIO \ FRICTION \ COEFFICIENT_OF_RESTITUTION \ - PARTICLE_MATERIAL \ ROLLING_FRICTION \ ROLLING_FRICTION_WITH_WALLS \ CONTACT_SIGMA_MIN \ diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index ef533dfb1..d680cf1e8 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -53,7 +53,7 @@ proc ::DEM::examples::DrawGeometryCirclesDrop { } { proc ::DEM::examples::AssignToTreeCirclesDrop { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props diff --git a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl index 9f5f00adc..299e3f7cf 100644 --- a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl @@ -197,7 +197,7 @@ proc FluidDEM::examples::TreeAssignationCylinderInFlow3D {args} { proc ::FluidDEM::examples::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 ] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] foreach {prop val} $props { set propnode [$material_node selectNodes "./value\[@n = '$prop'\]"] diff --git a/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl b/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl index 1c05895a8..cdedcdf0d 100644 --- a/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl @@ -58,7 +58,7 @@ proc ::FluidDEM::examples::DrawGeometry { } { proc ::FluidDEM::examples::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 PARTICLE_MATERIAL 2 ] + set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 ] set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props From 6c61f2df30ddb42ce2de3f2ac0225a1fd51c6589 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 15:52:01 +0200 Subject: [PATCH 247/556] dont mantain 2 processes for the same --- kratos.gid/apps/DEM/xml/Conditions.xml | 2 +- kratos.gid/apps/DEM/xml/Processes.xml | 85 +---------------------- kratos.gid/apps/DEM/xml/XmlController.tcl | 8 ++- 3 files changed, 9 insertions(+), 86 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/Conditions.xml b/kratos.gid/apps/DEM/xml/Conditions.xml index 996dcf2e5..bcd6445b6 100644 --- a/kratos.gid/apps/DEM/xml/Conditions.xml +++ b/kratos.gid/apps/DEM/xml/Conditions.xml @@ -35,7 +35,7 @@ - + diff --git a/kratos.gid/apps/DEM/xml/Processes.xml b/kratos.gid/apps/DEM/xml/Processes.xml index 57e1f736d..bfdbff032 100644 --- a/kratos.gid/apps/DEM/xml/Processes.xml +++ b/kratos.gid/apps/DEM/xml/Processes.xml @@ -345,22 +345,6 @@ - - - @@ -374,7 +358,7 @@ - + @@ -389,83 +373,16 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 6302a93bd..a88f474e4 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -42,7 +42,13 @@ proc DEM::xml::CustomTree { args } { set custom_smp_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='DEM-CustomSmp'\]/value\[@n='AdvancedMeshingFeatures'\]" gid_groups_conds::setAttributes $custom_smp_xpath [list state hidden ] - # customlib::ProcessIncludes $::Kratos::kratos_private(Path) + # Inlet 2D or 3D special parameters + set 3dinlet_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='Inlet'\]/value\[@n='InletElementType'\]" + gid_groups_conds::setAttributes $3dinlet_xpath [list values "SphericParticle3D,Cluster3D,SingleSphereCluster" ] + set 2dinlet_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='Inlet2D'\]/value\[@n='InletElementType'\]" + gid_groups_conds::setAttributes $2dinlet_xpath [list values "CylinderParticle2D" ] + + # spdAux::parseRoutes spdAux::processDynamicNodes [customlib::GetBaseRoot] } From 2ee759f1965187ca08b0f3d0ed47a71eb8b4af63 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 17:39:41 +0200 Subject: [PATCH 248/556] some unification in inlet 2d 3d --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 430 +++++++++--------- 1 file changed, 220 insertions(+), 210 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index f9c217d6b..522e8d891 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -12,21 +12,24 @@ proc DEM::write::WriteMDPAInlet { } { write::writeNodalCoordinatesOnGroups [GetInletGroups] # SubmodelParts - if {$::Model::SpatialDimension eq "2D"} { - writeInletMeshes2D - } else { - writeInletMeshes - } + + writeInletMeshes + #Copy cluster files (.clu) copyClusterFiles } -proc DEM::write::GetInletConditionXpath { } { +proc DEM::write::GetInletConditionName { } { set condition_name Inlet if {$::Model::SpatialDimension eq "2D"} { set condition_name Inlet2D } + return $condition_name +} + +proc DEM::write::GetInletConditionXpath { } { + set condition_name [GetInletConditionName] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" return $xp1 } @@ -96,218 +99,226 @@ proc DEM::write::GetUsedClusters { } { } -proc DEM::write::writeInletMeshes { } { - variable inletProperties +# proc DEM::write::writeInletMeshes { } { +# variable inletProperties - set condition_name Inlet - foreach groupid [DEM::write::GetInletGroups] { - set what nodal - if {[write::getSubModelPartId $condition_name $groupid] eq 0} { - set mid [write::AddSubmodelpart $condition_name $groupid] - set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] - if {$props eq ""} {W "Error printing inlet $groupid"} - set group_real_name [write::GetWriteGroupName $groupid] - set gdict [dict create] - set f "%10i\n" - set f [subst $f] - dict set gdict $group_real_name $f - write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" - write::WriteString " Begin SubModelPartData" - WV inletProperties - set is_active [dict get $inletProperties $groupid Variables SetActive] - if {$is_active=="No"} { - continue - } +# set condition_name Inlet +# foreach groupid [DEM::write::GetInletGroups] { +# set what nodal +# if {[write::getSubModelPartId $condition_name $groupid] eq 0} { +# set mid [write::AddSubmodelpart $condition_name $groupid] +# set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] +# if {$props eq ""} {W "Error printing inlet $groupid"} +# set group_real_name [write::GetWriteGroupName $groupid] +# set gdict [dict create] +# set f "%10i\n" +# set f [subst $f] +# dict set gdict $group_real_name $f +# write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" +# write::WriteString " Begin SubModelPartData" +# WV inletProperties +# set is_active [dict get $inletProperties $groupid Variables SetActive] +# if {$is_active=="No"} { +# continue +# } - if {[write::isBooleanTrue $is_active]} { - set motion_type [dict get $inletProperties $groupid Variables InletMotionType] - set TableNumber 0 - set TableVelocityComponent 0 - if {$motion_type == "FromATable"} { - set TableNumber $mid - set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] - } - if {$motion_type=="LinearPeriodic"} { +# if {[write::isBooleanTrue $is_active]} { +# set motion_type [dict get $inletProperties $groupid Variables InletMotionType] +# set TableNumber 0 +# set TableVelocityComponent 0 +# if {$motion_type == "FromATable"} { +# set TableNumber $mid +# set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] +# } +# if {$motion_type=="LinearPeriodic"} { - # Linear velocity - set velocity [dict get $inletProperties $groupid Variables VelocityModulus] - lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" +# # Linear velocity +# set velocity [dict get $inletProperties $groupid Variables VelocityModulus] +# lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz +# write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" - # Period - set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] - set period 0.0 - if {[write::isBooleanTrue $periodic]} { - set period [dict get $inletProperties $groupid Variables LinearPeriod] - } - write::WriteString " VELOCITY_PERIOD $period" +# # Period +# set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] +# set period 0.0 +# if {[write::isBooleanTrue $periodic]} { +# set period [dict get $inletProperties $groupid Variables LinearPeriod] +# } +# write::WriteString " VELOCITY_PERIOD $period" - # Angular velocity - set velocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] - lassign [split [dict get $inletProperties $groupid Variables AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ - write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" +# # Angular velocity +# set velocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] +# lassign [split [dict get $inletProperties $groupid Variables AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ +# write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" - # Angular center of rotation - lassign [split [dict get $inletProperties $groupid Variables CenterOfRotation] ","] oX oY oZ - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" +# # Angular center of rotation +# lassign [split [dict get $inletProperties $groupid Variables CenterOfRotation] ","] oX oY oZ +# write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" - # Angular Period - set angular_periodic [dict get $inletProperties $groupid Variables ngularPeriodic] - if {[write::isBooleanTrue $angular_periodic]} { - set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] - } else { - set angular_period 0.0 - } - write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" +# # Angular Period +# set angular_periodic [dict get $inletProperties $groupid Variables ngularPeriodic] +# if {[write::isBooleanTrue $angular_periodic]} { +# set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] +# } else { +# set angular_period 0.0 +# } +# write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] - set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] - set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] - set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] - set rigid_body_motion 1 - write::WriteString " VELOCITY_START_TIME $LinearStartTime" - write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" - write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" - write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - } else { - set rigid_body_motion 0 - write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" - } +# set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] +# set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] +# set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] +# set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] +# set rigid_body_motion 1 +# write::WriteString " VELOCITY_START_TIME $LinearStartTime" +# write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" +# write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" +# write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" +# write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" +# } else { +# set rigid_body_motion 0 +# write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" +# write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" +# } - set contains_clusters 0 - set random_orientation 0 +# set contains_clusters 0 +# set random_orientation 0 - DefineInletConditions $inletProperties $groupid $mid $contains_clusters +# DefineInletConditions $inletProperties $groupid $mid $contains_clusters - set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] - lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y velocity_Z - #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz - write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" +# set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] +# lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y velocity_Z +# #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z +# lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz +# write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" - set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] - write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" +# set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] +# write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid Variables ClusterType] eq "SingleSphereCluster3D"} { - write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Variables Excentricity]" - write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid Variables ProbabilityDistributionOfExcentricity]" - write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid Variables StandardDeviationOfExcentricity]" - } - } +# if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { +# if {[dict get $inletProperties $groupid Variables ClusterType] eq "SingleSphereCluster3D"} { +# write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Variables Excentricity]" +# write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid Variables ProbabilityDistributionOfExcentricity]" +# write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid Variables StandardDeviationOfExcentricity]" +# } +# } - set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] - if {$type_of_measurement eq "Kilograms"} { - set mass_flow_option 1 - } else { - set mass_flow_option 0 - } +# set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] +# if {$type_of_measurement eq "Kilograms"} { +# set mass_flow_option 1 +# } else { +# set mass_flow_option 0 +# } - if {$mass_flow_option == 0} { - set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] - write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" - } +# if {$mass_flow_option == 0} { +# set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] +# write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" +# } - write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" +# write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem - if {$mass_flow_option == 1} { - set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] - write::WriteString " MASS_FLOW $inlet_mass_flow" - } - set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] - write::WriteString " INLET_START_TIME $inlet_start_time" - set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] - write::WriteString " INLET_STOP_TIME $inlet_stop_time" - set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] - write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" - set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] - write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" - set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] - write::WriteString " STANDARD_DEVIATION $standard_deviation" +# # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem +# if {$mass_flow_option == 1} { +# set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] +# write::WriteString " MASS_FLOW $inlet_mass_flow" +# } +# set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] +# write::WriteString " INLET_START_TIME $inlet_start_time" +# set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] +# write::WriteString " INLET_STOP_TIME $inlet_stop_time" +# set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] +# write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" +# set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] +# write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" +# set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] +# write::WriteString " STANDARD_DEVIATION $standard_deviation" - if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { - if {[dict get $inletProperties $groupid Variables RandomOrientation] == "Yes"} { - set random_orientation 1 - } else { - set random_orientation 0 - set orientation_x [dict get $inletProperties $groupid Variables OrientationX] - set orientation_y [dict get $inletProperties $groupid Variables OrientationY] - set orientation_z [dict get $inletProperties $groupid Variables OrientationZ] - set orientation_w [dict get $inletProperties $groupid Variables OrientationW] - write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" - } - write::WriteString " RANDOM_ORIENTATION $random_orientation" - } +# if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { +# if {[dict get $inletProperties $groupid Variables RandomOrientation] == "Yes"} { +# set random_orientation 1 +# } else { +# set random_orientation 0 +# set orientation_x [dict get $inletProperties $groupid Variables OrientationX] +# set orientation_y [dict get $inletProperties $groupid Variables OrientationY] +# set orientation_z [dict get $inletProperties $groupid Variables OrientationZ] +# set orientation_w [dict get $inletProperties $groupid Variables OrientationW] +# write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" +# } +# write::WriteString " RANDOM_ORIENTATION $random_orientation" +# } - write::WriteString " End SubModelPartData" - # Write nodes - write::WriteString " Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted $gdict - write::WriteString " End SubModelPartNodes" - write::WriteString " End SubModelPart" - write::WriteString " " +# write::WriteString " End SubModelPartData" +# # Write nodes +# write::WriteString " Begin SubModelPartNodes" +# GiD_WriteCalculationFile nodes -sorted $gdict +# write::WriteString " End SubModelPartNodes" +# write::WriteString " End SubModelPart" +# write::WriteString " " - } - } +# } +# } - if {$motion_type=="NotReady-FromATable"} { - set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" - set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] - GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" - set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] - set file_data [read $file_open] - close $file_open - GiD_File fprintf -nonewline $deminletchannel $file_data - GiD_File fprintf $deminletchannel "End Table" - GiD_File fprintf $deminletchannel "" - } +# if {$motion_type=="NotReady-FromATable"} { +# set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" +# set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] +# GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" +# set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] +# set file_data [read $file_open] +# close $file_open +# GiD_File fprintf -nonewline $deminletchannel $file_data +# GiD_File fprintf $deminletchannel "End Table" +# GiD_File fprintf $deminletchannel "" +# } - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " - } -} +# write::WriteString " Begin Table 0 TIME VELOCITY" +# write::WriteString " 0.0 0.0" +# write::WriteString " 1.0 0.0" +# write::WriteString " End Table" +# write::WriteString " " +# } +# } + +# proc DEM::write::DefineInletConditions2D {props mid contains_clusters} { + +# set inlet_element_type CylinderPartDEMElement2D +# write::WriteString " IDENTIFIER $mid" +# write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $props Material Variables InletElementType]" +# write::WriteString " ELEMENT_TYPE [dict get $props Material Variables InletElementType]" +# write::WriteString " CONTAINS_CLUSTERS 0" +# } -proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clusters} { +proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { set inlet_element_type SphericParticle3D - if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { + if {[dict get $inletProperties Material Variables InletElementType] eq "Cluster3D"} { set contains_clusters 1 - if {[dict get $inletProperties $groupid Variables ClusterType] eq "FromFile"} { - set custom_file_name [dict get $inletProperties $groupid Variables ClusterFilename] + if {[dict get $inletProperties Material Variables ClusterType] eq "FromFile"} { + set custom_file_name [dict get $inletProperties Material Variables ClusterFilename] set only_name [file tail $custom_file_name] write::WriteString " CLUSTER_FILE_NAME $only_name" } else { - set cluster_file_name [dict get $inletProperties $groupid Variables ClusterType] + set cluster_file_name [dict get $inletProperties Material Variables ClusterType] lassign [GetClusterFileNameAndReplaceInletElementType $cluster_file_name] inlet_element_type cluster_file_name write::WriteString " CLUSTER_FILE_NAME $cluster_file_name" } } write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE SphericParticle3D" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid Variables InletElementType]" + write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties Material Variables InletElementType]" + write::WriteString " ELEMENT_TYPE [dict get $inletProperties Material Variables InletElementType]" write::WriteString " CONTAINS_CLUSTERS $contains_clusters" - # Change to SphericSwimmingParticle3D in FLUIDDEM interface } -proc DEM::write::writeInletMeshes2D { } { +proc DEM::write::writeInletMeshes { } { variable inletProperties - set condition_name Inlet2D + set condition_name [DEM::write::GetInletConditionName] foreach groupid [DEM::write::GetInletGroups] { set what nodal @@ -339,17 +350,21 @@ proc DEM::write::writeInletMeshes2D { } { if {$motion_type=="LinearPeriodic"} { # Linear velocity - set velocity [dict get $props Material Variables VelocityModulus] - lassign [split [dict get $props Material Variables DirectionVector] ","] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, 0.0)" - + set velocity [dict get $props Material Variables VelocityModulus] + lassign [dict get $props Material Variables DirectionVector] velocity_X velocity_Y velocity_Z + if {$velocity_Z eq ""} {set velocity_Z 0.0} + lassign [MathUtils::VectorNormalized [list [string trim $velocity_X] [string trim $velocity_Y] [string trim $velocity_Z]]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" + if {$::Model::SpatialDimension eq "2D"} { + if {$vz ne "0.0"} { + error "Invalid value for LINEAR_VELOCITY Z : $vz" + } + } # Period set periodic [dict get $props Material Variables LinearPeriodic] if {[write::isBooleanTrue $periodic]} { - #set period [write::getValueByNode [$group_node selectNodes "./value\[@n='LinearPeriod'\]"]] set period [dict get $props Material Variables LinearPeriod] } else { set period 0.0 @@ -357,14 +372,19 @@ proc DEM::write::writeInletMeshes2D { } { write::WriteString " VELOCITY_PERIOD $period" # Angular velocity - #set velocity [write::getValueByNode [$group_node selectNodes "./value\[@n='AngularVelocityModulus'\]"]] - set avelocity [dict get $props Material Variables AngularVelocityModulus] - write::WriteString " ANGULAR_VELOCITY \[3\] (0.0,0.0,$avelocity)" + set avelocity [dict get $props Material Variables AngularVelocityModulus] + set wX 0.0; set wY 0.0; set wZ $avelocity + if {$::Model::SpatialDimension ne "2D"} { + lassign [dict get $inletProperties $groupid Variables AngularDirectionVector] velocity_X velocity_Y velocity_Z + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $avelocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ + } + write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" # Angular center of rotation - #lassign [write::getValueByNode [$group_node selectNodes "./value\[@n='CenterOfRotation'\]"]] oX oY oZ - lassign [split [dict get $props Material Variables enterOfRotation] ","] oX oY - write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,0.0)" + lassign [dict get $props Material Variables CenterOfRotation] oX oY oZ + if {$oZ eq ""} {set oZ 0.0} + write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" # Angular Period set angular_periodic [dict get $props Material Variables AngularPeriodic] @@ -394,13 +414,14 @@ proc DEM::write::writeInletMeshes2D { } { set contains_clusters 0 set random_orientation 0 - DefineInletConditions2D $props $mid $contains_clusters - + DefineInletConditions $props $mid $contains_clusters + set velocity_modulus [dict get $props Material Variables InVelocityModulus] - lassign [dict get $props Material Variables InDirectionVector] velocity_X velocity_Y - lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y]] velocity_X velocity_Y - lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y] ] vx vy - write::WriteString " VELOCITY \[3\] ($vx, $vy, 0.0)" + lassign [dict get $props Material Variables InDirectionVector] velocity_X velocity_Y velocity_Z + if {$velocity_Z eq ""} {set velocity_Z 0.0} + lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z + lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz + write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" set max_deviation_angle [dict get $props Material Variables VelocityDeviation] write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" @@ -458,25 +479,14 @@ proc DEM::write::writeInletMeshes2D { } { GiD_File fprintf $deminletchannel "" } - write::WriteString " Begin Table 0 TIME VELOCITY" - write::WriteString " 0.0 0.0" - write::WriteString " 1.0 0.0" - write::WriteString " End Table" - write::WriteString " " + write::WriteString " Begin Table 0 TIME VELOCITY" + write::WriteString " 0.0 0.0" + write::WriteString " 1.0 0.0" + write::WriteString " End Table" + write::WriteString " " } } - -proc DEM::write::DefineInletConditions2D {props mid contains_clusters} { - - set inlet_element_type CylinderPartDEMElement2D - write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $props Material Variables InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $props Material Variables InletElementType]" - write::WriteString " CONTAINS_CLUSTERS 0" - # Change to SphericSwimmingParticle3D in FLUIDDEM interface -} - proc DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_type} { if {$inlet_element_type eq "LineCluster3D"} { set inlet_element_type "Cluster3D" From c15bf3fe8966c6eeb35d7bee08c057d3fb2eb2a3 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:00:55 +0200 Subject: [PATCH 249/556] Missing 3d parameters --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 522e8d891..163025828 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -445,6 +445,7 @@ proc DEM::write::writeInletMeshes { } { set inlet_mass_flow [dict get $props Material Variables InletMassFlow] write::WriteString " MASS_FLOW $inlet_mass_flow" } + set inlet_start_time [dict get $props Material Variables InletStartTime] write::WriteString " INLET_START_TIME $inlet_start_time" set inlet_stop_time [dict get $props Material Variables InletStopTime] @@ -456,6 +457,28 @@ proc DEM::write::writeInletMeshes { } { set standard_deviation [dict get $props Material Variables StandardDeviation] write::WriteString " STANDARD_DEVIATION $standard_deviation" + if {[dict get $props Material Variables InletElementType] eq "Cluster3D"} { + if {[dict get $props Material Variables ClusterType] eq "SingleSphereCluster3D"} { + write::WriteString " EXCENTRICITY [dict get $props Material Variables Excentricity]" + write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $props Material Variables ProbabilityDistributionOfExcentricity]" + write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $props Material Variables StandardDeviationOfExcentricity]" + } + } + + if {[dict get $props Material Variables InletElementType] eq "Cluster3D"} { + if {[dict get $props Material Variables RandomOrientation] == "Yes"} { + set random_orientation 1 + } else { + set random_orientation 0 + set orientation_x [dict get $props Material Variables OrientationX] + set orientation_y [dict get $props Material Variables OrientationY] + set orientation_z [dict get $props Material Variables OrientationZ] + set orientation_w [dict get $props Material Variables OrientationW] + write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" + } + write::WriteString " RANDOM_ORIENTATION $random_orientation" + } + write::WriteString " End SubModelPartData" # Write nodes write::WriteString " Begin SubModelPartNodes" From 5af24b0295749a6969bfbf55dbb19520c6aa1cb2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:04:17 +0200 Subject: [PATCH 250/556] unused code --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 195 ------------------ 1 file changed, 195 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 163025828..8a4159e53 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -98,201 +98,6 @@ proc DEM::write::GetUsedClusters { } { return [list $clusters_list $custom_clusters_list] } - -# proc DEM::write::writeInletMeshes { } { -# variable inletProperties - -# set condition_name Inlet -# foreach groupid [DEM::write::GetInletGroups] { -# set what nodal -# if {[write::getSubModelPartId $condition_name $groupid] eq 0} { -# set mid [write::AddSubmodelpart $condition_name $groupid] -# set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] -# if {$props eq ""} {W "Error printing inlet $groupid"} -# set group_real_name [write::GetWriteGroupName $groupid] -# set gdict [dict create] -# set f "%10i\n" -# set f [subst $f] -# dict set gdict $group_real_name $f -# write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" -# write::WriteString " Begin SubModelPartData" -# WV inletProperties -# set is_active [dict get $inletProperties $groupid Variables SetActive] -# if {$is_active=="No"} { -# continue -# } - -# if {[write::isBooleanTrue $is_active]} { -# set motion_type [dict get $inletProperties $groupid Variables InletMotionType] -# set TableNumber 0 -# set TableVelocityComponent 0 -# if {$motion_type == "FromATable"} { -# set TableNumber $mid -# set TableVelocityComponent [dict get $inletProperties $groupid Variables TableVelocityComponent] -# } -# if {$motion_type=="LinearPeriodic"} { - -# # Linear velocity -# set velocity [dict get $inletProperties $groupid Variables VelocityModulus] -# lassign [split [dict get $inletProperties $groupid Variables DirectionVector] ","] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz -# write::WriteString " LINEAR_VELOCITY \[3\] ($vx, $vy, $vz)" - -# # Period -# set periodic [dict get $inletProperties $groupid Variables LinearPeriodic] -# set period 0.0 -# if {[write::isBooleanTrue $periodic]} { -# set period [dict get $inletProperties $groupid Variables LinearPeriod] -# } -# write::WriteString " VELOCITY_PERIOD $period" - -# # Angular velocity -# set velocity [dict get $inletProperties $groupid Variables AngularVelocityModulus] -# lassign [split [dict get $inletProperties $groupid Variables AngularDirectionVector] ","] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::ScalarByVectorProd $velocity [list $velocity_X $velocity_Y $velocity_Z] ] wX wY wZ -# write::WriteString " ANGULAR_VELOCITY \[3\] ($wX,$wY,$wZ)" - - -# # Angular center of rotation -# lassign [split [dict get $inletProperties $groupid Variables CenterOfRotation] ","] oX oY oZ -# write::WriteString " ROTATION_CENTER \[3\] ($oX,$oY,$oZ)" - -# # Angular Period -# set angular_periodic [dict get $inletProperties $groupid Variables ngularPeriodic] -# if {[write::isBooleanTrue $angular_periodic]} { -# set angular_period [dict get $inletProperties $groupid Variables AngularPeriod] -# } else { -# set angular_period 0.0 -# } -# write::WriteString " ANGULAR_VELOCITY_PERIOD $angular_period" - -# set LinearStartTime [dict get $inletProperties $groupid Variables LinearStartTime] -# set LinearEndTime [dict get $inletProperties $groupid Variables LinearEndTime] -# set AngularStartTime [dict get $inletProperties $groupid Variables AngularStartTime] -# set AngularEndTime [dict get $inletProperties $groupid Variables AngularEndTime] -# set rigid_body_motion 1 -# write::WriteString " VELOCITY_START_TIME $LinearStartTime" -# write::WriteString " VELOCITY_STOP_TIME $LinearEndTime" -# write::WriteString " ANGULAR_VELOCITY_START_TIME $AngularStartTime" -# write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" -# write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" -# } else { -# set rigid_body_motion 0 -# write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" -# write::WriteString " //TABLE_VELOCITY_COMPONENT $TableVelocityComponent" -# } - -# set contains_clusters 0 -# set random_orientation 0 - - -# DefineInletConditions $inletProperties $groupid $mid $contains_clusters - -# set velocity_modulus [dict get $inletProperties $groupid Variables InVelocityModulus] -# lassign [split [dict get $inletProperties $groupid Variables InDirectionVector] ","] velocity_X velocity_Y velocity_Z -# #lassign [write::getValueByNode [dict get $inletProperties $groupid DirectionVector]] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::VectorNormalized [list $velocity_X $velocity_Y $velocity_Z]] velocity_X velocity_Y velocity_Z -# lassign [MathUtils::ScalarByVectorProd $velocity_modulus [list $velocity_X $velocity_Y $velocity_Z] ] vx vy vz -# write::WriteString " VELOCITY \[3\] ($vx, $vy, $vz)" - -# set max_deviation_angle [dict get $inletProperties $groupid Variables VelocityDeviation] -# write::WriteString " MAX_RAND_DEVIATION_ANGLE $max_deviation_angle" - - -# if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { -# if {[dict get $inletProperties $groupid Variables ClusterType] eq "SingleSphereCluster3D"} { -# write::WriteString " EXCENTRICITY [dict get $inletProperties $groupid Variables Excentricity]" -# write::WriteString " EXCENTRICITY_PROBABILITY_DISTRIBUTION [dict get $inletProperties $groupid Variables ProbabilityDistributionOfExcentricity]" -# write::WriteString " EXCENTRICITY_STANDARD_DEVIATION [dict get $inletProperties $groupid Variables StandardDeviationOfExcentricity]" -# } -# } - -# set type_of_measurement [dict get $inletProperties $groupid Variables TypeOfFlowMeasurement] -# if {$type_of_measurement eq "Kilograms"} { -# set mass_flow_option 1 -# } else { -# set mass_flow_option 0 -# } - -# if {$mass_flow_option == 0} { -# set inlet_number_of_particles [dict get $inletProperties $groupid Variables NumberOfParticles] -# write::WriteString " INLET_NUMBER_OF_PARTICLES $inlet_number_of_particles" -# } - -# write::WriteString " IMPOSED_MASS_FLOW_OPTION $mass_flow_option" - -# # search for tem id="InletLimitedVelocity" related to dense inlet in spreaddem -# if {$mass_flow_option == 1} { -# set inlet_mass_flow [dict get $inletProperties $groupid Variables InletMassFlow] -# write::WriteString " MASS_FLOW $inlet_mass_flow" -# } -# set inlet_start_time [dict get $inletProperties $groupid Variables InletStartTime] -# write::WriteString " INLET_START_TIME $inlet_start_time" -# set inlet_stop_time [dict get $inletProperties $groupid Variables InletStopTime] -# write::WriteString " INLET_STOP_TIME $inlet_stop_time" -# set particle_diameter [dict get $inletProperties $groupid Variables ParticleDiameter] -# write::WriteString " RADIUS [expr {0.5 * $particle_diameter}]" -# set probability_distribution [dict get $inletProperties $groupid Variables ProbabilityDistribution] -# write::WriteString " PROBABILITY_DISTRIBUTION $probability_distribution" -# set standard_deviation [dict get $inletProperties $groupid Variables StandardDeviation] -# write::WriteString " STANDARD_DEVIATION $standard_deviation" - -# if {[dict get $inletProperties $groupid Variables InletElementType] eq "Cluster3D"} { -# if {[dict get $inletProperties $groupid Variables RandomOrientation] == "Yes"} { -# set random_orientation 1 -# } else { -# set random_orientation 0 -# set orientation_x [dict get $inletProperties $groupid Variables OrientationX] -# set orientation_y [dict get $inletProperties $groupid Variables OrientationY] -# set orientation_z [dict get $inletProperties $groupid Variables OrientationZ] -# set orientation_w [dict get $inletProperties $groupid Variables OrientationW] -# write::WriteString " ORIENTATION \[4\] ($orientation_x, $orientation_y, $orientation_z, $orientation_w)" -# } -# write::WriteString " RANDOM_ORIENTATION $random_orientation" -# } - -# write::WriteString " End SubModelPartData" -# # Write nodes -# write::WriteString " Begin SubModelPartNodes" -# GiD_WriteCalculationFile nodes -sorted $gdict -# write::WriteString " End SubModelPartNodes" -# write::WriteString " End SubModelPart" -# write::WriteString " " - -# } -# } - -# if {$motion_type=="NotReady-FromATable"} { -# set properties_path "${basexpath}//c.[list ${cgroupid}]//c.MainProperties" -# set filename [::xmlutils::setXml "${properties_path}//i.VelocitiesFilename" dv] -# GiD_File fprintf $deminletchannel "Begin Table $TableNumber TIME VELOCITY" -# set file_open [open [file native [file join [::KUtils::GetPaths "PDir"] $filename]] r] -# set file_data [read $file_open] -# close $file_open -# GiD_File fprintf -nonewline $deminletchannel $file_data -# GiD_File fprintf $deminletchannel "End Table" -# GiD_File fprintf $deminletchannel "" -# } - -# write::WriteString " Begin Table 0 TIME VELOCITY" -# write::WriteString " 0.0 0.0" -# write::WriteString " 1.0 0.0" -# write::WriteString " End Table" -# write::WriteString " " -# } -# } - -# proc DEM::write::DefineInletConditions2D {props mid contains_clusters} { - -# set inlet_element_type CylinderPartDEMElement2D -# write::WriteString " IDENTIFIER $mid" -# write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $props Material Variables InletElementType]" -# write::WriteString " ELEMENT_TYPE [dict get $props Material Variables InletElementType]" -# write::WriteString " CONTAINS_CLUSTERS 0" -# } - proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { set inlet_element_type SphericParticle3D if {[dict get $inletProperties Material Variables InletElementType] eq "Cluster3D"} { From 31ece1d0642f795f9f6fd26eb5e80b028aa55f86 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:06:02 +0200 Subject: [PATCH 251/556] typo --- .../apps/CDEM/write/writeMDPA_Parts.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 20baf48fa..e416d351d 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -15,7 +15,7 @@ proc DEM::write::WriteMDPAParts { } { write::writeNodalCoordinatesOnParts write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart] write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsInitialC] - write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundayC] + write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundaryC] write::writeNodalCoordinatesOnGroups [DEM::write::GetNodesForGraphs] # Element connectivities diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index b67f91bbc..558a8a5b7 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -12,7 +12,7 @@ proc DEM::write::WriteMDPAParts { } { write::writeNodalCoordinatesOnParts write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart] write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC] - write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundayC] + write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundaryC] write::writeNodalCoordinatesOnGroups [GetNodesForGraphs] # Element connectivities (Groups on STParts) @@ -28,7 +28,7 @@ proc DEM::write::WriteMDPAParts { } { writeDEMConditionMeshes # CustomSubmodelParts - WriteCustomDEMSmp; + WriteCustomDEMSmp } @@ -54,8 +54,11 @@ proc DEM::write::GetDEMGroupsCustomSubmodelpart { } { proc DEM::write::GetDEMGroupsInitialC { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC2D'\]/group" - } else {set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC'\]/group"} + if {$::Model::SpatialDimension eq "2D"} { + set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC2D'\]/group" + } else { + set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC'\]/group" + } foreach group [[customlib::GetBaseRoot] selectNodes $xp3] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] @@ -63,10 +66,13 @@ proc DEM::write::GetDEMGroupsInitialC { } { return $groups } -proc DEM::write::GetDEMGroupsBoundayC { } { +proc DEM::write::GetDEMGroupsBoundaryC { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" - } else {set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group"} + if {$::Model::SpatialDimension eq "2D"} { + set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" + } else { + set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC'\]/group" + } foreach group [[customlib::GetBaseRoot] selectNodes $xp4] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] From a257f6facc9d0b21132e788a1dd72e6e609e7894 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:10:07 +0200 Subject: [PATCH 252/556] delete unused code --- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 26 ++------- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 2 +- kratos.gid/apps/DEM/write/writeMaterials.tcl | 53 ------------------- .../apps/DEM/write/writeProjectParameters.tcl | 10 +--- 4 files changed, 8 insertions(+), 83 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 558a8a5b7..66847e9bf 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -82,8 +82,11 @@ proc DEM::write::GetDEMGroupsBoundaryC { } { proc DEM::write::GetNodesForGraphs { } { set groups [list ] - if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" - } else {set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition'\]/group"} + if {$::Model::SpatialDimension eq "2D"} { + set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" + } else { + set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition'\]/group" + } foreach group [[customlib::GetBaseRoot] selectNodes $xp5] { set groupid [$group @n] lappend groups [write::GetWriteGroupName $groupid] @@ -178,25 +181,6 @@ proc DEM::write::writeDEMConditionMeshes { } { write::WriteString " ANGULAR_VELOCITY_STOP_TIME $AngularEndTime" write::WriteString " RIGID_BODY_MOTION $rigid_body_motion" - - # # Interval - # set interval [write::getValueByNode [$group_node selectNodes "./value\[@n='Interval'\]"]] - # lassign [write::getInterval $interval] ini end - # if {![string is double $ini]} { - # set ini [write::getValue DEMTimeParameters StartTime] - # } - # # write::WriteString " ${cond}_START_TIME $ini" - # write::WriteString " VELOCITY_START_TIME $ini" - # write::WriteString " ANGULAR_VELOCITY_START_TIME $ini" - # if {![string is double $end]} { - # set end [write::getValue DEMTimeParameters EndTime] - # } - # # write::WriteString " ${cond}_STOP_TIME $end" - # write::WriteString " VELOCITY_STOP_TIME $end" - # write::WriteString " ANGULAR_VELOCITY_STOP_TIME $end" - - - } elseif {$motion_type == "FixedDOFs"} { set rigid_body_motion 0 diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 191ef436f..d1696a974 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -54,7 +54,7 @@ proc DEM::write::WriteRigidWallProperties { } { proc DEM::write::WritePhantomWallProperties { } { set wall_properties [dict create ] - set condition_name 'Phantom-Wall' + set condition_name "Phantom-Wall" set cnd [Model::getCondition $condition_name] set xp1 [DEM::write::GetPhantomWallXPath] diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 677d8e4ea..b2e0b59f3 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -70,59 +70,6 @@ proc DEM::write::getDEMMaterialsDict { } { return $global_dict } -# EXAMPLE -#{ -# "materials":[{ -# "material_name": "mat1", -# "material_id": 1, -# "properties":{ -# "PARTICLE_DENSITY": 4000.0, -# "YOUNG_MODULUS": 10000000.0, -# "POISSON_RATIO": 0.20 -# } -# },{ -# "material_name": "mat2", -# "material_id": 2, -# "properties":{ -# "YOUNG_MODULUS": 1.0e20, -# "POISSON_RATIO": 0.25, -# "COMPUTE_WEAR": false -# } -# }], -# "material_relations":[{ -# "material_names_list":["mat1", "mat1"], -# "material_ids_list":[1, 1], -# "properties":{ -# "COEFFICIENT_OF_RESTITUTION": 0.2, -# "STATIC_FRICTION": 0.577350269189494, -# "DYNAMIC_FRICTION": 0.577350269189494, -# "FRICTION_DECAY": 500, -# "ROLLING_FRICTION": 0.01, -# "ROLLING_FRICTION_WITH_WALLS": 0.01, -# "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME": "DEM_D_Hertz_viscous_Coulomb" -# } -# },{ -# "material_names_list":["mat1", "mat2"], -# "material_ids_list":[1, 2], -# "properties":{ -# "COEFFICIENT_OF_RESTITUTION": 0.2, -# "STATIC_FRICTION": 0.577350269189494, -# "DYNAMIC_FRICTION": 0.577350269189494, -# "FRICTION_DECAY": 500, -# "ROLLING_FRICTION": 0.01, -# "ROLLING_FRICTION_WITH_WALLS": 0.01, -# "SEVERITY_OF_WEAR": 0.001, -# "IMPACT_WEAR_SEVERITY": 0.001, -# "BRINELL_HARDNESS": 200.0, -# "DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME": "DEM_D_Hertz_viscous_Coulomb" -# } -# }], -# "material_assignation_table":[ -# ["ClusterPart", "mat1"], -# ["RigidFacePart","mat2"] -# ] -#} - proc DEM::write::GetModelPartParentNameFromGroup {group} { set model_part_parent SpheresPart if {$group in [DEM::write::GetWallsGroups]} {set model_part_parent "RigidFacePart"} diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 167e85159..3ee5f5bfa 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -86,10 +86,10 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "TranslationalIntegrationScheme" [write::getValue DEMTranslationalScheme] dict set project_parameters_dict "RotationalIntegrationScheme" [write::getValue DEMRotationalScheme] set time_params [DEM::write::GetTimeSettings] - set MaxTimeStep [dict get $time_params DeltaTime] + set MaxTimeStep [dict get $time_params DeltaTime] # TODO: MAXTIMESTEP is get from General and it should be getting its value from DEM block dict set project_parameters_dict "MaxTimeStep" $MaxTimeStep - set FinalTime [dict get $time_params EndTime] + set FinalTime [dict get $time_params EndTime] dict set project_parameters_dict "FinalTime" $FinalTime # TODO: check for inconsistencies in DEMTIMEPARAMETERS UN # dict set project_parameters_dict "ControlTime" [write::getValue DEMTimeParameters ScreenInfoOutput] @@ -131,12 +131,6 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "PostParticleMoment" [write::getValue PostPrint ParticleMoment] dict set project_parameters_dict "PostEulerAngles" [write::getValue PostPrint EulerAngles] dict set project_parameters_dict "PostRollingResistanceMoment" [write::getValue PostPrint RollingResistanceMoment] - #dict set project_parameters_dict "PostNodalArea" [write::getValue PostPrint NodalArea] - #dict set project_parameters_dict "PostRHS" [write::getValue PostPrint Rhs] - #dict set project_parameters_dict "PostDampForces" [write::getValue PostPrint DampForces] - #dict set project_parameters_dict "PostAppliedForces" [write::getValue PostPrint AppliedForces] - #dict set project_parameters_dict "PostGroupId" [write::getValue PostPrint GroupId] - #dict set project_parameters_dict "PostExportId" [write::getValue PostPrint ExportId] dict set project_parameters_dict "problem_name" [Kratos::GetModelName] return $project_parameters_dict From 91c21afd96217ac5d55b6d088f4e4051ebf2d019 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:11:33 +0200 Subject: [PATCH 253/556] remove unsuported command --- kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl | 2 +- kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl | 2 +- kratos.gid/apps/MPM/examples/FallingSandBall.tcl | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index 98d00a27e..2d17f788c 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -23,7 +23,7 @@ proc Buoyancy::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc Buoyancy::examples::DrawSquareGeometry2D {args} { Kratos::ResetModel diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index dd9ffa8bb..706c13421 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -22,7 +22,7 @@ proc ConjugateHeatTransfer::examples::DrawBFSGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConjugateHeatTransfer::examples::DrawBFSGeometry2D {args} { diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index afc6928e5..13104c49f 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -22,7 +22,7 @@ proc ConjugateHeatTransfer::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConjugateHeatTransfer::examples::DrawSquareGeometry2D {args} { diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl index db97ece31..b480a6918 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl @@ -22,7 +22,7 @@ proc ConvectionDiffusion::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConvectionDiffusion::examples::DrawSquareGeometry2D {args} { diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 3d84e1af6..4a7609dd0 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -23,7 +23,7 @@ proc Fluid::examples::DrawCylinderInFlowGeometry3D {args} { GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape GiD_Layers edit opaque Fluid 0 - GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc Fluid::examples::DrawCylinderInFlowGeometry2D {args} { Kratos::ResetModel diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl index cc26c9f8e..7e6573b4e 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -22,7 +22,7 @@ proc MPM::examples::DrawFallingSandBallGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc MPM::examples::DrawFallingSandBallGeometry2D {args} { Kratos::ResetModel From 2aadb8b47b5670050687ad53ead2b12d0b354a97 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:11:33 +0200 Subject: [PATCH 254/556] remove unsuported command --- kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl | 2 +- kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl | 2 +- kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl | 2 +- kratos.gid/apps/MPM/examples/FallingSandBall.tcl | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index 98d00a27e..2d17f788c 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -23,7 +23,7 @@ proc Buoyancy::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc Buoyancy::examples::DrawSquareGeometry2D {args} { Kratos::ResetModel diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index dd9ffa8bb..706c13421 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -22,7 +22,7 @@ proc ConjugateHeatTransfer::examples::DrawBFSGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConjugateHeatTransfer::examples::DrawBFSGeometry2D {args} { diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index afc6928e5..13104c49f 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -22,7 +22,7 @@ proc ConjugateHeatTransfer::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConjugateHeatTransfer::examples::DrawSquareGeometry2D {args} { diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl index db97ece31..b480a6918 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl @@ -22,7 +22,7 @@ proc ConvectionDiffusion::examples::DrawSquareGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc ConvectionDiffusion::examples::DrawSquareGeometry2D {args} { diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 3d84e1af6..4a7609dd0 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -23,7 +23,7 @@ proc Fluid::examples::DrawCylinderInFlowGeometry3D {args} { GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape GiD_Layers edit opaque Fluid 0 - GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc Fluid::examples::DrawCylinderInFlowGeometry2D {args} { Kratos::ResetModel diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl index cc26c9f8e..7e6573b4e 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -22,7 +22,7 @@ proc MPM::examples::DrawFallingSandBallGeometry3D {args} { # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 - # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate obj x -150 y -30 escape escape + # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } proc MPM::examples::DrawFallingSandBallGeometry2D {args} { Kratos::ResetModel From 3c9f403e719a33c8a24bfe4b3203137c10eb4120 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 17 May 2021 18:31:09 +0200 Subject: [PATCH 255/556] Add material relation parameters --- .../DEM/xml/material_relations/MaterialRelations.tcl | 12 ++++++++++-- .../DEM/xml/material_relations/MaterialRelations.xml | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl index 106313e75..430a2bfbb 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl @@ -31,7 +31,15 @@ proc Model::ParseMaterialRelations { doc } { set MatNodeList [$doc getElementsByTagName MaterialRelation] foreach MatNode $MatNodeList { - lappend MaterialRelations [ParseMatRelNode $MatNode] + set mat_rel [ParseMatRelNode $MatNode] + set ma [Model::getMaterialRelation [$mat_rel getName] ] + if {$ma eq ""} { + lappend MaterialRelations $mat_rel + } else { + foreach input [dict values [$mat_rel getInputs]] { + $ma addInputDone $input + } + } } } @@ -79,7 +87,7 @@ proc Model::GetMaterialRelationNames {args} { proc Model::getMaterialRelation {mid} { - foreach mat_rel [GetMaterialRelations]] { + foreach mat_rel [GetMaterialRelations] { if {[$mat_rel getName] eq $mid} { return $mat_rel} } return "" diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 37c6303d7..4b4d0e3bf 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -14,5 +14,10 @@ + + + + + \ No newline at end of file From a6650074c2960432e8789ff1f52a1c0560ef8468 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 18 May 2021 12:16:00 +0200 Subject: [PATCH 256/556] Fixed circle for 2D --- .../apps/DEM/write/writeProjectParameters.tcl | 56 +++++++++++-------- .../material_relations/MaterialRelations.xml | 2 +- kratos.gid/scripts/Utils.tcl | 4 ++ kratos.gid/scripts/spdAuxiliar.tcl | 18 ++++++ 4 files changed, 57 insertions(+), 23 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 3ee5f5bfa..29d0474a7 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -14,8 +14,9 @@ proc DEM::write::getParametersDict { } { set project_parameters_dict [dict create] - if {$::Model::SpatialDimension eq "2D"} {set dimension [expr 2] - } else {set dimension [expr 3]} + set dimension [expr 3] + if {$::Model::SpatialDimension eq "2D"} {set dimension [expr 2]} + dict set project_parameters_dict "Dimension" [expr $dimension] dict set project_parameters_dict "PeriodicDomainOption" [write::getValue Boundingbox PeriodicDomain] dict set project_parameters_dict "BoundingBoxOption" [write::getValue Boundingbox UseBB] @@ -32,11 +33,12 @@ proc DEM::write::getParametersDict { } { # dem_inlet_option set numinlets [llength [DEM::write::GetInletGroups]] - if {$numinlets == 0} { - set dem_inlet_option "false" - } else { - set dem_inlet_option "true" - } + set dem_inlet_option [? [expr $numinlets == 0] "true" "false"] + # if {$numinlets == 0} { + # set dem_inlet_option "false" + # } else { + # set dem_inlet_option "true" + # } dict set project_parameters_dict "dem_inlet_option" $dem_inlet_option # Gravity @@ -51,21 +53,7 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "CleanIndentationsOption" [write::getValue AdvOptions CleanIndentations] set strategy_parameters_dict [dict create] - # set ElementType [::wkcf::GetElementType] # TODO: check old ::wkcf::GetElementType functionalities if required - set ElementType SphericPartDEMElement3D - if {$ElementType eq "SphericPartDEMElement3D" || $ElementType eq "CylinderPartDEMElement2D"} { - set dem_strategy "sphere_strategy" - } elseif {$ElementType eq "SphericContPartDEMElement3D" || $ElementType eq "CylinderContPartDEMElement3D"} { - set dem_strategy "continuum_sphere_strategy" - } elseif {$ElementType eq "ThermalSphericPartDEMElement3D"} { - set dem_strategy "thermal_sphere_strategy" - } elseif {$ElementType eq "ThermalSphericContPartDEMElement3D"} { - set dem_strategy "thermal_continuum_sphere_strategy" - } elseif {$ElementType eq "SinteringSphericConPartDEMElement3D"} { - set dem_strategy "thermal_continuum_sphere_strategy" - } elseif {$ElementType eq "IceContPartDEMElement3D"} { - set dem_strategy "ice_continuum_sphere_strategy" - } + set dem_strategy [DEM::write::GetDemStrategyName] dict set strategy_parameters_dict "RemoveBallsInitiallyTouchingWalls" [write::getValue AdvOptions RemoveParticlesInWalls] dict set strategy_parameters_dict "strategy" $dem_strategy @@ -81,6 +69,9 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "ContactMeshOption" [write::getValue BondElem ContactMeshOption] dict set project_parameters_dict "OutputFileType" [write::getValue GiDOptions GiDPostMode] dict set project_parameters_dict "Multifile" [write::getValue GiDOptions GiDMultiFileFlag] + + set used_elements [spdAux::GetUsedElements] + set ElementType [lindex $used_elements 0] dict set project_parameters_dict "ElementType" $ElementType dict set project_parameters_dict "TranslationalIntegrationScheme" [write::getValue DEMTranslationalScheme] @@ -136,6 +127,27 @@ proc DEM::write::getParametersDict { } { return $project_parameters_dict } +proc DEM::write::GetDemStrategyName { } { + return sphere_strategy + # set ElementType [::wkcf::GetElementType] # TODO: check old ::wkcf::GetElementType functionalities if required + # set used_elements [spdAux::GetUsedElements] + + # set ElementType [lindex used_elements 0] + # if {$ElementType eq "SphericPartDEMElement3D" || $ElementType eq "CylinderPartDEMElement2D"} { + # set dem_strategy "sphere_strategy" + # } elseif {$ElementType eq "SphericContPartDEMElement3D" || $ElementType eq "CylinderContPartDEMElement3D"} { + # set dem_strategy "continuum_sphere_strategy" + # } elseif {$ElementType eq "ThermalSphericPartDEMElement3D"} { + # set dem_strategy "thermal_sphere_strategy" + # } elseif {$ElementType eq "ThermalSphericContPartDEMElement3D"} { + # set dem_strategy "thermal_continuum_sphere_strategy" + # } elseif {$ElementType eq "SinteringSphericConPartDEMElement3D"} { + # set dem_strategy "thermal_continuum_sphere_strategy" + # } elseif {$ElementType eq "IceContPartDEMElement3D"} { + # set dem_strategy "ice_continuum_sphere_strategy" + # } +} + proc DEM::write::GetTimeSettings { } { set result [dict create] dict set result DeltaTime [write::getValue DEMTimeParameters DeltaTime] diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index 4b4d0e3bf..be0a1a24f 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -16,7 +16,7 @@ - + diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 0e3cae1f9..527206125 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -269,4 +269,8 @@ proc Kratos::GetMeshBasicData { } { dict set result nodes [GiD_Info Mesh NumNodes] dict set result is_quadratic [expr [GiD_Info Project Quadratic] && ![GiD_Cartesian get iscartesian] ] return $result +} + +proc ? {question true_val false_val} { + return [expr $question ? $true_val : $false_val] } \ No newline at end of file diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index fbbb66d51..c74b8d640 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -364,6 +364,24 @@ proc spdAux::MergeGroups {result_group_name group_list} { } } + +proc spdAux::GetUsedElements {{alt_un ""}} { + set root [customlib::GetBaseRoot] + + set un $alt_un + if {$un eq ""} {set un [apps::ExecuteOnCurrentApp write::GetAttribute parts_un]} + + set xp1 "[spdAux::getRoute $un]/group" + set lista [list ] + foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + set g $gNode + set name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] + if {$name ni $lista} {lappend lista $name} + } + + return $lista +} + proc spdAux::LoadIntervalGroups { {root ""} } { customlib::UpdateDocument variable GroupsEdited From d48d37c7e49e25b3b8e7a61aa237d949a890d24f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 18 May 2021 12:22:31 +0200 Subject: [PATCH 257/556] minor --- .../apps/DEM/write/writeProjectParameters.tcl | 39 ++++++------------- kratos.gid/scripts/spdAuxiliar.tcl | 1 - 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 29d0474a7..a7146ebde 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -1,19 +1,9 @@ # Project Parameters -# proc ::DEM::write::getParametersEventtest { } { - -# set project_parameters_dict [dict create] -# dict set project_parameters_dict [DEM::write::getParametersEvent1] -# dict set project_parameters_dict "PostBoundingBox" "SphericPartDEMElement3D" -# dict set project_parameters_dict "PostPoissonRatio" "false" -# return $project_parameters_dict -# } - proc DEM::write::getParametersDict { } { set project_parameters_dict [dict create] - set dimension [expr 3] if {$::Model::SpatialDimension eq "2D"} {set dimension [expr 2]} @@ -34,11 +24,6 @@ proc DEM::write::getParametersDict { } { # dem_inlet_option set numinlets [llength [DEM::write::GetInletGroups]] set dem_inlet_option [? [expr $numinlets == 0] "true" "false"] - # if {$numinlets == 0} { - # set dem_inlet_option "false" - # } else { - # set dem_inlet_option "true" - # } dict set project_parameters_dict "dem_inlet_option" $dem_inlet_option # Gravity @@ -90,19 +75,19 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "VelTrapGraphExportFreq" 1e-3 # Output timestep - set output_criterion [write::getValue DEMResults DEM-OTimeStepType] - if {$output_criterion eq "Detail_priority"} { - set output_timestep [write::getValue DEMResults DEM-OTimeStepDetail] - } elseif {$output_criterion eq "Storage_priority"} { - set amount [write::getValue DEMResults DEM-OTimeStepStorage] - set OTimeStepStorage [expr (double($FinalTime)/$amount)] - set maxamount [expr ($FinalTime/$MaxTimeStep)] - if {$amount < $maxamount} { - set output_timestep $OTimeStepStorage - } else { - set output_timestep $MaxTimeStep - } + set output_criterion [write::getValue DEMResults DEM-OTimeStepType] + if {$output_criterion eq "Detail_priority"} { + set output_timestep [write::getValue DEMResults DEM-OTimeStepDetail] + } elseif {$output_criterion eq "Storage_priority"} { + set amount [write::getValue DEMResults DEM-OTimeStepStorage] + set OTimeStepStorage [expr (double($FinalTime)/$amount)] + set maxamount [expr ($FinalTime/$MaxTimeStep)] + if {$amount < $maxamount} { + set output_timestep $OTimeStepStorage + } else { + set output_timestep $MaxTimeStep } + } dict set project_parameters_dict "OutputTimeStep" $output_timestep dict set project_parameters_dict "PostBoundingBox" [write::getValue Boundingbox PostBB] dict set project_parameters_dict "PostLocalContactForce" [write::getValue BondElem LocalContactForce] diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index c74b8d640..a5d9fabf6 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -374,7 +374,6 @@ proc spdAux::GetUsedElements {{alt_un ""}} { set xp1 "[spdAux::getRoute $un]/group" set lista [list ] foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set g $gNode set name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] if {$name ni $lista} {lappend lista $name} } From ae548bae7d7a921445484bb520fefb26add7b40d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 18 May 2021 12:35:24 +0200 Subject: [PATCH 258/556] fixing clusters --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 8a4159e53..7c9401d50 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -15,7 +15,6 @@ proc DEM::write::WriteMDPAInlet { } { writeInletMeshes - #Copy cluster files (.clu) copyClusterFiles } @@ -75,13 +74,10 @@ proc DEM::write::GetUsedClusters { } { variable inletProperties set clusters_list [list ] set custom_clusters_list [list] - set condition_name Inlet - if {$::Model::SpatialDimension eq "2D"} { - set condition_name Inlet2D - } + set condition_name [DEM::write::GetInletConditionName] foreach groupid [DEM::write::GetInletGroups] { - if {[write::getSubModelPartId $condition_name $groupid] eq 0} { + if {[write::getSubModelPartId $condition_name $groupid] ne 0} { set mid [write::AddSubmodelpart $condition_name $groupid] set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] if {[dict get $props Material Variables InletElementType] in [list "Cluster2D" "Cluster3D"]} { From 0e7e091c33742f2f7412f73144d364a746e891fc Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 21 May 2021 11:13:26 +0200 Subject: [PATCH 259/556] dem_inlet_option --- kratos.gid/apps/DEM/write/writeProjectParameters.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index a7146ebde..4028fe9c5 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -22,8 +22,8 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "BoundingBoxMinZ" [write::getValue Boundingbox MinZ] # dem_inlet_option - set numinlets [llength [DEM::write::GetInletGroups]] - set dem_inlet_option [? [expr $numinlets == 0] "true" "false"] + set dem_inlet_option true + if {[llength [DEM::write::GetInletGroups]] == 0} {set dem_inlet_option false} dict set project_parameters_dict "dem_inlet_option" $dem_inlet_option # Gravity @@ -117,7 +117,7 @@ proc DEM::write::GetDemStrategyName { } { # set ElementType [::wkcf::GetElementType] # TODO: check old ::wkcf::GetElementType functionalities if required # set used_elements [spdAux::GetUsedElements] - # set ElementType [lindex used_elements 0] + # set ElementType SphericPartDEMElement3D # if {$ElementType eq "SphericPartDEMElement3D" || $ElementType eq "CylinderPartDEMElement2D"} { # set dem_strategy "sphere_strategy" # } elseif {$ElementType eq "SphericContPartDEMElement3D" || $ElementType eq "CylinderContPartDEMElement3D"} { From 6f6d75b63a5267cb109401516d2360aee17e7efd Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 21 May 2021 12:04:36 +0200 Subject: [PATCH 260/556] fixed inactive inlet bug --- kratos.gid/apps/CDEM/xml/XmlController.tcl | 4 ---- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 16 +++++++++++----- kratos.gid/apps/DEM/write/writeMaterials.tcl | 6 ++++++ kratos.gid/scripts/Writing/Writing.tcl | 4 ++++ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 3b3f8f181..f6ed87ad5 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -8,14 +8,10 @@ proc CDEM::xml::Init { } { variable dir Model::InitVariables dir $CDEM::dir Model::ForgetElements - Model::ForgetMaterials Model::ForgetConstitutiveLaws Model::getElements ElementsC.xml - Model::ForgetConditions Model::getConditions Conditions.xml - Model::getConditions "../../DEM/xml/Conditions.xml" Model::getConstitutiveLaws ConstitutiveLawsC.xml - Model::getMaterials "../../DEM/xml/Materials.xml" Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml } diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 7c9401d50..57a0bbfa2 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -33,11 +33,16 @@ proc DEM::write::GetInletConditionXpath { } { return $xp1 } -proc DEM::write::GetInletGroups { } { +# That can be all or active / All by default +proc DEM::write::GetInletGroups { {that all}} { set groups [list ] foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetInletConditionXpath]/group] { set groupid [$group @n] + if {$that eq "active"} { + set active_inlet [write::getValueByNodeChild $group SetActive] + if {[write::isBooleanFalse $active_inlet]} {continue} + } lappend groups [write::GetWriteGroupName $groupid] } return $groups @@ -127,6 +132,11 @@ proc DEM::write::writeInletMeshes { } { set mid [write::AddSubmodelpart $condition_name $groupid] set props [DEM::write::FindPropertiesBySubmodelpart $inletProperties $mid] if {$props eq ""} {W "Error printing inlet $groupid"} + set is_active [dict get $props Material Variables SetActive] + if {[write::isBooleanFalse $is_active]} { + continue + } + set group_real_name [write::GetWriteGroupName $groupid] set gdict [dict create] set f "%10i\n" @@ -135,10 +145,6 @@ proc DEM::write::writeInletMeshes { } { write::WriteString "Begin SubModelPart $mid // Group $groupid // Subtree Inlet" write::WriteString " Begin SubModelPartData" - set is_active [dict get $props Material Variables SetActive] - if {$is_active=="No"} { - continue - } if {[write::isBooleanTrue $is_active]} { set motion_type [dict get $props Material Variables InletMotionType] diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index b2e0b59f3..14fc90523 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -52,6 +52,12 @@ proc DEM::write::getDEMMaterialsDict { } { set gnodes [[customlib::GetBaseRoot] selectNodes "//condition/group"] foreach gnode $gnodes { set mat_child [$gnode selectNodes "value\[@n='Material'\]"] + set active_group_node [$gnode selectNodes "value\[@n='SetActive'\]"] + if {$active_group_node ne ""} { + if {[write::isBooleanFalse [write::getValueByNode $active_group_node]]} { + continue + } + } if {$mat_child ne ""} { set mat_name [write::getValueByNode $mat_child] set group_name [write::GetWriteGroupName [$gnode @n]] diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 0e850807e..e2d33d864 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -485,6 +485,10 @@ proc write::getValueByNode { node {what noforce} } { } return [getFormattedValue [get_domnode_attribute $node v]] } +proc write::getValueByNodeChild { parent_node child_name {what noforce} } { + set node [$parent_node find n $child_name] + return [write::getValueByNode $node $what] +} proc write::getValueByXPath { xpath { it "" }} { set root [customlib::GetBaseRoot] set node [$root selectNodes $xpath] From 12ed098d9c65e728feb35c86c1e019fbe3830064 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 21 May 2021 16:51:30 +0200 Subject: [PATCH 261/556] Working on cdem --- .../apps/CDEM/examples/ContSpheresDrop3D.tcl | 6 +- .../apps/CDEM/examples/ContinuumDrop2D.tcl | 10 +-- kratos.gid/apps/CDEM/start.tcl | 2 +- .../apps/CDEM/write/writeMDPA_Inlet.tcl | 39 ------------ .../apps/CDEM/write/writeMDPA_Parts.tcl | 24 +++---- .../apps/CDEM/write/writeMDPA_Walls.tcl | 63 ++++--------------- .../CDEM/write/writeProjectParameters.tcl | 26 +++----- kratos.gid/apps/CDEM/xml/AdvancedSettings.spd | 18 ++++++ .../apps/CDEM/xml/ConstitutiveLawsC.xml | 9 --- kratos.gid/apps/CDEM/xml/ElementsC.xml | 8 ++- kratos.gid/apps/CDEM/xml/Main.spd | 7 ++- .../apps/CDEM/xml/MaterialRelations.xml | 9 +++ kratos.gid/apps/CDEM/xml/Materials.spd | 4 -- kratos.gid/apps/CDEM/xml/PartsCont.spd | 23 ------- kratos.gid/apps/CDEM/xml/SolutionStrategy.spd | 28 +-------- kratos.gid/apps/CDEM/xml/TestMaterial.spd | 10 +++ kratos.gid/apps/CDEM/xml/XmlController.tcl | 13 +++- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 7 +-- .../material_relations/MaterialRelations.xml | 2 +- .../scripts/Controllers/CommonProcs.tcl | 7 ++- kratos.gid/scripts/Model/Entity.tcl | 5 +- 21 files changed, 114 insertions(+), 206 deletions(-) delete mode 100644 kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl create mode 100644 kratos.gid/apps/CDEM/xml/AdvancedSettings.spd create mode 100644 kratos.gid/apps/CDEM/xml/MaterialRelations.xml delete mode 100644 kratos.gid/apps/CDEM/xml/Materials.spd delete mode 100644 kratos.gid/apps/CDEM/xml/PartsCont.spd create mode 100644 kratos.gid/apps/CDEM/xml/TestMaterial.spd diff --git a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl index 2107d4370..5c59cee21 100644 --- a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl @@ -39,14 +39,14 @@ proc ::CDEM::examples::AssignToTreeContSpheres { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] - set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"] + set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props # Parts set DEMParts [spdAux::getRoute "DEMParts"] set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts Body] $DEMPartsNode setAttribute ov volume - set props [list Material "DEMCont-DefaultMaterial"] + set props [list Material "DEM-DefaultMaterial"] spdAux::SetValuesOnBaseNode $DEMPartsNode $props # DEM FEM Walls @@ -59,7 +59,7 @@ proc ::CDEM::examples::AssignToTreeContSpheres { } { set DEMInlet "$DEMConditions/condition\[@n='Inlet'\]" set inletNode [customlib::AddConditionGroupOnXPath $DEMInlet "Inlet"] $inletNode setAttribute ov surface - set props [list Material "DEMCont-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] + set props [list Material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"] spdAux::SetValuesOnBaseNode $inletNode $props # DEM custom submodelpart diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index 88c50f98c..e5baecf5a 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -54,35 +54,35 @@ proc ::CDEM::examples::AssignToTreeContinuumDrop { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] - set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"] + set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] spdAux::SetValuesOnBaseNode $material_node $props # Parts set DEMParts [spdAux::getRoute "DEMParts"] set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts LowPart] $DEMPartsNode setAttribute ov surface - set props [list Material "DEMCont-DefaultMaterial"] + set props [list Material "DEM-DefaultMaterial"] spdAux::SetValuesOnBaseNode $DEMPartsNode $props # Parts set DEMParts [spdAux::getRoute "DEMParts"] set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts MidPart] $DEMPartsNode setAttribute ov surface - set props [list Material "DEMCont-DefaultMaterial"] + set props [list Material "DEM-DefaultMaterial"] spdAux::SetValuesOnBaseNode $DEMPartsNode $props # Parts set DEMParts [spdAux::getRoute "DEMParts"] set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts TopPart] $DEMPartsNode setAttribute ov surface - set props [list Material "DEMCont-DefaultMaterial"] + set props [list Material "DEM-DefaultMaterial"] spdAux::SetValuesOnBaseNode $DEMPartsNode $props # Parts set DEMParts [spdAux::getRoute "DEMParts"] set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts Sand] $DEMPartsNode setAttribute ov surface - set props [list Material "DEMCont-DefaultMaterial"] + set props [list Material "DEM-DefaultMaterial"] spdAux::SetValuesOnBaseNode $DEMPartsNode $props # DEM FEM Walls diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index 989108827..f9260af6a 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -40,7 +40,7 @@ proc ::CDEM::LoadMyFiles { } { uplevel #0 [list source [file join $dir write write.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Parts.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Walls.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] + # uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] uplevel #0 [list source [file join $dir examples examples.tcl]] } diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl deleted file mode 100644 index 687d7ace6..000000000 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl +++ /dev/null @@ -1,39 +0,0 @@ -proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clusters} { - set inlet_element_type SphericContinuumParticle3D - if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} { - set contains_clusters 1 - if {[dict get $inletProperties $groupid ClusterType] eq "FromFile"} { - set custom_file_name [dict get $inletProperties $groupid ClusterFilename] - set only_name [file tail $custom_file_name] - write::WriteString " CLUSTER_FILE_NAME $only_name" - - } else { - set cluster_file_name [dict get $inletProperties $groupid ClusterType] - lassign [GetClusterFileNameAndReplaceInletElementType $cluster_file_name] inlet_element_type cluster_file_name - write::WriteString " CLUSTER_FILE_NAME $cluster_file_name" - } - } - - if {[dict get $inletProperties $groupid InletElementType] eq "SphericParticle3D"} { - dict set inletProperties $groupid InletElementType SphericContinuumParticle3D - } - - write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE SphericContinuumParticle3D" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " CONTAINS_CLUSTERS $contains_clusters" - # Change to SphericSwimmingParticle3D in FLUIDDEM interface -} - -proc DEM::write::DefineInletConditions2D {inletProperties groupid mid contains_clusters} { - set inlet_element_type CylinderContinuumParticle2D - - if {[dict get $inletProperties $groupid InletElementType] eq "CylinderParticle2D"} { - dict set inletProperties $groupid InletElementType CylinderContinuumParticle2D - } - write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]" - write::WriteString " CONTAINS_CLUSTERS 0" - # Change to SphericSwimmingParticle3D in FLUIDDEM interface -} \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index e416d351d..62843babd 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -1,4 +1,4 @@ -proc DEM::write::WriteMDPAParts { } { +proc CDEM::write::WriteMDPAParts { } { variable last_property_id # Prepare properties @@ -63,11 +63,11 @@ proc CDEM::write::GetDEMGroupsCustomSubmodelpart { } { set groups [list ] set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "DEM"} { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] - } + set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] + if {$destination_mdpa == "DEM"} { + set groupid [$group @n] + lappend groups [write::GetWriteGroupName $groupid] + } } return $groups } @@ -76,12 +76,12 @@ proc CDEM::write::writeSphereRadius { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute partscont_un]]/group" foreach group [$root selectNodes $xp1] { - set groupid [$group @n] - set grouppid [write::GetWriteGroupName $groupid] - write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid" - GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"] - write::WriteString "End NodalData" - write::WriteString "" + set groupid [$group @n] + set grouppid [write::GetWriteGroupName $groupid] + write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid" + GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"] + write::WriteString "End NodalData" + write::WriteString "" } } diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl index 2771c0040..893b7707d 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl @@ -1,66 +1,29 @@ -proc DEM::write::WriteMDPAWalls { } { - # Headers - write::writeModelPartData - # Material - set wall_properties [WriteRigidWallProperties] - # Nodal coordinates (only for Walls ) - write::writeNodalCoordinatesOnGroups [DEM::write::GetRigidWallsGroups] - write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp] - # Nodal conditions and conditions - DEM::write::writeConditions $wall_properties - - # SubmodelParts - DEM::write::writeWallConditionMeshes - - # CustomSubmodelParts - WriteWallCustomSmp -} - - -proc CDEM::write::WriteWallCustomSmp { } { - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" - set i $DEM::write::last_property_id - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - incr i - set groupid [$group @n] - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "FEM"} { - write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid" - write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid" - write::WriteString "End SubModelPartData" - write::WriteString "Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]] - write::WriteString "End SubModelPartNodes" - write::WriteString "End SubModelPart" - write::WriteString "" - } - } -} - -proc DEM::write::DefineFEMExtraConditions {group_node} { +proc DEM::write::DefineFEMExtraConditions {props} { set material_analysis [write::getValue DEMTestMaterial Active] if {$material_analysis == "true"} { - set is_material_test [write::getValueByNode [$group_node selectNodes "./value\[@n='MaterialTest'\]"]] + set is_material_test [dict get $props Material Variables MaterialTest] if {$is_material_test == "true"} { - set as_condition [write::getValueByNode [$group_node selectNodes "./value\[@n='DefineTopBot'\]"]] + set as_condition [dict get $props Material Variables DefineTopBot] if {$as_condition eq "top"} { write::WriteString " TOP 1" write::WriteString " BOTTOM 0" } else { write::WriteString " TOP 0" - write::WriteString " BOTTOM 1"} + write::WriteString " BOTTOM 1" + } } } else { - write::WriteString " TOP 0" - write::WriteString " BOTTOM 0"} - set GraphPrint [write::getValueByNode [$group_node selectNodes "./value\[@n='GraphPrint'\]"]] - if {$GraphPrint == "true" || $material_analysis == "true"} { - set GraphPrintval 1 - } else { - set GraphPrintval 0 + write::WriteString " TOP 0" + write::WriteString " BOTTOM 0" } + + set GraphPrint [dict get $props Material Variables GraphPrint] + set GraphPrintval 0 + if {[write::isBooleanTrue $GraphPrint]} { + set GraphPrintval 1 + } write::WriteString " FORCE_INTEGRATION_GROUP $GraphPrintval" } \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl index ddc75e773..a60553da1 100644 --- a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl @@ -4,24 +4,6 @@ proc CDEM::write::getParametersDict { } { set project_parameters_dict [DEM::write::getParametersDict] - set ElementType SphericContPartDEMElement3D - if {$ElementType eq "SphericPartDEMElement3D" || $ElementType eq "CylinderPartDEMElement2D"} { - set dem_strategy "sphere_strategy" - } elseif {$ElementType eq "SphericContPartDEMElement3D" || $ElementType eq "CylinderContPartDEMElement3D"} { - set dem_strategy "continuum_sphere_strategy" - } elseif {$ElementType eq "ThermalSphericPartDEMElement3D"} { - set dem_strategy "thermal_sphere_strategy" - } elseif {$ElementType eq "ThermalSphericContPartDEMElement3D"} { - set dem_strategy "thermal_continuum_sphere_strategy" - } elseif {$ElementType eq "SinteringSphericConPartDEMElement3D"} { - set dem_strategy "thermal_continuum_sphere_strategy" - } elseif {$ElementType eq "IceContPartDEMElement3D"} { - set dem_strategy "ice_continuum_sphere_strategy" - } - - dict set project_parameters_dict "solver_settings" "strategy" $dem_strategy - dict set project_parameters_dict "ElementType" $ElementType - dict set project_parameters_dict "DeltaOption" [write::getValue AdvOptions DeltaOption] dict set project_parameters_dict "SearchTolerance" [write::getValue AdvOptions TangencyAbsoluteTolerance] dict set project_parameters_dict "CoordinationNumber" [write::getValue AdvOptions TangencyCoordinationNumber] @@ -51,6 +33,11 @@ proc CDEM::write::getParametersDict { } { return $project_parameters_dict } + +proc DEM::write::GetDemStrategyName { } { + return continuum_sphere_strategy +} + proc CDEM::write::GetTimeSettings { } { return [DEM::write::GetTimeSettings] } @@ -61,5 +48,6 @@ proc CDEM::write::GetGravity { } { proc CDEM::write::writeParametersEvent { } { write::SetParallelismConfiguration - write::WriteJSON [CDEM::write::getParametersDict] + set cdem_parameters [CDEM::write::getParametersDict] + write::WriteJSON $cdem_parameters } diff --git a/kratos.gid/apps/CDEM/xml/AdvancedSettings.spd b/kratos.gid/apps/CDEM/xml/AdvancedSettings.spd new file mode 100644 index 000000000..76a67775b --- /dev/null +++ b/kratos.gid/apps/CDEM/xml/AdvancedSettings.spd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml index c83d59a50..bdfd30432 100644 --- a/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml +++ b/kratos.gid/apps/CDEM/xml/ConstitutiveLawsC.xml @@ -75,14 +75,5 @@ - diff --git a/kratos.gid/apps/CDEM/xml/ElementsC.xml b/kratos.gid/apps/CDEM/xml/ElementsC.xml index 7e022da47..cf3035529 100644 --- a/kratos.gid/apps/CDEM/xml/ElementsC.xml +++ b/kratos.gid/apps/CDEM/xml/ElementsC.xml @@ -12,7 +12,9 @@ - + + + @@ -26,7 +28,9 @@ - + + + diff --git a/kratos.gid/apps/CDEM/xml/Main.spd b/kratos.gid/apps/CDEM/xml/Main.spd index 03269c12d..72fb69f01 100644 --- a/kratos.gid/apps/CDEM/xml/Main.spd +++ b/kratos.gid/apps/CDEM/xml/Main.spd @@ -1,11 +1,12 @@ - + - - + + + diff --git a/kratos.gid/apps/CDEM/xml/MaterialRelations.xml b/kratos.gid/apps/CDEM/xml/MaterialRelations.xml new file mode 100644 index 000000000..2b83ac5c3 --- /dev/null +++ b/kratos.gid/apps/CDEM/xml/MaterialRelations.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/xml/Materials.spd b/kratos.gid/apps/CDEM/xml/Materials.spd deleted file mode 100644 index 4bf435d87..000000000 --- a/kratos.gid/apps/CDEM/xml/Materials.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/CDEM/xml/PartsCont.spd b/kratos.gid/apps/CDEM/xml/PartsCont.spd deleted file mode 100644 index 1b96531fc..000000000 --- a/kratos.gid/apps/CDEM/xml/PartsCont.spd +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd b/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd index ad856d9ac..5c6db3687 100644 --- a/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/CDEM/xml/SolutionStrategy.spd @@ -26,30 +26,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/kratos.gid/apps/CDEM/xml/TestMaterial.spd b/kratos.gid/apps/CDEM/xml/TestMaterial.spd new file mode 100644 index 000000000..6ee532a63 --- /dev/null +++ b/kratos.gid/apps/CDEM/xml/TestMaterial.spd @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index f6ed87ad5..647079621 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -8,10 +8,10 @@ proc CDEM::xml::Init { } { variable dir Model::InitVariables dir $CDEM::dir Model::ForgetElements - Model::ForgetConstitutiveLaws Model::getElements ElementsC.xml Model::getConditions Conditions.xml Model::getConstitutiveLaws ConstitutiveLawsC.xml + Model::getMaterialRelations MaterialRelations.xml Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml } @@ -23,8 +23,19 @@ proc CDEM::xml::getUniqueName {name} { proc CDEM::xml::CustomTree { args } { DEM::xml::CustomTree args + set root [customlib::GetBaseRoot] + if {[$root selectNodes "[spdAux::getRoute DEMStratSection]/container\[@n='AdvOptions'\]"] eq ""} { + gid_groups_conds::addF [spdAux::getRoute DEMStratSection] include [list n AdvOptions active 1 path {apps/CDEM/xml/AdvancedSettings.spd}] + } + if {[$root selectNodes "[spdAux::getRoute DEMStratSection]/container\[@n='TestMaterial'\]"] eq ""} { + gid_groups_conds::addF [spdAux::getRoute DEMStratSection] include [list n TestMaterial active 1 path {apps/CDEM/xml/TestMaterial.spd}] + } + gid_groups_conds::addF [spdAux::getRoute BondElem] value [list n TypeOfFailure pn "Type of failure" v No values {Yes,No} icon "black1" help "Displays different numbers for different types of failure. 2: tension. 4: shear or combination of stresses. 6: neighbour not found by search. 8: less bonds than minimum"] spdAux::SetValueOnTreeItem state {[getStateFromXPathValue {string(../value[@n='ContactMeshOption']/@v)} Yes]} BondElem TypeOfFailure + + customlib::ProcessIncludes $::Kratos::kratos_private(Path) + spdAux::parseRoutes } proc CDEM::xml::ProcGetElements { domNode args } { diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index d1696a974..6fa1d8e1c 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -532,10 +532,9 @@ proc DEM::write::writeWallConditionMesh { condition group props } { proc DEM::write::DefineFEMExtraConditions {props} { set GraphPrint [dict get $props Material Variables GraphPrint] - if {$GraphPrint == "true"} { + set GraphPrintval 0 + if {[write::isBooleanTrue $GraphPrint]} { set GraphPrintval 1 - } else { - set GraphPrintval 0 - } + } write::WriteString " FORCE_INTEGRATION_GROUP $GraphPrintval" } diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml index be0a1a24f..e36931836 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.xml @@ -4,7 +4,7 @@ - + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 4577d9dad..cc939b6d3 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -145,13 +145,16 @@ proc spdAux::SetNoneValue {domNode} { proc spdAux::ProcGetConstitutiveLaws { domNode args } { set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] - #W "Const Laws que han pasado la criba: $Claws" + #WV Elementname + #W "Const Laws que han pasado la criba: $Claws $args" if {[llength $Claws] == 0} { set names [list "None"] } { set names [list ] foreach cl $Claws { - lappend names [$cl getName] + if {[$cl cumple {*}$args]} { + lappend names [$cl getName] + } } } set values [join $names ","] diff --git a/kratos.gid/scripts/Model/Entity.tcl b/kratos.gid/scripts/Model/Entity.tcl index 75e460697..f188dbe45 100644 --- a/kratos.gid/scripts/Model/Entity.tcl +++ b/kratos.gid/scripts/Model/Entity.tcl @@ -114,15 +114,16 @@ oo::class create Entity { #W "Cumplimos con los filtros: $args" set c 1 if {$::Kratos::kratos_private(DevMode) ne "release"} { - + # if our mode is debug, it's allowd } elseif {[my getAttribute "ProductionReady"] ne "" && [my getAttribute "ProductionReady"] ne "ProductionReady"} { + # if our mode is release, only release entities #W "[my getName] no paso - [my getAttribute "ProductionReady"] " return 0 } if {$args ne ""} { foreach {k listfiltervalues} {*}$args { set listfiltervalues [string map {, " "} $listfiltervalues] - #W "k: $k vs : $listfiltervalues" + # W "k: $k vs : $listfiltervalues" set listattributesvalues [string map {, " "} [my getAttribute $k]] #W "My value $listattributesvalues" set b1 0 From 67494aafe307682e94dbd853e34e20fdeda964fb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 31 May 2021 19:58:08 +0200 Subject: [PATCH 262/556] cluster inlets --- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 57a0bbfa2..6168adae6 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -116,8 +116,8 @@ proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { } write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties Material Variables InletElementType]" - write::WriteString " ELEMENT_TYPE [dict get $inletProperties Material Variables InletElementType]" + write::WriteString " INJECTOR_ELEMENT_TYPE SphericParticle3D" + write::WriteString " ELEMENT_TYPE $inlet_element_type" write::WriteString " CONTAINS_CLUSTERS $contains_clusters" } From 2bc36cd2d616954aa7fb7ec0283a17298636cce1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 31 May 2021 20:36:57 +0200 Subject: [PATCH 263/556] Delete repeated code --- .../apps/CDEM/write/writeMDPA_Parts.tcl | 111 ++---------------- .../apps/CDEM/write/writeMDPA_Walls.tcl | 2 +- .../CDEM/write/writeProjectParameters.tcl | 3 + kratos.gid/apps/CDEM/xml/XmlController.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 2 +- kratos.gid/apps/DEM/write/write_utils.tcl | 2 + 7 files changed, 16 insertions(+), 108 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 62843babd..88d5095c7 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -1,15 +1,12 @@ proc CDEM::write::WriteMDPAParts { } { - variable last_property_id - - # Prepare properties - write::processMaterials "" $last_property_id; - set last_property_id [expr $last_property_id + [dict size $::write::mat_dict]] - # Headers write::writeModelPartData + # Process properties + DEM::write::processPartMaterials + # Materials - CDEM::write::writeMaterialsParts + DEM::write::writeMaterialsParts # Nodal coordinates (only for DEM Parts ) write::writeNodalCoordinatesOnParts @@ -22,7 +19,7 @@ proc CDEM::write::WriteMDPAParts { } { write::writeElementConnectivities # Begin NodalData RADIUS - CDEM::write::writeSphereRadius + DEM::write::writeSphereRadius # Begin NodalData COHESIVE_GROUP CDEM::write::writeCohesiveGroups @@ -38,54 +35,6 @@ proc CDEM::write::WriteMDPAParts { } { CDEM::write::WriteCustomDEMSmp } -## TODO: proc under revision. This works but the proc is different from the DEM::write version. -proc CDEM::write::WriteCustomDEMSmp { } { - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" - foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_id [$group @n] - set group_raw [write::GetWriteGroupName $group_id] - set good_name [write::transformGroupName $group_raw] - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "DEM"} { - write::WriteString "Begin SubModelPart $good_name \/\/ Custom SubModelPart. Group name: $group_id" - write::WriteString "Begin SubModelPartData" - write::WriteString "End SubModelPartData" - write::WriteString "Begin SubModelPartNodes" - GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group_id] [subst "%10i\n"]] - write::WriteString "End SubModelPartNodes" - write::WriteString "End SubModelPart" - write::WriteString "" - } - } -} - -proc CDEM::write::GetDEMGroupsCustomSubmodelpart { } { - set groups [list ] - set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" - foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { - set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]] - if {$destination_mdpa == "DEM"} { - set groupid [$group @n] - lappend groups [write::GetWriteGroupName $groupid] - } - } - return $groups -} - -proc CDEM::write::writeSphereRadius { } { - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute [GetAttribute partscont_un]]/group" - foreach group [$root selectNodes $xp1] { - set groupid [$group @n] - set grouppid [write::GetWriteGroupName $groupid] - write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid" - GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"] - write::WriteString "End NodalData" - write::WriteString "" - } -} - - proc CDEM::write::writeCohesiveGroups { } { set root [customlib::GetBaseRoot] if {$::Model::SpatialDimension eq "3D"} { @@ -97,8 +46,8 @@ proc CDEM::write::writeCohesiveGroups { } { foreach group [$root selectNodes $xp1] { incr cohesive_group set groupid [$group @n] - set grouppid [write::GetWriteGroupName $groupid] - write::WriteString "Begin NodalData COHESIVE_GROUP // GUI group identifier: $grouppid" + set group_id [write::GetWriteGroupName $groupid] + write::WriteString "Begin NodalData COHESIVE_GROUP // GUI group identifier: $group_id" GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 $cohesive_group\n"] write::WriteString "End NodalData" write::WriteString "" @@ -125,49 +74,3 @@ proc CDEM::write::writeSkinSphereNodes { } { write::WriteString "End NodalData" write::WriteString "" } - - -proc CDEM::write::writeMaterialsParts { } { - variable partsProperties - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'PartsCont'\]/group" - set partsProperties $::write::mat_dict - set printable [list PARTICLE_DENSITY \ - YOUNG_MODULUS \ - POISSON_RATIO \ - FRICTION \ - COEFFICIENT_OF_RESTITUTION \ - ROLLING_FRICTION \ - ROLLING_FRICTION_WITH_WALLS \ - CONTACT_SIGMA_MIN \ - CONTACT_TAU_ZERO \ - CONTACT_INTERNAL_FRICC \ - ConstitutiveLaw \ - SHEAR_ENERGY_COEF \ - LOOSE_MATERIAL_YOUNG_MODULUS \ - FRACTURE_ENERGY \ - INTERNAL_FRICTION_ANGLE \ - ROTATIONAL_MOMENT_COEFFICIENT \ - PARTICLE_COHESION] - - foreach group [dict keys $partsProperties] { - write::WriteString "Begin Properties [dict get $partsProperties $group MID]" - foreach {prop val} [dict get $partsProperties $group] { - if {$prop in $printable} { - if {$prop eq "ConstitutiveLaw"} { - write::WriteString " DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME $val" - } elseif {$prop eq "FRICTION"} { - set propvalue [expr {tan($val)}] - write::WriteString " FRICTION $propvalue" - } else { - write::WriteString " $prop $val" - } - } - } - if {$::Model::SpatialDimension eq "2D"} { - write::WriteString " DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_D_Linear_viscous_Coulomb2D" - } else { - write::WriteString " DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_D_Linear_viscous_Coulomb"} - - write::WriteString "End Properties\n" - } -} diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl index 893b7707d..c42367c99 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl @@ -1,6 +1,6 @@ - +# Overwritten to ad TOP BOTTOM params proc DEM::write::DefineFEMExtraConditions {props} { set material_analysis [write::getValue DEMTestMaterial Active] if {$material_analysis == "true"} { diff --git a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl index a60553da1..ab8884119 100644 --- a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl @@ -2,8 +2,10 @@ # Project Parameters proc CDEM::write::getParametersDict { } { + # Get the DEM original json and set project_parameters_dict [DEM::write::getParametersDict] + # Add advanced options dict set project_parameters_dict "DeltaOption" [write::getValue AdvOptions DeltaOption] dict set project_parameters_dict "SearchTolerance" [write::getValue AdvOptions TangencyAbsoluteTolerance] dict set project_parameters_dict "CoordinationNumber" [write::getValue AdvOptions TangencyCoordinationNumber] @@ -13,6 +15,7 @@ proc CDEM::write::getParametersDict { } { dict set project_parameters_dict "ComputeStressTensorOption" [write::getValue AdvOptions ComputeStressTensorOption] dict set project_parameters_dict "MaxAmplificationRatioOfSearchRadius" 1000 + # Add material testing set material_test_parameters_dict [dict create] set material_analysis [write::getValue DEMTestMaterial Active] if {$material_analysis == "true"} { diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 647079621..c29e930c4 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -21,7 +21,7 @@ proc CDEM::xml::getUniqueName {name} { } proc CDEM::xml::CustomTree { args } { - DEM::xml::CustomTree args + DEM::xml::CustomTree {*}$args set root [customlib::GetBaseRoot] if {[$root selectNodes "[spdAux::getRoute DEMStratSection]/container\[@n='AdvOptions'\]"] eq ""} { diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 66847e9bf..d224a265e 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -15,7 +15,7 @@ proc DEM::write::WriteMDPAParts { } { write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundaryC] write::writeNodalCoordinatesOnGroups [GetNodesForGraphs] - # Element connectivities (Groups on STParts) + # Element connectivities (Groups on Parts) PrepareCustomMeshedParts write::writeElementConnectivities RestoreCustomMeshedParts diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 6fa1d8e1c..c473d5045 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -509,7 +509,7 @@ proc DEM::write::writeWallConditionMesh { condition group props } { } write::WriteString " IDENTIFIER [write::transformGroupName $group]" - DefineFEMExtraConditions $props + DEM::write::DefineFEMExtraConditions $props } write::WriteString " End SubModelPartData" diff --git a/kratos.gid/apps/DEM/write/write_utils.tcl b/kratos.gid/apps/DEM/write/write_utils.tcl index 1efdd9104..b9a03662a 100644 --- a/kratos.gid/apps/DEM/write/write_utils.tcl +++ b/kratos.gid/apps/DEM/write/write_utils.tcl @@ -551,6 +551,7 @@ proc DEM::write::AssignGeometricalEntitiesToSkinSphere2D {} { set list_of_lines [GiD_Geometry list line 1:end] if {![GiD_Groups exists SKIN_SPHERE_DO_NOT_DELETE]} { GiD_Groups create SKIN_SPHERE_DO_NOT_DELETE + GiD_Groups edit state SKIN_SPHERE_DO_NOT_DELETE hidden } set points_to_add_to_skin_circles [list] @@ -570,6 +571,7 @@ proc DEM::write::AssignGeometricalEntitiesToSkinSphere3D {} { set list_of_surfaces [GiD_Geometry list surface 1:end] if {![GiD_Groups exists SKIN_SPHERE_DO_NOT_DELETE]} { GiD_Groups create SKIN_SPHERE_DO_NOT_DELETE + GiD_Groups edit state SKIN_SPHERE_DO_NOT_DELETE hidden } set points_to_add_to_skin_spheres [list] From 2e38e82686a47e8a55ff74e6b405168849953839 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 1 Jun 2021 16:41:10 +0200 Subject: [PATCH 264/556] fixed cdem inlet name --- kratos.gid/apps/CDEM/start.tcl | 2 +- kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl | 7 +++++++ kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 11 +++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index f9260af6a..989108827 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -40,7 +40,7 @@ proc ::CDEM::LoadMyFiles { } { uplevel #0 [list source [file join $dir write write.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Parts.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Walls.tcl]] - # uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] + uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] uplevel #0 [list source [file join $dir examples examples.tcl]] } diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl new file mode 100644 index 000000000..393696ce7 --- /dev/null +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl @@ -0,0 +1,7 @@ + +proc DEM::write::GetInletElementType {} { + return SphericContinuumParticle3D +} +proc DEM::write::GetInjectorElementType {} { + return SphericContinuumParticle3D +} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index 6168adae6..e4c797791 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -100,7 +100,7 @@ proc DEM::write::GetUsedClusters { } { } proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { - set inlet_element_type SphericParticle3D + set inlet_element_type [DEM::write::GetInletElementType] if {[dict get $inletProperties Material Variables InletElementType] eq "Cluster3D"} { set contains_clusters 1 if {[dict get $inletProperties Material Variables ClusterType] eq "FromFile"} { @@ -116,11 +116,18 @@ proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { } write::WriteString " IDENTIFIER $mid" - write::WriteString " INJECTOR_ELEMENT_TYPE SphericParticle3D" + write::WriteString " INJECTOR_ELEMENT_TYPE [DEM::write::GetInjectorElementType]" write::WriteString " ELEMENT_TYPE $inlet_element_type" write::WriteString " CONTAINS_CLUSTERS $contains_clusters" } +proc DEM::write::GetInletElementType {} { + return SphericParticle3D +} +proc DEM::write::GetInjectorElementType {} { + return SphericParticle3D +} + proc DEM::write::writeInletMeshes { } { variable inletProperties From 77c0859a5e699af74f2e3d0f7a9eb8f1032a37f8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 1 Jun 2021 17:55:21 +0200 Subject: [PATCH 265/556] fixed names of element in injector --- kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl | 2 -- kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl | 9 +++++---- kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 10 ---------- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 9 +++++++-- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index e5baecf5a..37c5b4202 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -15,8 +15,6 @@ proc ::CDEM::examples::ContinuumDrop2D {args} { GidUtils::UpdateWindow LAYER GiD_Process 'Zoom Frame - MeshGenerationOKDo 1.0 - } proc ::CDEM::examples::DrawGeometryContinuumDrop { } { diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl index 393696ce7..ef1f3959c 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl @@ -1,7 +1,8 @@ proc DEM::write::GetInletElementType {} { - return SphericContinuumParticle3D + set elem_name SphericContinuumParticle3D + if {$::Model::SpatialDimension eq "2D"} { + set elem_name CylinderContinuumParticle2D + } + return $elem_name } -proc DEM::write::GetInjectorElementType {} { - return SphericContinuumParticle3D -} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index d680cf1e8..975c21bb8 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -15,16 +15,6 @@ proc ::DEM::examples::CirclesDrop {args} { GidUtils::UpdateWindow LAYER GiD_Process 'Zoom Frame - # MESH - # TODO: Remove this once the Granular mesher works fine with multiple surfaces - ## Remember the old mesher - set prev_mesher [GiD_Set CircleMesher] - ## Set RBall as circle mesher - GiD_Set CircleMesher 0 - ## Mesh - MeshGenerationOKDo 1.0 - ## Restore previous circle mesher preference - GiD_Set CircleMesher $prev_mesher } proc ::DEM::examples::DrawGeometryCirclesDrop { } { diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index e4c797791..da3175deb 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -122,10 +122,15 @@ proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { } proc DEM::write::GetInletElementType {} { - return SphericParticle3D + set elem_name SphericParticle3D + if {$::Model::SpatialDimension eq "2D"} { + set elem_name CylinderParticle2D + } + return $elem_name } + proc DEM::write::GetInjectorElementType {} { - return SphericParticle3D + return [DEM::write::GetInletElementType] } proc DEM::write::writeInletMeshes { } { From 098d175a015ab32a6b9ca631ee7b89f456845965 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 2 Jun 2021 15:58:07 +0200 Subject: [PATCH 266/556] missing material relation window --- .../apps/CDEM/images/material-relation.png | Bin 0 -> 1982 bytes kratos.gid/apps/CDEM/start.tcl | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 kratos.gid/apps/CDEM/images/material-relation.png diff --git a/kratos.gid/apps/CDEM/images/material-relation.png b/kratos.gid/apps/CDEM/images/material-relation.png new file mode 100644 index 0000000000000000000000000000000000000000..fe736f4495d03714a2bf6fbd5e3b76eb4fc9f50e GIT binary patch literal 1982 zcmV;v2SNCWP)8OQ%Kvk!Kcr?Mghu=oI@Ml1A)f#3rHH)zxY(TFxCku;~CG^UNGr1d0eYm-`& z+9c+*o>*g})|iS|jiG8liAPhU77#F^5Ty%*=c2H%JNv%9Gt4eK>7tn2Irq%m$K3my z|NXx2-eE9?bWH!RFb2#V0!(Gxh@n;E;DL^o6+$}$xWK|fA8*rp2d(&u5K@ z*vx1RCHjkWQnt|JAZy`bl8Mv95zkm~>7XplO4bbpsbQ7OVFJ&-eA6QVVFCgijl8gq zIG9}?t7rV!ro4M%wQL_$Q80uFCNHlsEqrTK zfR7@}vssJsw8u$Up*((G2&ja29oT%`3VWXmLu7y&f-8W;48oXk!%8R_k4NV;tTSbm z{U5;Q&{q|6nfbLUi)NNkCiGfiOhu4hbytAFCM(VxuA;lM2Q{RUA~XP3yZ*|E4Hio{KwZy)%jJSzdcG4@)m=29zeNTDK6ykG319~V#Ex9Cv5C9gi zOGgyp7@Sv^X6-TWJnI9PtW07JL3z6#=9fJ0BZVE08yAcTzzb1fs23rwh!8FxKn9y5 z>szI%_|paZXPfIBmpvlD1TI?jbL|_KqWIXk{s60u3n@U*m;k&G=L}aUL@(+{l?WjK zJi=zl`gLjAYj*S7A8v6qJ4AqStX}u7?oh9XCmMf%HO58v1>l7^Yp9hV{!QZ&i*$C0 ztPiVU_#$hezSG@iVW^cdaf*Z~zg6vSra=e(08bbfLwlb9!w?pfix53%B=wlbE|9fz zDh9uDzA&}T*>Z~pEtZ+Co}E^N?H4_6e*g#88Z*BYfES|7P=mhC+t4yPxdPM>|A4LO z&5p)OMgawzq@HEiLVj0DJaPpJj9D@Oq5bMVno$4ob#zqsV5r+F)(212A|@pYa|)(o z=BjB_(_!ZtxIrNvtp?v^mjN&=1z@)3wm6#3FdR7U2b%O%KXMfv#mM|3z&c~L450X_ zQ@DP#1xYyxh|h>YXl(HC*R~D8c%cJLWi6OdFa`O0N8GOOiW#M8m5{|e`nX52BfsAE zpA*6oaH*OF`5T>E{thBvg7vLA&_)ge40c=a=Y)^3;xCzaaD75R*{|)tg_E1k;rW&V z1V;_a&YSEw9A6Ilp?&}i_9=HhQO#GD2u8@w(`4ioI=3A0o1cafJAT+=@Bs|auRJv4 zG?Y;+5}%7je0ns(Vnc<6L4VsITEFN(^ZQ@J+3Uf&hNTGqUWoXf)nvop63&S3=r=z; zQ0`n)!(Tck=)yguPFemF&#TA%w_5?=$>v;W#}5OT+lTPc>@#>EHxkX4Z=%0vfF22k zUl3d^JSrTCsZ-E?vKMP>a}Yks3&7)G;wcI+63~S0`aO2rsz!VLry@Y2YUbjX@VYMy zdzWCtwPij9M1bVe$UBt@eR2c_J1nqBMyQL@A|yr!Q(Zqwa?YaQ@=}EP0UVg|Px}3S z3Q#ZjBVNh=%F$RM0>mid=DenOx0>#PG9!Gd{;?4SzP8}typzcLGz-ylBLmt%cU>Qj z=9Xc7y}<@&|aPYNZdrW_I9%`6ZZI@BkLQG#_f6e4Dme?5KF_5^fcD;MuBt zsDp>wt+#pnHT8rHU`S*B?=Oa)O{S0iUVxAv>xvG{u%)c@H^OJW$nyaR>Bb4_X4}dz z;Oa;8gA))IEqOtw8C}Dp$ z=T`l|aX+}E}ezTqg?B(VO>UTGb073vN zQy<@1YAN1Mo9@u;@gGG)!)4s&(AN&cS*D~4$ErKTL@mLN?~>H?ieMt?AB+-hx|>zI z%-c4&;cgRF^P8U`xL_D{$;nR#Z{9J@J~Pwhc8Z77?~;U5v4T^gS$*~FhePkZY$LoN zz3`Lb4y2<}SPGi;DM4wEE>`4jh;dJv<#u?!)jtBKVo3*QY^ZRR9;~)io}yK~lJve) zYoLJzh!6=RM9)o(pRRr=HHL{#ibPaw7$RtJ)`SExS`FO;#D7D&C%A0H%G Date: Wed, 2 Jun 2021 16:53:25 +0200 Subject: [PATCH 267/556] material relation window --- kratos.gid/apps/DEM/start.tcl | 1 + kratos.gid/apps/DEM/xml/XmlController.tcl | 3 -- .../material_relations_window.tcl | 41 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index e28ed14c2..fee203a51 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -33,6 +33,7 @@ proc ::DEM::LoadMyFiles { } { uplevel #0 [list source [file join $dir xml material_relations MaterialRelations.tcl]] uplevel #0 [list source [file join $dir xml XmlController.tcl]] + uplevel #0 [list source [file join $dir xml material_relations material_relations_window.tcl]] uplevel #0 [list source [file join $dir write write.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Parts.tcl]] uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index a88f474e4..2c7177aec 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -135,9 +135,6 @@ proc DEM::xml::MaterialRelationsValidation { } { return $err } -proc DEM::xml::ShowMaterialRelationWindow { } { - -} DEM::xml::Init diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl new file mode 100644 index 000000000..16b8aa81c --- /dev/null +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -0,0 +1,41 @@ + + +proc DEM::xml::ShowMaterialRelationWindow { } { + # window name + set w .gid.windowmatrel + + if {[winfo exist $w]} {destroy $w} + toplevel $w + wm withdraw $w + set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] + set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] + wm geom $w +$x+$y + wm transient $w .gid + InitWindow $w [_ "Kratos Multiphysics - DEM - Material Relations"] Kratos "" "" 1 + + set materials [list ] + foreach mat_node [DEM::write::GetMaterialsNodeList] { + set mat_name [write::getValueByNode $mat_node] + if {$mat_name ni $materials} { + lappend materials $mat_name + } + } + W $materials + + set table $w.tree + ttk::treeview $table -columns $materials -displaycolumns $materials + foreach header $materials { + $table heading $header -text $header -anchor center + } + pack $table + + set length [llength $materials] + for {set i 0} { $i < $length } { incr i } { + set row [list] + set ref_mat_name [lindex $materials $i] + for {set j 0} { $j < $length } { incr j } { + lappend row X + } + $table insert "" end -id $ref_mat_name -text $ref_mat_name -values $row + } +} \ No newline at end of file From c5944c02ffdff5062e30b904e094bdfea01c36e6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 3 Jun 2021 10:46:58 +0200 Subject: [PATCH 268/556] hotfix constitutive law = None --- kratos.gid/scripts/Writing/WriteMaterials.tcl | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index f827b94ae..f4c0545bc 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -39,35 +39,40 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set element_name [write::getValueByNode $element_node "force"] } + set processed 0 set claw_node [$gNode selectNodes ".//value\[@n = 'ConstitutiveLaw'\]"] if {$claw_node ne ""} { set claw [write::getValueByNode $claw_node "force"] - set const_law [Model::getConstitutiveLaw $claw] - set output_type [$const_law getOutputMode] - if {$output_type eq "Parameters"} { - set s1 [$gNode selectNodes ".//value"] - } else { - set s1 "" - set matvalueNode [$gNode selectNodes $xp2] - if {$matvalueNode ne ""} { - set real_material_name [write::getValueByNode $matvalueNode "force"] - set xp3 "[spdAux::getRoute $materials_un]/blockdata\[@n='material' and @name='$real_material_name']" - set matNode [$root selectNodes $xp3] - set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] + if {$claw ne "None"} { + set processed 1 + set const_law [Model::getConstitutiveLaw $claw] + set output_type [$const_law getOutputMode] + if {$output_type eq "Parameters"} { + set s1 [$gNode selectNodes ".//value"] + } else { + set s1 "" + set matvalueNode [$gNode selectNodes $xp2] + if {$matvalueNode ne ""} { + set real_material_name [write::getValueByNode $matvalueNode "force"] + set xp3 "[spdAux::getRoute $materials_un]/blockdata\[@n='material' and @name='$real_material_name']" + set matNode [$root selectNodes $xp3] + set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] + } } - } - foreach valueNode $s1 { - write::forceUpdateNode $valueNode - set name [$valueNode getAttribute n] - set state [get_domnode_attribute $valueNode state] - if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { - # All the introduced values are translated to 'm' and 'kg' with the help of this function - set value [gid_groups_conds::convert_value_to_default $valueNode] - dict set mat_dict $submodelpart_id $name $value + foreach valueNode $s1 { + write::forceUpdateNode $valueNode + set name [$valueNode getAttribute n] + set state [get_domnode_attribute $valueNode state] + if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { + # All the introduced values are translated to 'm' and 'kg' with the help of this function + set value [gid_groups_conds::convert_value_to_default $valueNode] + dict set mat_dict $submodelpart_id $name $value + } } } - } else { + } + if {!$processed} { set s1 "" set matvalueNode [$gNode selectNodes $xp2] if {$matvalueNode ne ""} { @@ -172,7 +177,7 @@ proc write::getPropertiesListByConditionXPath {cnd_xpath {write_claw_name "True" set variables_dict [dict create] foreach prop [dict keys [dict get $mat_dict $submodelpart_id] ] { if {$prop ni $exclusionList} { - dict set variables_list $prop [getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] + dict set variables_dict $prop [getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] } } set material_dict [dict create] @@ -181,7 +186,7 @@ proc write::getPropertiesListByConditionXPath {cnd_xpath {write_claw_name "True" set constitutive_law_name [$constitutive_law getKratosName] dict set material_dict constitutive_law [dict create name $constitutive_law_name] } - dict set material_dict Variables $variables_list + dict set material_dict Variables $variables_dict dict set material_dict Tables dictnull dict set prop_dict Material $material_dict From 28870b0f056129efdf73cea971ac841ca32de353 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 3 Jun 2021 14:29:25 +0200 Subject: [PATCH 269/556] table values OK --- .../material_relations_window.tcl | 67 ++++++++++++------- 1 file changed, 43 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl index 16b8aa81c..dc457e24b 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -1,17 +1,7 @@ proc DEM::xml::ShowMaterialRelationWindow { } { - # window name - set w .gid.windowmatrel - if {[winfo exist $w]} {destroy $w} - toplevel $w - wm withdraw $w - set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] - set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] - wm geom $w +$x+$y - wm transient $w .gid - InitWindow $w [_ "Kratos Multiphysics - DEM - Material Relations"] Kratos "" "" 1 set materials [list ] foreach mat_node [DEM::write::GetMaterialsNodeList] { @@ -20,22 +10,51 @@ proc DEM::xml::ShowMaterialRelationWindow { } { lappend materials $mat_name } } - W $materials - - set table $w.tree - ttk::treeview $table -columns $materials -displaycolumns $materials - foreach header $materials { - $table heading $header -text $header -anchor center + + set relations [dict create] + + foreach relation [DEM::write::GetMaterialRelationsNodeList] { + + set mat_a [write::getValueByNode [$relation selectNodes "./value\[@n = 'MATERIAL_A'\]"]] + set mat_b [write::getValueByNode [$relation selectNodes "./value\[@n = 'MATERIAL_B'\]"]] + dict lappend relations $mat_a $mat_b + if {$mat_a ne $mat_b} { dict lappend relations $mat_b $mat_a } } - pack $table + + if {[llength $materials]>0} { + # window name + set w .gid.windowmatrel + + if {[winfo exist $w]} {destroy $w} + toplevel $w + wm withdraw $w + set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] + set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] + wm geom $w +$x+$y + wm transient $w .gid + InitWindow $w [_ "Kratos Multiphysics - DEM - Material Relations"] Kratos "" "" 1 + + + set table $w.tree + ttk::treeview $table -columns $materials -displaycolumns $materials + foreach header $materials { + $table heading $header -text $header -anchor center + } + pack $table - set length [llength $materials] - for {set i 0} { $i < $length } { incr i } { - set row [list] - set ref_mat_name [lindex $materials $i] - for {set j 0} { $j < $length } { incr j } { - lappend row X + set length [llength $materials] + for {set i 0} { $i < $length } { incr i } { + set row [list] + set ref_mat_name [lindex $materials $i] + for {set j 0} { $j < $length } { incr j } { + set check_mat_name [lindex $materials $j] + set exists 0 + if {[dict exists $relations $ref_mat_name]} { + if {$check_mat_name in [dict get $relations $ref_mat_name]} {set exists 1} + } + if {$exists} {lappend row V} {lappend row O} + } + $table insert "" end -id $ref_mat_name -text $ref_mat_name -values $row } - $table insert "" end -id $ref_mat_name -text $ref_mat_name -values $row } } \ No newline at end of file From a87ae5342c13b234307e49e87df0b20cece28dff Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 3 Jun 2021 14:34:13 +0200 Subject: [PATCH 270/556] cell message --- .../DEM/xml/material_relations/material_relations_window.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl index dc457e24b..207190671 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -52,7 +52,7 @@ proc DEM::xml::ShowMaterialRelationWindow { } { if {[dict exists $relations $ref_mat_name]} { if {$check_mat_name in [dict get $relations $ref_mat_name]} {set exists 1} } - if {$exists} {lappend row V} {lappend row O} + if {$exists} {lappend row OK} {lappend row MISSING} } $table insert "" end -id $ref_mat_name -text $ref_mat_name -values $row } From 75a38d08675a3a8b3e66797dea8597a36391f757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 9 Jun 2021 10:56:11 +0200 Subject: [PATCH 271/556] initial cond --- kratos.gid/apps/ShallowWater/xml/InitialConditions.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd index 24fc0e016..9631d109a 100644 --- a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -1,4 +1,4 @@ - + From ab5979ae87bcada7a0b7b167a26993bc66744de5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 14 Jun 2021 17:30:18 +0200 Subject: [PATCH 272/556] add prefix to submodelparts --- .../apps/FSI/write/writeProjectParameters.tcl | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl index cb1b3518a..af46a4466 100644 --- a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl @@ -69,13 +69,21 @@ proc FSI::write::GetSolverSettingsDict { } { # structure interface - set structure_interfaces_list [write::GetSubModelPartFromCondition STLoads StructureInterface2D] - lappend structure_interfaces_list {*}[write::GetSubModelPartFromCondition STLoads StructureInterface3D] + set structure_interfaces_list [list ] + set structure_interfaces_list_raw [write::GetSubModelPartFromCondition STLoads StructureInterface2D] + lappend structure_interfaces_list_raw {*}[write::GetSubModelPartFromCondition STLoads StructureInterface3D] + foreach interface $structure_interfaces_list_raw { + lappend structure_interfaces_list [Structural::write::GetAttribute model_part_name].$interface + } dict set solver_settings_dict coupling_settings structure_interfaces_list $structure_interfaces_list # Fluid interface set fluid_interface_uniquename FluidNoSlipInterface$::Model::SpatialDimension - set fluid_interfaces_list [write::GetSubModelPartFromCondition FLBC $fluid_interface_uniquename] + set fluid_interfaces_list [list ] + set fluid_interfaces_list_raw [write::GetSubModelPartFromCondition FLBC $fluid_interface_uniquename] + foreach interface $structure_interfaces_list_raw { + lappend fluid_interfaces_list [Fluid::write::GetAttribute model_part_name].$interface + } dict set solver_settings_dict coupling_settings fluid_interfaces_list $fluid_interfaces_list # Change the input_filenames @@ -140,12 +148,12 @@ proc FSI::write::GetMappingSettingsList { } { set structural_interface_name StructureInterface$::Model::SpatialDimension set structuralInterface [lindex [write::GetSubModelPartFromCondition STLoads $structural_interface_name] 0] foreach fluid_interface [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute FLBC]/condition\[@n = '$fluid_interface_name'\]/group" ] { - set map [dict create] - set mapper_face [write::getValueByNode [$fluid_interface selectNodes ".//value\[@n='mapper_face']"] ] - dict set map mapper_face $mapper_face - dict set map fluid_interface_submodelpart_name [write::getSubModelPartId $fluid_interface_name [get_domnode_attribute $fluid_interface n]] - dict set map structure_interface_submodelpart_name $structuralInterface - lappend mappingsList $map + set map [dict create] + set mapper_face [write::getValueByNode [$fluid_interface selectNodes ".//value\[@n='mapper_face']"] ] + dict set map mapper_face $mapper_face + dict set map fluid_interface_submodelpart_name [Fluid::write::GetAttribute model_part_name].[write::getSubModelPartId $fluid_interface_name [get_domnode_attribute $fluid_interface n]] + dict set map structure_interface_submodelpart_name [Structural::write::GetAttribute model_part_name].$structuralInterface + lappend mappingsList $map } return $mappingsList From 638b36d17d3850fa2c0b33970f9d1ae7b357e600 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 14 Jun 2021 17:36:59 +0200 Subject: [PATCH 273/556] function can't contain python code --- kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index 1b549b746..352908032 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -188,12 +188,13 @@ proc FSI::examples::TreeAssignationMokChannelFlexibleWall {args} { spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions {container[@n='FSI']/container[@n='Fluid']/container[@n='BoundaryConditions']} + # Fluid Interface set fluidInlet "$fluidConditions/condition\[@n='AutomaticInlet$nd'\]" # Fluid Inlet - set function {0.1214*(1-cos(0.1*pi*t))*y*(1-y) if t<10 else 0.2428*y*(1-y)} - Fluid::xml::CreateNewInlet Inlet {new false name Total} true $function + Fluid::xml::CreateNewInlet Inlet {new true name interval1 ini 0 end 10.0} true "0.1214*(1-cos(0.1*pi*t))*y*(1-y)" + Fluid::xml::CreateNewInlet Inlet {new true name interval2 ini 10.0 end end} true "0.2428*y*(1-y)" # Fluid Outlet set fluidOutlet "$fluidConditions/condition\[@n='Outlet$nd'\]" From 101b0d59201b4974dfa26110af148f92cd50651a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 14 Jun 2021 17:47:45 +0200 Subject: [PATCH 274/556] Also turek example needs fix --- kratos.gid/apps/FSI/examples/TurekBenchmark.tcl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl index 22d679105..bce479c4c 100644 --- a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl +++ b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl @@ -175,12 +175,13 @@ proc FSI::examples::TreeAssignationTurekBenchmark {args} { spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions {container[@n='FSI']/container[@n='Fluid']/container[@n='BoundaryConditions']} + # Fluid Interface set fluidInlet "$fluidConditions/condition\[@n='AutomaticInlet$nd'\]" - + # Fluid Inlet - set function {1.5*(0.5*(1-cos(0.5*pi*t))*1.0)*(4.0/0.1681)*y*(0.41-y) if t<2.0 else 1.5*(1.0)*(4.0/0.1681)*y*(0.41-y)} - Fluid::xml::CreateNewInlet Inlet {new false name Total} true $function + Fluid::xml::CreateNewInlet Inlet {new true name interval1 ini 0 end 2.0} true "1.5*(0.5*(1-cos(0.5*pi*t))*1.0)*(4.0/0.1681)*y*(0.41-y)" + Fluid::xml::CreateNewInlet Inlet {new true name interval2 ini 2.0 end end} true "1.5*(1.0)*(4.0/0.1681)*y*(0.41-y)" # Fluid Outlet set fluidOutlet "$fluidConditions/condition\[@n='Outlet$nd'\]" From 79bcbac1bdf43a3480c17f8939b6f04f96de791d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 14 Jun 2021 18:02:23 +0200 Subject: [PATCH 275/556] capital End --- kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index 352908032..df035503b 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -194,7 +194,7 @@ proc FSI::examples::TreeAssignationMokChannelFlexibleWall {args} { # Fluid Inlet Fluid::xml::CreateNewInlet Inlet {new true name interval1 ini 0 end 10.0} true "0.1214*(1-cos(0.1*pi*t))*y*(1-y)" - Fluid::xml::CreateNewInlet Inlet {new true name interval2 ini 10.0 end end} true "0.2428*y*(1-y)" + Fluid::xml::CreateNewInlet Inlet {new true name interval2 ini 10.0 end End} true "0.2428*y*(1-y)" # Fluid Outlet set fluidOutlet "$fluidConditions/condition\[@n='Outlet$nd'\]" From 5ddbff389f87c26ebbab0657b411071713b1b029 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 15 Jun 2021 21:54:59 +0200 Subject: [PATCH 276/556] remove hexas from fsi structure --- kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index df035503b..d712bbd32 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -164,7 +164,8 @@ proc FSI::examples::AssignMokChannelFlexibleWallMeshSizes3D {args} { GiD_Process Mescape Utilities Variables SizeTransitionsFactor 0.4 escape escape GiD_Process Mescape Meshing ElemType Tetrahedra [GiD_EntitiesGroups get Fluid volumes] escape - GiD_Process Mescape Meshing ElemType Hexahedra [GiD_EntitiesGroups get Structure volumes] escape + GiD_Process Mescape Meshing ElemType Tetrahedra [GiD_EntitiesGroups get Structure volumes] escape + # GiD_Process Mescape Meshing ElemType Hexahedra [GiD_EntitiesGroups get Structure volumes] escape GiD_Process Mescape Meshing Structured Surfaces 14 16 escape $long_side_divisions 12 14 escape $long_side_divisions 45 46 escape escape GiD_Process Mescape Meshing Structured Surfaces 15 escape $short_side_divisions 13 escape $long_side_divisions 45 46 escape escape GiD_Process Mescape Meshing Structured Volumes [GiD_EntitiesGroups get Structure volumes] escape $short_side_divisions 48 escape $long_side_divisions 15 17 52 53 escape escape From 69d353fa84a92521f62a0a38fd3b2f6596a6a3f6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 16 Jun 2021 19:55:29 +0200 Subject: [PATCH 277/556] hotfix DAM2D --- kratos.gid/apps/Dam/write/write.tcl | 15 +++++++++++---- .../apps/Dam/write/writeProjectParameters.tcl | 9 ++++++--- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index a24a446c5..c669fb0d4 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -326,10 +326,12 @@ proc Dam::write::writeThermalElements {} { set ThermalGroups [list] - set mat_dict [write::getMatDict] - foreach part_name [dict keys $mat_dict] { - if {[[Model::getElement [dict get $mat_dict $part_name Element]] getAttribute "ElementType"] eq "Solid"} { - lappend ThermalGroups $part_name + foreach node_part [GetDamPartGroupNodes] { + set element_id [write::getValueByNode [$node_part selectNodes "./value\[@n='Element'\]"] ] + set element [Model::getElement $element_id] + set element_type [$element getAttribute "ElementType"] + if {$element_type eq "Solid"} { + lappend ThermalGroups [$node_part @n] } } @@ -453,6 +455,11 @@ proc Dam::write::getSubModelPartThermalNames { } { return $submodelThermalPartsNames } +proc Dam::write::GetDamPartGroupNodes { } { + set nodes [write::getPartsGroupsId node] + return $nodes +} + proc Dam::write::GetAttribute {att} { variable writeAttributes diff --git a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl index d219a386c..36c2f667a 100644 --- a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl @@ -343,9 +343,12 @@ proc Dam::write::DefinitionDomains { } { set body_part_list [list ] set joint_part_list [list ] set mat_dict [write::getMatDict] - foreach part_name [dict keys $mat_dict] { - if {[[Model::getElement [dict get $mat_dict $part_name Element]] getAttribute "ElementType"] eq "Solid"} { - lappend body_part_list [write::getSubModelPartId Parts $part_name] + foreach node_part [GetDamPartGroupNodes] { + set element_id [write::getValueByNode [$node_part selectNodes "./value\[@n='Element'\]"] ] + set element [Model::getElement $element_id] + set element_type [$element getAttribute "ElementType"] + if {$element_type eq "Solid"} { + lappend body_part_list [write::getSubModelPartId Parts [$node_part @n]] } } dict set domainsDict problem_domain_sub_model_part_list [write::getSubModelPartNames "DamParts"] From 9c69629eac6d7ed00a08d8718be9cab1805c1cfe Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 16 Jun 2021 20:12:39 +0200 Subject: [PATCH 278/556] bug in common write functions --- kratos.gid/scripts/Writing/WriteElements.tcl | 5 +++-- kratos.gid/scripts/Writing/WriteMaterials.tcl | 4 ++-- kratos.gid/scripts/Writing/WriteSubModelPart.tcl | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteElements.tcl b/kratos.gid/scripts/Writing/WriteElements.tcl index d490a449a..3d6c8080c 100644 --- a/kratos.gid/scripts/Writing/WriteElements.tcl +++ b/kratos.gid/scripts/Writing/WriteElements.tcl @@ -20,8 +20,9 @@ proc write::writeGroupElementConnectivities { gNode kelemtype} { set write_properties_in mdpa if {[GetConfigurationAttribute properties_location] ne ""} {set write_properties_in [GetConfigurationAttribute properties_location]} set group [get_domnode_attribute $gNode n] - if { [dict exists $mat_dict $group] && $write_properties_in eq "mdpa"} { - set mid [dict get $mat_dict $group MID] + set submodelpart [write::GetSubModelPartName Parts $group] + if { [dict exists $mat_dict $submodelpart] && $write_properties_in eq "mdpa"} { + set mid [dict get $mat_dict $submodelpart MID] } else { set mid 0 } diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index f4c0545bc..3b4c48735 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -21,7 +21,7 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set nodeApp [spdAux::GetAppIdFromNode $gNode] set group_name [write::GetWriteGroupName [$gNode @n]] set cond_name [[$gNode parent] @n] - set submodelpart_id [write:GetSubModelPartName $cond_name $group_name] + set submodelpart_id [write::GetSubModelPartName $cond_name $group_name] set material_name "material $material_number" if { ![dict exists $mat_dict $submodelpart_id] } { @@ -159,7 +159,7 @@ proc write::getPropertiesListByConditionXPath {cnd_xpath {write_claw_name "True" # Condition name set cond_id [get_domnode_attribute [$gNode parent] n] # We get the submodelpart name and the modelpart.submodelpart - set submodelpart_id [write:GetSubModelPartName $cond_id $group] + set submodelpart_id [write::GetSubModelPartName $cond_id $group] set submodelpart_fullname $submodelpart_id if {$model_part_name ne ""} {set submodelpart_fullname $model_part_name.$submodelpart_id} set submodelpart_id [string trim $submodelpart_id "."] diff --git a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl index f0572d3ca..b8e182837 100644 --- a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl +++ b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl @@ -161,7 +161,7 @@ proc write::GetSubModelPartFromCondition { base_UN condition_id } { return $submodelpart_list } -proc write:GetSubModelPartName {condid group} { +proc write::GetSubModelPartName {condid group} { set group_name [write::GetWriteGroupName $group] set good_name [write::transformGroupName $group_name] return "${condid}_${good_name}" @@ -169,7 +169,7 @@ proc write:GetSubModelPartName {condid group} { proc write::AddSubmodelpart {condid group} { variable submodelparts - set mid [write:GetSubModelPartName $condid $group] + set mid [write::GetSubModelPartName $condid $group] set group_name [write::GetWriteGroupName $group] set good_name [write::transformGroupName $group_name] if {[write::getSubModelPartId $condid $group_name] eq 0} { @@ -180,7 +180,8 @@ proc write::AddSubmodelpart {condid group} { proc write::getSubModelPartId {cid group} { variable submodelparts - + W "$cid $group" + WV submodelparts set find [list $cid ${group}] if {[dict exists $submodelparts $find]} { return [dict get $submodelparts [list $cid ${group}]] From 7f66cd89611bb1980238315ba06fe33e149c9bec Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 16 Jun 2021 20:26:15 +0200 Subject: [PATCH 279/556] messages --- kratos.gid/apps/Dam/write/write.tcl | 6 +----- kratos.gid/scripts/Writing/WriteSubModelPart.tcl | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index c669fb0d4..d36546dbc 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -357,10 +357,7 @@ proc Dam::write::writeThermalElements {} { set old_name_SubModelPart "Thermal_[lindex $ThermalGroups $i]" set new_name_SubModelPart [string map {" " "_"} $old_name_SubModelPart] dict set ThermalSubModelPartDict [lindex $ThermalGroups $i] SubModelPartName $new_name_SubModelPart - } - - } proc Dam::write::writeThermalConnectivities {Group ElemType ElemName ConnectivityType ElementId ElementList} { @@ -394,8 +391,7 @@ proc Dam::write::Quadrilateral2D4Connectivities { ElemId } { set ElementInfo [GiD_Mesh get element $ElemId] #ElementInfo: ... - return "[lindex $ElementInfo 3] [lindex $ElementInfo 4] [lindex $ElementInfo 5]\ - [lindex $ElementInfo 6]" + return "[lindex $ElementInfo 3] [lindex $ElementInfo 4] [lindex $ElementInfo 5] [lindex $ElementInfo 6]" } proc Dam::write::Hexahedron3D8Connectivities { ElemId } { diff --git a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl index b8e182837..3cc6c37ab 100644 --- a/kratos.gid/scripts/Writing/WriteSubModelPart.tcl +++ b/kratos.gid/scripts/Writing/WriteSubModelPart.tcl @@ -180,8 +180,6 @@ proc write::AddSubmodelpart {condid group} { proc write::getSubModelPartId {cid group} { variable submodelparts - W "$cid $group" - WV submodelparts set find [list $cid ${group}] if {[dict exists $submodelparts $find]} { return [dict get $submodelparts [list $cid ${group}]] From 9933dd35d61b9d0c0a0672d3a6b309eb57af641b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 22 Jun 2021 17:40:04 +0200 Subject: [PATCH 280/556] inefficient way but must wait to future versions of gid --- kratos.gid/scripts/Writing/WriteNodes.tcl | 25 ++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteNodes.tcl b/kratos.gid/scripts/Writing/WriteNodes.tcl index 33e69b1bb..89c75b3e0 100644 --- a/kratos.gid/scripts/Writing/WriteNodes.tcl +++ b/kratos.gid/scripts/Writing/WriteNodes.tcl @@ -5,7 +5,12 @@ proc write::writeNodalCoordinatesOnGroups { groups } { # Begin Nodes # // id X Y Z # End Nodes + # TODO: check gid version + set is_coordinates_scaling_fixed 0 if {[llength $groups] >0} { + set mesh_unit [gid_groups_conds::give_mesh_unit] + set mesh_factor [lindex [gid_groups_conds::give_unit_factor L $mesh_unit] 0] + variable formats_dict set id_f [dict get $formats_dict ID] set coord_f [dict get $formats_dict COORDINATE] @@ -14,11 +19,25 @@ proc write::writeNodalCoordinatesOnGroups { groups } { WriteString "${s}Begin Nodes" incr ::write::current_mdpa_indent_level - foreach group $groups { - dict set formats $group "${s}$id_f $coord_f $coord_f $coord_f\n" + set s [mdpaIndent] + if {$is_coordinates_scaling_fixed} { + foreach group $groups { + dict set formats $group "${s}$id_f $coord_f $coord_f $coord_f\n" + } + # TODO: Add factor + GiD_WriteCalculationFile nodes $formats + } else { + foreach group $groups { + set nodes [GiD_EntitiesGroups get $group node] + foreach node $nodes { + lassign [GiD_Mesh get node $node coordinates] x y z + WriteString "${s}$node [expr $mesh_factor*$x] [expr $mesh_factor*$y] [expr $mesh_factor*$z]" + } + } } - GiD_WriteCalculationFile nodes $formats + incr ::write::current_mdpa_indent_level -1 + set s [mdpaIndent] WriteString "${s}End Nodes" WriteString "\n" } From 26e597df74b511bfd4d9845e0e29188e97f67c64 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:02:01 +0200 Subject: [PATCH 281/556] Add material relations --- kratos.gid/apps/FluidDEM/xml/Main.spd | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/FluidDEM/xml/Main.spd b/kratos.gid/apps/FluidDEM/xml/Main.spd index 2395027aa..80ce07f3a 100644 --- a/kratos.gid/apps/FluidDEM/xml/Main.spd +++ b/kratos.gid/apps/FluidDEM/xml/Main.spd @@ -21,6 +21,7 @@ + From b314470b1065c99df5deb4c2f7862922190c0f92 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:03:02 +0200 Subject: [PATCH 282/556] protection against lack of const law --- kratos.gid/scripts/Controllers/CommonProcs.tcl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index cc939b6d3..0de11b04d 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -403,9 +403,11 @@ proc spdAux::ProcPartParamState { domNode args } { set resp [::Model::CheckElemParamState $domNode] if {$resp eq "0"} { set id [$domNode getAttribute n] - set constLaw [get_domnode_attribute [[$domNode parent] selectNodes "./value\[@n='ConstitutiveLaw'\]"] v] - if {$constLaw eq ""} {return hidden} - set resp [Model::CheckConstLawParamState $constLaw $id] + set const_law "" + set const_law_node [[$domNode parent] selectNodes "./value\[@n='ConstitutiveLaw'\]"] + if {$const_law_node ne ""} {set const_law [get_domnode_attribute $const_law_node v]} + if {$const_law eq ""} {return hidden} + set resp [Model::CheckConstLawParamState $const_law $id] } #W "Calculando estado de [$domNode @pn] : $resp" From be490a836e0fd4dd3c222f660d8f90b960985a6e Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:04:06 +0200 Subject: [PATCH 283/556] DEM filters materials by type --- kratos.gid/apps/DEM/xml/Materials.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/DEM/xml/Materials.spd b/kratos.gid/apps/DEM/xml/Materials.spd index 4bf435d87..62d6a1e96 100644 --- a/kratos.gid/apps/DEM/xml/Materials.spd +++ b/kratos.gid/apps/DEM/xml/Materials.spd @@ -1,4 +1,4 @@ - + From f18e1e6afcacaba2c851e05a89f981a7f4afeda4 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:04:24 +0200 Subject: [PATCH 284/556] Fluid dem ask material in dem elements --- kratos.gid/apps/FluidDEM/xml/Elements.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index d0948b597..58d37e2e8 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -12,7 +12,9 @@ - + + + From ce36771a6e62b6273c5a576dff4e9e23d46b3333 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:05:06 +0200 Subject: [PATCH 285/556] Common avoid repeated childs --- .../scripts/Controllers/TreeInjections.tcl | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 423d2e36c..bbaeb66ca 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -266,9 +266,8 @@ proc spdAux::_injectCondsToTree {basenode cond_list {cond_type "normal"} args } } } -proc spdAux::GetParameterValueString { param {forcedParams ""} {base ""}} { +proc spdAux::GetParameterValueString { param forcedParams base} { set node "" - set inName [$param getName] set pn [$param getPublicName] set type [$param getType] @@ -510,7 +509,7 @@ proc spdAux::_insert_cond_param_dependencies {base param_name} { proc spdAux::injectPartInputs { basenode {inputs ""} } { set base [$basenode parent] - set processeds [list ] + set processeds [spdAux::getFromXQueryValue [$base selectNodes "./value/@n"]] spdAux::injectLocalAxesButton $basenode foreach obj [concat [Model::GetElements] [Model::GetConstitutiveLaws]] { set inputs [$obj getInputs] @@ -533,7 +532,7 @@ proc spdAux::injectPartInputs { basenode {inputs ""} } { } proc spdAux::injectConstitutiveLawsInputs { basenode {inputs ""} } { set base [$basenode parent] - set processeds [list ] + set processeds [spdAux::getFromXQueryValue [$base selectNodes "./value/@n"]] spdAux::injectLocalAxesButton $basenode foreach obj [Model::GetConstitutiveLaws] { set inputs [$obj getInputs] @@ -556,7 +555,7 @@ proc spdAux::injectConstitutiveLawsInputs { basenode {inputs ""} } { } proc spdAux::injectPartElementInputs { basenode {inputs ""} } { set base [$basenode parent] - set processeds [list ] + set processeds [spdAux::getFromXQueryValue [$base selectNodes "./value/@n"]] spdAux::injectLocalAxesButton $basenode foreach obj [Model::GetElements] { set inputs [$obj getInputs] @@ -565,7 +564,7 @@ proc spdAux::injectPartElementInputs { basenode {inputs ""} } { lappend processeds $inName set forcedParams [list state {[PartParamState]} ] if {[$in getActualize]} { lappend forcedParams base $obj } - set node [GetParameterValueString $in $forcedParams $obj] + set node [spdAux::GetParameterValueString $in $forcedParams $obj] $base appendXML $node set orig [$base lastChild] @@ -598,6 +597,14 @@ proc spdAux::injectMaterials { basenode args } { $basenode delete } +proc spdAux::getFromXQueryValue {obj} { + set ret [list ] + foreach pair $obj { + lappend ret [lindex $pair end] + } + return $ret +} + proc spdAux::injectLocalAxesButton { basenode } { # set base [$basenode parent] # set node " From 1706191cffa55d1b0b80c53e3fd6228e29f265b0 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 29 Jun 2021 16:18:35 +0200 Subject: [PATCH 286/556] icons --- kratos.gid/apps/DEM/images/drop.png | Bin 1769 -> 491 bytes kratos.gid/apps/FluidDEM/images/drop.png | Bin 1769 -> 491 bytes kratos.gid/apps/FluidDEM/xml/XmlController.tcl | 5 ----- 3 files changed, 5 deletions(-) diff --git a/kratos.gid/apps/DEM/images/drop.png b/kratos.gid/apps/DEM/images/drop.png index f473a22ebc10c88b1bac5c6f1e98058181a28595..eb9ebee00c368993c57694e1830f187936605c7c 100644 GIT binary patch literal 491 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 - + @@ -34,12 +34,13 @@ + - + From cfbc895e0a6b3968a7fbc4e21d15e34542dd2eac Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 1 Aug 2021 22:55:15 +0200 Subject: [PATCH 306/556] QSVMSDEMcoupled3D uses permeability as list of 6 values --- kratos.gid/apps/FluidDEM/xml/Elements.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 1c34adba2..823b60f1a 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -34,7 +34,12 @@ - + + + + + + From 51e201c7cfc45d0f9e0d1603a5ebd74e1abaf661 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 1 Aug 2021 23:28:58 +0200 Subject: [PATCH 307/556] write delegated json --- kratos.gid/apps/Fluid/write/write.tcl | 5 +++++ kratos.gid/scripts/Writing/WriteMaterials.tcl | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index a2cdbbce2..92a58b663 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -79,6 +79,11 @@ proc Fluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpar if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } +proc Fluid::write::GetMaterialsFile { {write_const_law True} {include_modelpart_name True} } { + set model_part_name "" + if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} + return [write::getPropertiesJson [GetAttribute parts_un] $write_const_law $model_part_name] +} proc Fluid::write::Validate {} { set err "" diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 3b4c48735..35706aac9 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -133,12 +133,18 @@ proc write::writeMaterials { {appid ""} {const_law_write_name ""}} { } } - -proc write::writePropertiesJsonFile {{parts_un ""} {fname "materials.json"} {write_claw_name "True"} {model_part_name ""}} { +proc write::getPropertiesJson {{parts_un ""} {write_claw_name "True"} {model_part_name ""}} { if {$parts_un eq ""} {set parts_un [GetConfigurationAttribute parts_un]} set mats_json [getPropertiesList $parts_un $write_claw_name $model_part_name] + return $mats_json +} + +proc write::writePropertiesJsonFile {{parts_un ""} {fname "materials.json"} {write_claw_name "True"} {model_part_name ""}} { + write::writePropertiesJsonFileDone $fname [write::getPropertiesJson $parts_un $write_claw_name $model_part_name] +} +proc write::writePropertiesJsonFileDone {fname json} { write::OpenFile $fname - write::WriteJSON $mats_json + write::WriteJSON $json write::CloseFile } From 67b0aec11c19d89c43a28f7d8eb1d2d8e2a28111 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 1 Aug 2021 23:29:30 +0200 Subject: [PATCH 308/556] Write permeability as matrix --- kratos.gid/apps/FluidDEM/write/write.tcl | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index aeb1573ca..eeb4d6a8c 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -39,7 +39,7 @@ proc FluidDEM::write::writeCustomFilesEvent { } { } proc FluidDEM::write::WriteMaterialsFile { } { - Fluid::write::WriteMaterialsFile True + FluidDEM::write::writeFluidModifiedMaterials [Fluid::write::GetMaterialsFile True] DEM::write::writeMaterialsFile } @@ -67,4 +67,21 @@ proc Fluid::write::getFluidModelPartFilename { } { return [Kratos::GetModelName]Fluid } +proc FluidDEM::write::writeFluidModifiedMaterials {fluid_materials_json} { + set new_json [dict create] + foreach property [dict get $fluid_materials_json properties] { + if {[dict exists $property Material Variables PERMEABILITY_11]} { + set permeability_1 [list [dict get $property Material Variables PERMEABILITY_11] [dict get $property Material Variables PERMEABILITY_12] [dict get $property Material Variables PERMEABILITY_13]] + set permeability_2 [list [dict get $property Material Variables PERMEABILITY_12] [dict get $property Material Variables PERMEABILITY_22] [dict get $property Material Variables PERMEABILITY_23]] + set permeability_3 [list [dict get $property Material Variables PERMEABILITY_13] [dict get $property Material Variables PERMEABILITY_23] [dict get $property Material Variables PERMEABILITY_33]] + dict unset property Material Variables PERMEABILITY_11; dict unset property Material Variables PERMEABILITY_12; dict unset property Material Variables PERMEABILITY_13 + dict unset property Material Variables PERMEABILITY_22; dict unset property Material Variables PERMEABILITY_23 + dict unset property Material Variables PERMEABILITY_33 + dict set property Material Variables PERMEABILITY [list $permeability_1 $permeability_2 $permeability_3] + } + dict lappend new_json properties $property + } + write::writePropertiesJsonFileDone [Fluid::write::GetAttribute materials_file] $new_json +} + FluidDEM::write::Init \ No newline at end of file From d3d9e88cc83fd631b37dbaed777498ef52dfcd83 Mon Sep 17 00:00:00 2001 From: jginternational Date: Thu, 12 Aug 2021 11:20:18 +0200 Subject: [PATCH 309/556] mac chorradas to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cd4439db9..ae13983b4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ kratos.gid/exec/* .vscode/ custom_tools/* +.DS_Store From 8821a7a02f0ec65358a3b24b4c2904f6dc013f09 Mon Sep 17 00:00:00 2001 From: jginternational Date: Thu, 12 Aug 2021 11:23:00 +0200 Subject: [PATCH 310/556] #821 proposal- add nodes info --- kratos.gid/apps/Common/xml/GenericSubModelPart.spd | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/Common/xml/GenericSubModelPart.spd b/kratos.gid/apps/Common/xml/GenericSubModelPart.spd index 958be1fda..e4573d07a 100644 --- a/kratos.gid/apps/Common/xml/GenericSubModelPart.spd +++ b/kratos.gid/apps/Common/xml/GenericSubModelPart.spd @@ -1,5 +1,6 @@ + \ No newline at end of file From 11374531f8676e9f52ecbcf60f84f199b388607c Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 13 Aug 2021 16:38:40 +0200 Subject: [PATCH 311/556] this was changed in gid, breaking most apps --- kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl | 2 +- kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd | 2 +- kratos.gid/apps/DEM/xml/Parts.spd | 2 +- kratos.gid/apps/Dam/xml/Parts.spd | 2 +- kratos.gid/apps/Fluid/xml/Parts.spd | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index fb8b0b75b..60613cf7a 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -43,7 +43,7 @@ proc ConjugateHeatTransfer::write::writeModelPartEvent { } { # Convection diffusion mdpa ConvectionDiffusion::write::Init - ConvectionDiffusion::write::SetCoordinatesByGroups 1 + ConvectionDiffusion::write::SetAttribute writeCoordinatesByGroups 1 write::writeAppMDPA ConvectionDiffusion write::RenameFileInModel "$filename.mdpa" "${filename}_[GetAttribute solid_mdpa_suffix].mdpa" } diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd index d0270f331..988040d18 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/apps/DEM/xml/Parts.spd b/kratos.gid/apps/DEM/xml/Parts.spd index 4e0f14cf8..3f6bf7382 100644 --- a/kratos.gid/apps/DEM/xml/Parts.spd +++ b/kratos.gid/apps/DEM/xml/Parts.spd @@ -1,6 +1,6 @@ - + diff --git a/kratos.gid/apps/Dam/xml/Parts.spd b/kratos.gid/apps/Dam/xml/Parts.spd index a54340701..a133648b2 100644 --- a/kratos.gid/apps/Dam/xml/Parts.spd +++ b/kratos.gid/apps/Dam/xml/Parts.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/apps/Fluid/xml/Parts.spd b/kratos.gid/apps/Fluid/xml/Parts.spd index 468e7c85e..f670b9bc5 100644 --- a/kratos.gid/apps/Fluid/xml/Parts.spd +++ b/kratos.gid/apps/Fluid/xml/Parts.spd @@ -1,6 +1,6 @@ - + From df3ba13f69a3a3b117c32502a3ac318e60dac3ea Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Aug 2021 15:54:54 +0200 Subject: [PATCH 312/556] Improving in matrix --- kratos.gid/apps/FluidDEM/xml/Elements.xml | 7 +------ kratos.gid/scripts/Controllers/TreeInjections.tcl | 7 +++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index 823b60f1a..d8c738ffe 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -34,12 +34,7 @@ - - - - - - + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index bbaeb66ca..28cfe2af4 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -374,6 +374,13 @@ proc spdAux::GetParameterValueString { param forcedParams base} { } } + "matrix" { + set rows [$param getAttribute "rows"] + set cols [$param getAttribute "cols"] + set components "" + for {set i 0} {$i < [expr max($rows,$cols)]} {incr i} {lappend components $i}; set components [join $components ","] + append node "" + } "combo" { if {[$param getAttribute "combotype"] eq "material"} { append node "" From d0eb1ef7aea05250641481cbbc47f7f9cfb3e094 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Aug 2021 21:09:28 +0200 Subject: [PATCH 313/556] matrix available in next gid version --- .../scripts/Controllers/TreeInjections.tcl | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 28cfe2af4..ba2a53f18 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -379,7 +379,21 @@ proc spdAux::GetParameterValueString { param forcedParams base} { set cols [$param getAttribute "cols"] set components "" for {set i 0} {$i < [expr max($rows,$cols)]} {incr i} {lappend components $i}; set components [join $components ","] - append node "" + #append node "" + set value [split $v ","] + append node "" + append node " " + append node " " + for {set i 0} {$i < $rows} {incr i} { + for {set j 0} {$j < $cols} {incr j} { + set vi [lindex $value [expr ($i*$cols)+$j] ] + append node " " + } + } + append node " " + append node " " + append node "" + } "combo" { if {[$param getAttribute "combotype"] eq "material"} { From 8ed6952f63fb673b2649011c6fcec3f1fa5ad45c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Aug 2021 22:40:27 +0200 Subject: [PATCH 314/556] improve the process material function --- kratos.gid/apps/FluidDEM/xml/Elements.xml | 1 + .../scripts/Controllers/TreeInjections.tcl | 2 +- kratos.gid/scripts/Utils.tcl | 21 +++--- kratos.gid/scripts/Writing/WriteMaterials.tcl | 74 +++++++++---------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/xml/Elements.xml b/kratos.gid/apps/FluidDEM/xml/Elements.xml index d8c738ffe..7106195c2 100644 --- a/kratos.gid/apps/FluidDEM/xml/Elements.xml +++ b/kratos.gid/apps/FluidDEM/xml/Elements.xml @@ -59,6 +59,7 @@ + diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index ba2a53f18..755709040 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -381,7 +381,7 @@ proc spdAux::GetParameterValueString { param forcedParams base} { for {set i 0} {$i < [expr max($rows,$cols)]} {incr i} {lappend components $i}; set components [join $components ","] #append node "" set value [split $v ","] - append node "" + append node "" append node " " append node " " for {set i 0} {$i < $rows} {incr i} { diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 0e03d3d2f..beea82943 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -182,12 +182,12 @@ proc Kratos::LoadEnvironment { } { # W $data # Close the file close $fp - } - # Preferences are written in json format - foreach {k v} [write::json2dict $data] { - # W "$k $v" - # Foreach pair key value, restore it - set kratos_private($k) $v + # Preferences are written in json format + foreach {k v} [write::json2dict $data] { + # W "$k $v" + # Foreach pair key value, restore it + set kratos_private($k) $v + } } } @@ -291,8 +291,9 @@ proc Kratos::OpenCaseIn {program} { } } - -proc xmlprograms::OpenBrowserForDirectory { baseframe variable} { - set $variable [MessageBoxGetFilename directory write [_ "Select kratos debug compiled folder (kratos / bin / debug"]] - return variable +catch { + proc xmlprograms::OpenBrowserForDirectory { baseframe variable} { + set $variable [MessageBoxGetFilename directory write [_ "Select kratos debug compiled folder (kratos / bin / debug"]] + return variable + } } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 35706aac9..dc4bca265 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -5,6 +5,7 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set new_mats [dict create ] + # Prepare paths set parts [GetConfigurationAttribute parts_un] set materials_un [GetConfigurationAttribute materials_un] set root [customlib::GetBaseRoot] @@ -17,20 +18,29 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { } set xp2 ".//value\[@n='Material']" set material_number [expr {$last_assigned_id == -1 ? [llength [dict keys $mat_dict] ] : $last_assigned_id }] + + # Foreach group applied to parts foreach gNode [$root selectNodes $xp1] { + # Get the application. Important in Mixed apps (multiple inheritance). set nodeApp [spdAux::GetAppIdFromNode $gNode] + # Get the write group name. Used as unique id due to intervals and child tricks. set group_name [write::GetWriteGroupName [$gNode @n]] + # This group nodes are (always) child of condition (by definition), so get the condition is easy. set cond_name [[$gNode parent] @n] + # Using the condition and the group name, we can get the submodelpart id. A submodelpart is always the joint of condition + group. set submodelpart_id [write::GetSubModelPartName $cond_name $group_name] - set material_name "material $material_number" + #set material_name "material $material_number". if { ![dict exists $mat_dict $submodelpart_id] } { + # increment the material number. In multi part apps, this material number is passed as variable, in order to keep the numeration. incr material_number set mid $material_number + # Init the dictionary with initial data. dict set mat_dict $submodelpart_id MID $material_number dict set mat_dict $submodelpart_id APPID $nodeApp + # Get the elements name. Even if it's not used in this section, it's important to call it, so dependencies are applied. catch { set element_node [$gNode selectNodes ".//value\[@n = 'Element'\]"] if {$element_node ne ""} { @@ -39,40 +49,25 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set element_name [write::getValueByNode $element_node "force"] } - set processed 0 + # We have 2 ways to get the properties (output type): + # A) Defined by all the values available below parts + # B) (By default) Defined also by the material parameters + + # Get the constitutive law output type + set output_type Materials set claw_node [$gNode selectNodes ".//value\[@n = 'ConstitutiveLaw'\]"] if {$claw_node ne ""} { set claw [write::getValueByNode $claw_node "force"] if {$claw ne "None"} { - set processed 1 set const_law [Model::getConstitutiveLaw $claw] set output_type [$const_law getOutputMode] - if {$output_type eq "Parameters"} { - set s1 [$gNode selectNodes ".//value"] - } else { - set s1 "" - set matvalueNode [$gNode selectNodes $xp2] - if {$matvalueNode ne ""} { - set real_material_name [write::getValueByNode $matvalueNode "force"] - set xp3 "[spdAux::getRoute $materials_un]/blockdata\[@n='material' and @name='$real_material_name']" - set matNode [$root selectNodes $xp3] - set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] - } - } - - foreach valueNode $s1 { - write::forceUpdateNode $valueNode - set name [$valueNode getAttribute n] - set state [get_domnode_attribute $valueNode state] - if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { - # All the introduced values are translated to 'm' and 'kg' with the help of this function - set value [gid_groups_conds::convert_value_to_default $valueNode] - dict set mat_dict $submodelpart_id $name $value - } - } } - } - if {!$processed} { + } + # Case A -> By parameters below parts + if {$output_type eq "Parameters"} { + set s1 [$gNode selectNodes ".//value"] + } else { + # Case B -> Include materials parameters set s1 "" set matvalueNode [$gNode selectNodes $xp2] if {$matvalueNode ne ""} { @@ -81,15 +76,20 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set matNode [$root selectNodes $xp3] set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] } - foreach valueNode $s1 { - write::forceUpdateNode $valueNode - set name [$valueNode getAttribute n] - set state [get_domnode_attribute $valueNode state] - if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { - # All the introduced values are translated to 'm' and 'kg' with the help of this function - set value [gid_groups_conds::convert_value_to_default $valueNode] - dict set mat_dict $submodelpart_id $name $value - } + } + + # Once we have all the 'value' nodes, lets get it's value and add them to the list + foreach valueNode $s1 { + # Force update, useful in combo with part dependencies + write::forceUpdateNode $valueNode + # name and state, useful for filtering + set name [$valueNode getAttribute n] + set state [get_domnode_attribute $valueNode state] + # hidden values and constitutive law are not included in properties + if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { + # All the introduced values are translated to 'm' and 'kg' with the help of this function + set value [gid_groups_conds::convert_value_to_default $valueNode] + dict set mat_dict $submodelpart_id $name $value } } dict set new_mats $submodelpart_id [dict get $mat_dict $submodelpart_id] From 56ba5b05600d637a698e4a3f547594459ae6e914 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Aug 2021 23:03:50 +0200 Subject: [PATCH 315/556] fix matrix display --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 755709040..8801156db 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -381,9 +381,9 @@ proc spdAux::GetParameterValueString { param forcedParams base} { for {set i 0} {$i < [expr max($rows,$cols)]} {incr i} {lappend components $i}; set components [join $components ","] #append node "" set value [split $v ","] - append node "" - append node " " - append node " " + append node "" + append node " " + append node " " for {set i 0} {$i < $rows} {incr i} { for {set j 0} {$j < $cols} {incr j} { set vi [lindex $value [expr ($i*$cols)+$j] ] From 9e217cbe877b4153fe954892ac5c8e6e9296c95b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 17 Aug 2021 23:04:08 +0200 Subject: [PATCH 316/556] prepare output structure for matrix --- kratos.gid/scripts/Writing/WriteMaterials.tcl | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index dc4bca265..965531304 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -87,8 +87,22 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set state [get_domnode_attribute $valueNode state] # hidden values and constitutive law are not included in properties if {$state ne "hidden" || $name eq "ConstitutiveLaw"} { - # All the introduced values are translated to 'm' and 'kg' with the help of this function - set value [gid_groups_conds::convert_value_to_default $valueNode] + if {[$valueNode hasAttribute type] && [$valueNode @type] eq "matrix"} { + set value [list ] + set M [gid_groups_conds::read_matrix_function $valueNode] + for {set i 0} {$i < [$valueNode @dimension_function_rows]} {incr i} { + set row [list ] + set cols [$valueNode @dimension_function_cols] + for {set j 0} {$j < $cols} {incr j} { + lappend row [lindex $M [expr ($i*$cols)+$j]] + } + lappend value $row + } + W $value + } else { + # All the introduced values are translated to 'm' and 'kg' with the help of this function + set value [gid_groups_conds::convert_value_to_default $valueNode] + } dict set mat_dict $submodelpart_id $name $value } } From 95e3e9ef5e41204d532ae9ab680dbe6ec126ee54 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 19 Aug 2021 17:35:46 +0200 Subject: [PATCH 317/556] Stabilized matrix write --- kratos.gid/scripts/Writing/WriteMaterials.tcl | 3 +-- kratos.gid/scripts/Writing/WriteProjectParameters.tcl | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 965531304..a59e9899b 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -94,11 +94,10 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set row [list ] set cols [$valueNode @dimension_function_cols] for {set j 0} {$j < $cols} {incr j} { - lappend row [lindex $M [expr ($i*$cols)+$j]] + lappend row [expr [lindex $M [expr ($i*$cols)+$j]]] } lappend value $row } - W $value } else { # All the introduced values are translated to 'm' and 'kg' with the help of this function set value [gid_groups_conds::convert_value_to_default $valueNode] diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index a17aee031..508022054 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -17,8 +17,10 @@ proc write::json2dict {JSONtext} { proc write::tcl2json { value } { # Guess the type of the value; deep *UNSUPPORTED* magic! # display the representation of a Tcl_Obj for debugging purposes. Do not base the behavior of any command on the results of this one; it does not conform to Tcl's value semantics! - regexp {^value is a (.*?) with a refcount} [::tcl::unsupported::representation $value] -> type + # regexp {^value is a (.*?) with a refcount} [::tcl::unsupported::representation $value] -> type + set type [GidUtils::GetInternalRepresentation $value] if {$value eq ""} {return [json::write array {*}[lmap v $value {tcl2json $v}]]} + if {$type ne "dict" && [llength $value]>1} { set type list} switch $type { string { if {$value eq "false"} {return [expr "false"]} @@ -454,7 +456,7 @@ proc write::GetDefaultGiDOutput { {appid ""} } { dict set outputConfigDict python_module gid_output_process dict set outputConfigDict kratos_module KratosMultiphysics dict set outputConfigDict process_name GiDOutputProcess - dict set outputConfigDict help "This process writes postprocessing files for GiD" + # dict set outputConfigDict help "This process writes postprocessing files for GiD" dict set outputConfigDict Parameters $outputProcessParams return $outputConfigDict @@ -510,7 +512,7 @@ proc write::GetDefaultVTKOutput { {appid ""} } { dict set outputConfigDictVtk python_module vtk_output_process dict set outputConfigDictVtk kratos_module KratosMultiphysics dict set outputConfigDictVtk process_name VtkOutputProcess - dict set outputConfigDictVtk help "This process writes postprocessing files for Paraview" + #dict set outputConfigDictVtk help "This process writes postprocessing files for Paraview" dict set outputConfigDictVtk Parameters [write::GetDefaultParametersOutputVTKDict $appid] return $outputConfigDictVtk From 866321c0fe9ca18e532ca84b94faae6740010ce2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Aug 2021 15:04:48 +0200 Subject: [PATCH 318/556] app json example --- kratos.gid/apps/Fluid/app.json | 46 ++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 kratos.gid/apps/Fluid/app.json diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json new file mode 100644 index 000000000..e7eacd7c4 --- /dev/null +++ b/kratos.gid/apps/Fluid/app.json @@ -0,0 +1,46 @@ +{ + "id": "Fluid", + "name": "CFD", + "prefix": "FL", + "themed": false, + "kratos_name": "FluidDynamicsApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "xml/xmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": "allow", + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "FLParts", + "nodal_conditions": "FLNodalConditions", + "conditions": "FLBC", + "materials": "FLMaterials", + "results": "FLResults", + "drag": "FLDrags", + "time_parameters": "FLTimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "FluidMaterials.json", + "properties_location": "json", + "model_part_name": "FluidModelPart", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "KratosFluid.py", + "examples": "examples/examples.xml" +} From 0454c4bb8686e041d7b3e04f0a7ea540680b8131 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Aug 2021 16:44:09 +0200 Subject: [PATCH 319/556] utility to read json --- kratos.gid/scripts/Utils.tcl | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 0e03d3d2f..3d956c36d 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -168,6 +168,23 @@ proc Kratos::RegisterEnvironment { } { } } +proc Kratos::ReadJsonDict {file_path} { + set data "" + catch { + # Try to open the preferences file + set fp [open $file_path r] + # Read the preferences + set data [read $fp] + # W $data + # Close the file + close $fp + } + if {$data ne ""} { + set data [write::json2dict $data] + } + return $data +} + proc Kratos::LoadEnvironment { } { variable kratos_private From 3003b2add454dab9fdebec74b34b0c27cbbcc3b6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Aug 2021 16:44:47 +0200 Subject: [PATCH 320/556] If an app has the app.json file, load it and work that way --- kratos.gid/scripts/Applications.tcl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 9f2b24ade..b628df38a 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -290,8 +290,18 @@ oo::class create App { proc apps::ActivateApp_do {app_name} { # set ::Kratos::must_quit 0 set dir [file join $::Kratos::kratos_private(Path) apps $app_name] - set fileName [file join $dir start.tcl] - apps::loadAppFile $fileName + set app_definition_file [file join $dir app.json] + if {[file exists $app_definition_file]} { + set props [Kratos::ReadJsonDict $app_definition_file] + foreach source_file [dict get $props script_files] { + set fileName [file join $dir $source_file] + apps::loadAppFile $fileName + } + } else { + set fileName [file join $dir start.tcl] + apps::loadAppFile $fileName + } + if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { set gid_groups_conds::imagesdirList [lsearch -all -inline -not -exact $gid_groups_conds::imagesdirList [list [file join $dir images]]] gid_groups_conds::add_images_dir [file join $dir images Black] From 0f894458c931404715901c13b4a649f835ffbe71 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 20 Aug 2021 16:45:03 +0200 Subject: [PATCH 321/556] Fluid is the first one usign app.json load --- kratos.gid/apps/Fluid/start.tcl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index bd8a4c93a..eee212384 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -29,18 +29,18 @@ proc ::Fluid::Init { } { dict set attributes UseIntervals 1 - LoadMyFiles + #LoadMyFiles #::spdAux::CreateDimensionWindow } -proc ::Fluid::LoadMyFiles { } { - variable dir +# proc ::Fluid::LoadMyFiles { } { +# variable dir - uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} +# uplevel #0 [list source [file join $dir examples examples.tcl]] +# uplevel #0 [list source [file join $dir xml XmlController.tcl]] +# uplevel #0 [list source [file join $dir write write.tcl]] +# uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] +# } proc ::Fluid::GetAttribute {name} { variable attributes From 058826c15c683c63cc326298d55d3d55e188f678 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Aug 2021 18:45:59 +0200 Subject: [PATCH 322/556] app stores and serves properties --- kratos.gid/scripts/Applications.tcl | 33 ++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index b628df38a..490e320d7 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -209,6 +209,8 @@ oo::class create App { variable prefix variable release variable is_tool + + variable properties constructor {n} { variable name @@ -221,6 +223,7 @@ oo::class create App { variable prefix variable public variable is_tool + variable properties set name $n set publicname $n @@ -240,12 +243,11 @@ oo::class create App { set prefix "" set public 0 set is_tool 0 + + set properties [dict create ] } - method activate { } { - variable name - apps::ActivateApp_do $name - } + method activate { } {apps::ActivateApp_do [self]} method getPrefix { } {variable prefix; return $prefix} method setPrefix { p } {variable prefix; set prefix $p} @@ -283,21 +285,30 @@ oo::class create App { method setIsTool {v} {variable is_tool; set is_tool $v} method isTool { } {variable is_tool; return $is_tool} - method getKratosApplicationName { } { - return [set ::${name}::kratos_name] - } + method getKratosApplicationName { } {return [set ::${name}::kratos_name]} + + method setProperties {props} {variable properties; set properties $props} + method getProperty {n} {variable properties; if {[dict exists $properties $n]} {return [dict get $properties $n]}} + method getProperties {} {variable properties; return $properties} + method getPermission {n} {variable properties; if {[dict exists $properties permissions $n]} {return [dict get $properties permissions $n]} } + method getUniqueName {n} {variable properties; if {[dict exists $properties unique_names $n]} {return [dict get $properties unique_names $n]} } } -proc apps::ActivateApp_do {app_name} { +proc apps::ActivateApp_do {app} { # set ::Kratos::must_quit 0 + set app_name [$app getName] set dir [file join $::Kratos::kratos_private(Path) apps $app_name] set app_definition_file [file join $dir app.json] if {[file exists $app_definition_file]} { set props [Kratos::ReadJsonDict $app_definition_file] + $app setProperties $props foreach source_file [dict get $props script_files] { set fileName [file join $dir $source_file] apps::loadAppFile $fileName } + apps::ApplyAppPreferences $app + if {[dict exists $props start_script]} {eval [dict get $props start_script] $app} } else { + W "MISSING app.json file for app $app_name" set fileName [file join $dir start.tcl] apps::loadAppFile $fileName } @@ -309,8 +320,10 @@ proc apps::ActivateApp_do {app_name} { gid_groups_conds::add_images_dir [file join $dir images] } -proc apps::loadAppFile {fileName} { - uplevel 2 [list source $fileName] +proc apps::ApplyAppPreferences {app} { + if {[write::isBooleanTrue [$app getPermission open_tree]]} {set spdAux::TreeVisibility 1} } +proc apps::loadAppFile {fileName} {uplevel 2 [list source $fileName]} + apps::Init From 7b7b0dee3ebf43cf0197c9b31951b4a7701d1236 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Aug 2021 18:46:16 +0200 Subject: [PATCH 323/556] getPermission usage --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 6 +++--- kratos.gid/scripts/spdAuxiliar.tcl | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index bbaeb66ca..7b94145bc 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -193,8 +193,8 @@ proc spdAux::injectConditions { basenode args} { proc spdAux::_injectCondsToTree {basenode cond_list {cond_type "normal"} args } { set conds [$basenode parent] - set AppUsesIntervals [apps::ExecuteOnApp [GetAppIdFromNode $conds] GetAttribute UseIntervals] - if {$AppUsesIntervals eq ""} {set AppUsesIntervals 0} + set app_uses_intervals [[apps::getAppById [GetAppIdFromNode $conds]] getPermission "intervals"] + if {$app_uses_intervals eq ""} {set app_uses_intervals 0} set initial_conds_flag 0 if {$args ne "{}" && $args ne ""} { if {[dict exists {*}$args can_be_initial]} { @@ -253,7 +253,7 @@ proc spdAux::_injectCondsToTree {basenode cond_list {cond_type "normal"} args } append node [GetParameterValueString $in $forcedParams $cnd] } set CondUsesIntervals [$cnd getAttribute "Interval"] - if {$AppUsesIntervals && $CondUsesIntervals ne "False"} { + if {$app_uses_intervals && $CondUsesIntervals ne "False"} { set state normal if {$initial_conds_flag} { set CondUsesIntervals Initial diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index a5d9fabf6..9463f9766 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -134,10 +134,9 @@ proc spdAux::processAppIncludes { root } { } proc spdAux::CustomTreeCommon { } { - set AppUsesIntervals [apps::ExecuteOnCurrentApp GetAttribute UseIntervals] - - if {$AppUsesIntervals eq ""} {set AppUsesIntervals 0} - if {!$AppUsesIntervals} { + set app_uses_intervals [[apps::getActiveApp] getPermission "intervals"] + if {$app_uses_intervals eq ""} {set app_uses_intervals 0} + if {!$app_uses_intervals} { if {[getRoute Intervals] ne ""} { catch {spdAux::SetValueOnTreeItem state hidden Intervals} } From 881dc9cfac5a1767c3adabdf3e421c3f8db80d2f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 21 Aug 2021 18:49:52 +0200 Subject: [PATCH 324/556] adapt examples --- .../apps/Fluid/examples/CylinderInFlow.tcl | 50 +++++++------------ .../apps/Fluid/examples/HighRiseBuilding.tcl | 42 +++++++--------- kratos.gid/apps/Fluid/examples/examples.tcl | 23 +++++---- kratos.gid/apps/Fluid/examples/examples.xml | 6 +-- 4 files changed, 54 insertions(+), 67 deletions(-) diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 4a7609dd0..628af5690 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -1,14 +1,17 @@ -proc ::Fluid::examples::CylinderInFlow {args} { +namespace eval ::Fluid::examples::CylinderInFlow { +} + +proc ::Fluid::examples::CylinderInFlow::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawCylinderInFlowGeometry$::Model::SpatialDimension - AssignGroupsCylinderInFlow$::Model::SpatialDimension - AssignCylinderInFlowMeshSizes$::Model::SpatialDimension - TreeAssignationCylinderInFlow$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -18,14 +21,14 @@ proc ::Fluid::examples::CylinderInFlow {args} { # Draw Geometry -proc Fluid::examples::DrawCylinderInFlowGeometry3D {args} { - DrawCylinderInFlowGeometry2D +proc ::Fluid::examples::CylinderInFlow::DrawGeometry3D {args} { + DrawGeometry2D GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape GiD_Layers edit opaque Fluid 0 GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc Fluid::examples::DrawCylinderInFlowGeometry2D {args} { +proc ::Fluid::examples::CylinderInFlow::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -68,7 +71,7 @@ proc Fluid::examples::DrawCylinderInFlowGeometry2D {args} { # Group assign -proc Fluid::examples::AssignGroupsCylinderInFlow2D {args} { +proc ::Fluid::examples::CylinderInFlow::AssignGroups2D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -90,7 +93,7 @@ proc Fluid::examples::AssignGroupsCylinderInFlow2D {args} { GiD_Groups edit color No_Slip_Cylinder "#3b3b3bff" GiD_EntitiesGroups assign No_Slip_Cylinder lines 5 } -proc Fluid::examples::AssignGroupsCylinderInFlow3D {args} { +proc ::Fluid::examples::CylinderInFlow::AssignGroups3D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -115,7 +118,7 @@ proc Fluid::examples::AssignGroupsCylinderInFlow3D {args} { # Mesh sizes -proc Fluid::examples::AssignCylinderInFlowMeshSizes3D {args} { +proc ::Fluid::examples::CylinderInFlow::AssignMeshSizes3D {args} { set cylinder_mesh_size 0.005 set walls_mesh_size 0.05 set fluid_mesh_size 0.05 @@ -127,7 +130,7 @@ proc Fluid::examples::AssignCylinderInFlowMeshSizes3D {args} { GiD_Process Mescape Meshing AssignSizes Volumes $fluid_mesh_size [GiD_EntitiesGroups get Fluid volumes] escape escape Kratos::Event_BeforeMeshGeneration $fluid_mesh_size } -proc Fluid::examples::AssignCylinderInFlowMeshSizes2D {args} { +proc ::Fluid::examples::CylinderInFlow::AssignMeshSizes2D {args} { set cylinder_mesh_size 0.005 set fluid_mesh_size 0.05 GiD_Process Mescape Utilities Variables SizeTransitionsFactor 0.4 escape escape @@ -138,11 +141,11 @@ proc Fluid::examples::AssignCylinderInFlowMeshSizes2D {args} { # Tree assign -proc Fluid::examples::TreeAssignationCylinderInFlow3D {args} { - TreeAssignationCylinderInFlow2D +proc ::Fluid::examples::CylinderInFlow::TreeAssignation3D {args} { + TreeAssignation2D AddCuts } -proc Fluid::examples::TreeAssignationCylinderInFlow2D {args} { +proc ::Fluid::examples::CylinderInFlow::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -160,7 +163,7 @@ proc Fluid::examples::TreeAssignationCylinderInFlow2D {args} { spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions [spdAux::getRoute "FLBC"] - ErasePreviousIntervals + ::Fluid::examples::ErasePreviousIntervals # Fluid Inlet Fluid::xml::CreateNewInlet Inlet {new true name inlet1 ini 0 end 1} true "6*y*(1-y)*sin(pi*t*0.5)" @@ -194,18 +197,3 @@ proc Fluid::examples::TreeAssignationCylinderInFlow2D {args} { spdAux::RequestRefresh } - -proc Fluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} - -proc Fluid::examples::AddCuts { } { - # Cuts - set results "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" - set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] - [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" -} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl index 2e23a83bf..394a19626 100644 --- a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl @@ -1,5 +1,7 @@ +namespace eval ::Fluid::examples::HighRiseBuilding { +} -proc ::Fluid::examples::HighRiseBuilding {args} { +proc ::Fluid::examples::HighRiseBuilding::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -7,10 +9,10 @@ proc ::Fluid::examples::HighRiseBuilding {args} { } Kratos::ResetModel - DrawHighRiseBuildingGeometry$::Model::SpatialDimension - AssignGroupsHighRiseBuilding$::Model::SpatialDimension - AssignHighRiseBuildingMeshSizes$::Model::SpatialDimension - TreeAssignationHighRiseBuilding$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -20,11 +22,11 @@ proc ::Fluid::examples::HighRiseBuilding {args} { # Draw Geometry -proc Fluid::examples::DrawHighRiseBuildingGeometry3D {args} { +proc ::Fluid::examples::HighRiseBuilding::DrawGeometry3D {args} { # To be implemented } -proc Fluid::examples::DrawHighRiseBuildingGeometry2D {args} { +proc ::Fluid::examples::HighRiseBuilding::DrawGeometry2D {args} { GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -51,7 +53,7 @@ proc Fluid::examples::DrawHighRiseBuildingGeometry2D {args} { # Group assign -proc Fluid::examples::AssignGroupsHighRiseBuilding2D {args} { +proc ::Fluid::examples::HighRiseBuilding::AssignGroups2D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -77,17 +79,17 @@ proc Fluid::examples::AssignGroupsHighRiseBuilding2D {args} { GiD_Groups edit color InterfaceFluid "#3b3b3bff" GiD_EntitiesGroups assign InterfaceFluid lines {2 3 4} } -proc Fluid::examples::AssignGroupsHighRiseBuilding3D {args} { +proc ::Fluid::examples::HighRiseBuilding::AssignGroups3D {args} { # To be implemented } # Mesh sizes -proc Fluid::examples::AssignHighRiseBuildingMeshSizes3D {args} { +proc ::Fluid::examples::HighRiseBuilding::AssignMeshSizes3D {args} { # To be implemented } -proc Fluid::examples::AssignHighRiseBuildingMeshSizes2D {args} { +proc ::Fluid::examples::HighRiseBuilding::AssignMeshSizes2D {args} { set fluid_mesh_size 30.0 set walls_mesh_size 30.0 set building_mesh_size 3.0 @@ -102,11 +104,11 @@ proc Fluid::examples::AssignHighRiseBuildingMeshSizes2D {args} { # Tree assign -proc Fluid::examples::TreeAssignationHighRiseBuilding3D {args} { +proc ::Fluid::examples::HighRiseBuilding::TreeAssignation3D {args} { # To be implemented } -proc Fluid::examples::TreeAssignationHighRiseBuilding2D {args} { +proc ::Fluid::examples::HighRiseBuilding::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -123,11 +125,11 @@ proc Fluid::examples::TreeAssignationHighRiseBuilding2D {args} { spdAux::SetValuesOnBaseNode $fluidNode $props set fluidConditions [spdAux::getRoute "FLBC"] - ErasePreviousIntervals + ::Fluid::examples::ErasePreviousIntervals # Fluid Inlet - Fluid::xml::CreateNewInlet Inlet {new true name inlet1 ini 0 end 10.0} true "25.0*t/10.0" - Fluid::xml::CreateNewInlet Inlet {new true name inlet2 ini 10.0 end End} false 25.0 + ::Fluid::xml::CreateNewInlet Inlet {new true name inlet1 ini 0 end 10.0} true "25.0*t/10.0" + ::Fluid::xml::CreateNewInlet Inlet {new true name inlet2 ini 10.0 end End} false 25.0 # Fluid Outlet set fluidOutlet "$fluidConditions/condition\[@n='Outlet$nd'\]" @@ -158,11 +160,3 @@ proc Fluid::examples::TreeAssignationHighRiseBuilding2D {args} { spdAux::RequestRefresh } - -proc Fluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/examples/examples.tcl b/kratos.gid/apps/Fluid/examples/examples.tcl index 630d34653..8c6bc707f 100644 --- a/kratos.gid/apps/Fluid/examples/examples.tcl +++ b/kratos.gid/apps/Fluid/examples/examples.tcl @@ -1,13 +1,18 @@ -namespace eval Fluid::examples { - -} - -proc Fluid::examples::Init { } { - uplevel #0 [list source [file join $::Fluid::dir examples CylinderInFlow.tcl]] - uplevel #0 [list source [file join $::Fluid::dir examples HighRiseBuilding.tcl]] +namespace eval ::Fluid::examples { } -proc Fluid::examples::UpdateMenus { } { +# Common functions for all examples that uses Fluid App +proc ::Fluid::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } -Fluid::examples::Init \ No newline at end of file +proc ::Fluid::examples::AddCuts { } { + # Cuts + set results "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" + set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] + [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" +} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/examples/examples.xml b/kratos.gid/apps/Fluid/examples/examples.xml index 9dd04b3d4..21434f7f4 100644 --- a/kratos.gid/apps/Fluid/examples/examples.xml +++ b/kratos.gid/apps/Fluid/examples/examples.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file From b653305f2868db16ceaab52f77af421c1f20dc90 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 22 Aug 2021 00:11:33 +0200 Subject: [PATCH 325/556] Set properties in json files --- kratos.gid/apps/Fluid/app.json | 5 ++++- kratos.gid/apps/FluidLauncher/app.json | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/FluidLauncher/app.json diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index e7eacd7c4..6f6c0f2e2 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -11,16 +11,19 @@ "script_files": [ "start.tcl", "examples/examples.tcl", + "examples/CylinderInFlow.tcl", + "examples/HighRiseBuilding.tcl", "xml/xmlController.tcl", "write/write.tcl", "write/writeProjectParameters.tcl" ], + "start_script":"::Fluid::Init", "requeriments":{ "apps":[], "minimum_gid_version":"15.1.3d" }, "permissions": { - "open_tree": "allow", + "open_tree": true, "show_toolbar": true, "intervals": true, "wizard": false diff --git a/kratos.gid/apps/FluidLauncher/app.json b/kratos.gid/apps/FluidLauncher/app.json new file mode 100644 index 000000000..f2a76e7f3 --- /dev/null +++ b/kratos.gid/apps/FluidLauncher/app.json @@ -0,0 +1,17 @@ +{ + "id": "Fluid Launcher", + "name": "Fluid", + "script_files": [ + "start.tcl" + ], + "requeriments":{ + "apps":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": true, + "intervals": false, + "wizard": false + } +} From 7c9864eb0f07e2fc67e9f9f1fa8050efd976540d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 22 Aug 2021 00:26:12 +0200 Subject: [PATCH 326/556] Improve write process with json params --- kratos.gid/apps/Fluid/start.tcl | 51 +++----------- kratos.gid/apps/Fluid/write/write.tcl | 68 +++++++++---------- kratos.gid/apps/Fluid/write/writeByGiDId.tcl | 40 +++++------ .../Fluid/write/writeProjectParameters.tcl | 32 ++++----- kratos.gid/apps/Fluid/xml/XmlController.tcl | 23 +++---- kratos.gid/scripts/Applications.tcl | 4 ++ 6 files changed, 95 insertions(+), 123 deletions(-) diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index eee212384..3799a0ad2 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -1,52 +1,21 @@ namespace eval ::Fluid { # Variable declaration + variable _app variable dir - variable prefix - variable attributes - variable kratos_name - variable app_id } -proc ::Fluid::Init { } { +proc ::Fluid::Init { app } { # Variable initialization + variable _app variable dir - variable prefix - variable attributes - variable kratos_name - variable app_id - - set app_id Fluid - set kratos_name "FluidDynamicsApplication" + set _app $app set dir [apps::getMyDir "Fluid"] - set attributes [dict create] - - set prefix FL - set ::Model::ValidSpatialDimensions [list 2D 3D] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - dict set attributes UseIntervals 1 - - #LoadMyFiles - #::spdAux::CreateDimensionWindow -} - -# proc ::Fluid::LoadMyFiles { } { -# variable dir - -# uplevel #0 [list source [file join $dir examples examples.tcl]] -# uplevel #0 [list source [file join $dir xml XmlController.tcl]] -# uplevel #0 [list source [file join $dir write write.tcl]] -# uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -# } - -proc ::Fluid::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + + # XML init event + ::Fluid::xml::Init + ::Fluid::write::Init } -::Fluid::Init +proc ::Fluid::GetAttribute {name} {return [$::Fluid::_app getProperty $name]} +proc ::Fluid::GetUniqueName {name} {return [$::Fluid::_app getUniqueName $name]} diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index a2cdbbce2..d3f3cf41c 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,4 +1,4 @@ -namespace eval Fluid::write { +namespace eval ::Fluid::write { # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes @@ -8,17 +8,17 @@ namespace eval Fluid::write { variable last_condition_iterator } -proc Fluid::write::Init { } { +proc ::Fluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un FLParts - SetAttribute nodal_conditions_un FLNodalConditions - SetAttribute conditions_un FLBC - SetAttribute materials_un FLMaterials - SetAttribute results_un FLResults - SetAttribute drag_un FLDrags - SetAttribute time_parameters_un FLTimeParameters - SetAttribute writeCoordinatesByGroups 0 + SetAttribute parts_un [$Fluid::_app getUniqueName parts] + SetAttribute nodal_conditions_un [$Fluid::_app getUniqueName nodal_conditions] + SetAttribute conditions_un [$Fluid::_app getUniqueName conditions] + SetAttribute materials_un [$Fluid::_app getUniqueName materials] + SetAttribute results_un [$Fluid::_app getUniqueName results] + SetAttribute drag_un [$Fluid::_app getUniqueName drag] + SetAttribute time_parameters_un [$Fluid::_app getUniqueName time_parameters] + SetAttribute writeCoordinatesByGroups [$Fluid::_app getWriteProperty coordinates] SetAttribute validApps [list "Fluid"] SetAttribute main_script_file "KratosFluid.py" SetAttribute materials_file "FluidMaterials.json" @@ -30,7 +30,7 @@ proc Fluid::write::Init { } { } # MDPA write event -proc Fluid::write::writeModelPartEvent { } { +proc ::Fluid::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -61,11 +61,11 @@ proc Fluid::write::writeModelPartEvent { } { writeMeshes # Clean - unset Fluid::write::FluidConditionMap + unset ::Fluid::write::FluidConditionMap } -proc Fluid::write::writeCustomFilesEvent { } { +proc ::Fluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file - Fluid::write::WriteMaterialsFile + ::Fluid::write::WriteMaterialsFile # Main python script set orig_name [GetAttribute main_script_file] @@ -74,13 +74,13 @@ proc Fluid::write::writeCustomFilesEvent { } { } # Custom files -proc Fluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { +proc ::Fluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } -proc Fluid::write::Validate {} { +proc ::Fluid::write::Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -98,23 +98,23 @@ proc Fluid::write::Validate {} { } # MDPA Blocks -proc Fluid::write::writeProperties { } { +proc ::Fluid::write::writeProperties { } { # Begin Properties write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc Fluid::write::writeConditions { } { +proc ::Fluid::write::writeConditions { } { writeBoundaryConditions writeDrags } -proc Fluid::write::getFluidModelPartFilename { } { +proc ::Fluid::write::getFluidModelPartFilename { } { return [Kratos::GetModelName] } -proc Fluid::write::writeBoundaryConditions { } { +proc ::Fluid::write::writeBoundaryConditions { } { variable FluidConditionMap variable last_condition_iterator @@ -146,26 +146,26 @@ proc Fluid::write::writeBoundaryConditions { } { set kname LineCondition2D2N set nnodes 2 } - set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $Fluid::write::FluidConditionMap] + set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $::Fluid::write::FluidConditionMap] # Clean GiD_Groups delete $skin_group_name } -proc Fluid::write::writeDrags { } { +proc ::Fluid::write::writeDrags { } { lappend ::Model::NodalConditions [::Model::NodalCondition new Drag] write::writeNodalConditions [GetAttribute drag_un] Model::ForgetNodalCondition Drag } -proc Fluid::write::writeMeshes { } { +proc ::Fluid::write::writeMeshes { } { write::writePartSubModelPart write::writeNodalConditions [GetAttribute nodal_conditions_un] writeConditionsMesh #writeSkinMesh } -proc Fluid::write::writeConditionsMesh { } { +proc ::Fluid::write::writeConditionsMesh { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" @@ -202,7 +202,7 @@ proc Fluid::write::writeConditionsMesh { } { } } -proc Fluid::write::InitConditionsMap { {map "" } } { +proc ::Fluid::write::InitConditionsMap { {map "" } } { variable FluidConditionMap if {$map eq ""} { @@ -211,43 +211,43 @@ proc Fluid::write::InitConditionsMap { {map "" } } { set FluidConditionMap $map } } -proc Fluid::write::FreeConditionsMap { } { +proc ::Fluid::write::FreeConditionsMap { } { variable FluidConditionMap unset FluidConditionMap } -proc Fluid::write::GetAttribute {att} { +proc ::Fluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc Fluid::write::GetAttributes {} { +proc ::Fluid::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc Fluid::write::SetAttribute {att val} { +proc ::Fluid::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc Fluid::write::AddAttribute {att val} { +proc ::Fluid::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc Fluid::write::AddAttributes {configuration} { +proc ::Fluid::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc Fluid::write::AddValidApps {appid} { +proc ::Fluid::write::AddValidApps {appid} { AddAttribute validApps $appid } -proc Fluid::write::SetCoordinatesByGroups {value} { +proc ::Fluid::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } -Fluid::write::Init + diff --git a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl index 9b1bc9546..3019158a3 100644 --- a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl +++ b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl @@ -1,11 +1,11 @@ -namespace eval Fluid::write { +namespace eval ::Fluid::write { # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes variable FluidConditionMap } -proc Fluid::write::Init { } { +proc ::Fluid::write::Init { } { # Namespace variables inicialization InitConditionsMap @@ -23,7 +23,7 @@ proc Fluid::write::Init { } { } # Events -proc Fluid::write::writeModelPartEvent { } { +proc ::Fluid::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -50,7 +50,7 @@ proc Fluid::write::writeModelPartEvent { } { # Custom SubmodelParts #write::writeBasicSubmodelParts } -proc Fluid::write::writeCustomFilesEvent { } { +proc ::Fluid::write::writeCustomFilesEvent { } { # Materials file TODO -> Python script must read from here write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] @@ -60,7 +60,7 @@ proc Fluid::write::writeCustomFilesEvent { } { write::RenameFileInModel $orig_name "MainKratos.py" } -proc Fluid::write::Validate {} { +proc ::Fluid::write::Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -78,19 +78,19 @@ proc Fluid::write::Validate {} { } # MDPA Blocks -proc Fluid::write::writeProperties { } { +proc ::Fluid::write::writeProperties { } { # Begin Properties write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc Fluid::write::writeConditions { } { +proc ::Fluid::write::writeConditions { } { writeBoundaryConditions writeDrags } -proc Fluid::write::writeBoundaryConditions { } { +proc ::Fluid::write::writeBoundaryConditions { } { set BCUN [GetAttribute conditions_un] # Write the conditions @@ -98,20 +98,20 @@ proc Fluid::write::writeBoundaryConditions { } { } -proc Fluid::write::writeDrags { } { +proc ::Fluid::write::writeDrags { } { lappend ::Model::NodalConditions [::Model::NodalCondition new Drag] write::writeNodalConditions [GetAttribute drag_un] Model::ForgetNodalCondition Drag } -proc Fluid::write::writeMeshes { } { +proc ::Fluid::write::writeMeshes { } { write::writePartSubModelPart write::writeNodalConditions [GetAttribute nodal_conditions_un] writeConditionsMesh #writeSkinMesh } -proc Fluid::write::writeConditionsMesh { } { +proc ::Fluid::write::writeConditionsMesh { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" @@ -148,7 +148,7 @@ proc Fluid::write::writeConditionsMesh { } { } } -# proc Fluid::write::writeSkinMesh { } { +# proc ::Fluid::write::writeSkinMesh { } { # variable FluidConditions # set root [customlib::GetBaseRoot] @@ -174,7 +174,7 @@ proc Fluid::write::writeConditionsMesh { } { # ::write::writeGroupSubModelPart EXTRA $skinconfgroup "Conditions" $listiniend # } -# proc Fluid::write::CheckClosedVolume {} { +# proc ::Fluid::write::CheckClosedVolume {} { # variable BCUN # set isclosed 1 @@ -207,36 +207,36 @@ proc Fluid::write::writeConditionsMesh { } { -proc Fluid::write::GetAttribute {att} { +proc ::Fluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc Fluid::write::GetAttributes {} { +proc ::Fluid::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc Fluid::write::SetAttribute {att val} { +proc ::Fluid::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc Fluid::write::AddAttribute {att val} { +proc ::Fluid::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc Fluid::write::AddAttributes {configuration} { +proc ::Fluid::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc Fluid::write::AddValidApps {appid} { +proc ::Fluid::write::AddValidApps {appid} { AddAttribute validApps $appid } -proc Fluid::write::SetCoordinatesByGroups {value} { +proc ::Fluid::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 8ed4cb000..bf15c8c2d 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -3,10 +3,10 @@ proc ::Fluid::write::getParametersDict { } { set projectParametersDict [dict create] # Problem data - dict set projectParametersDict problem_data [write::GetDefaultProblemDataDict $Fluid::app_id] + dict set projectParametersDict problem_data [write::GetDefaultProblemDataDict [::Fluid::GetAttribute id]] # output configuration - dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict $Fluid::app_id] + dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict [::Fluid::GetAttribute id]] # Solver settings set solver_settings_dict [Fluid::write::getSolverSettingsDict] @@ -15,8 +15,8 @@ proc ::Fluid::write::getParametersDict { } { # Boundary conditions processes set processesDict [dict create] - dict set processesDict initial_conditions_process_list [write::getConditionsParametersDict [GetAttribute nodal_conditions_un] "Nodal"] - dict set processesDict boundary_conditions_process_list [write::getConditionsParametersDict [GetAttribute conditions_un]] + dict set processesDict initial_conditions_process_list [write::getConditionsParametersDict [::Fluid::GetUniqueName nodal_conditions] "Nodal"] + dict set processesDict boundary_conditions_process_list [write::getConditionsParametersDict [::Fluid::GetUniqueName conditions]] dict set processesDict gravity [list [getGravityProcessDict] ] dict set processesDict auxiliar_process_list [getAuxiliarProcessList] @@ -25,13 +25,13 @@ proc ::Fluid::write::getParametersDict { } { return $projectParametersDict } -proc Fluid::write::writeParametersEvent { } { +proc ::Fluid::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc Fluid::write::getAuxiliarProcessList {} { +proc ::Fluid::write::getAuxiliarProcessList {} { set process_list [list ] foreach process [getDragProcessList] {lappend process_list $process} @@ -39,11 +39,11 @@ proc Fluid::write::getAuxiliarProcessList {} { return $process_list } -proc Fluid::write::getDragProcessList {} { +proc ::Fluid::write::getDragProcessList {} { set root [customlib::GetBaseRoot] set process_list [list ] - set xp1 "[spdAux::getRoute [GetAttribute drag_un]]/group" + set xp1 "[spdAux::getRoute [::Fluid::GetUniqueName drag]]/group" set groups [$root selectNodes $xp1] foreach group $groups { set groupName [$group @n] @@ -73,7 +73,7 @@ proc Fluid::write::getDragProcessList {} { } # Gravity SubModelParts and Process collection -proc Fluid::write::getGravityProcessDict {} { +proc ::Fluid::write::getGravityProcessDict {} { set root [customlib::GetBaseRoot] set value [write::getValue FLGravity GravityValue] @@ -98,10 +98,10 @@ proc Fluid::write::getGravityProcessDict {} { } # Skin SubModelParts ids -proc Fluid::write::getBoundaryConditionMeshId {} { +proc ::Fluid::write::getBoundaryConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfBCGroups [list ] - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" + set xp1 "[spdAux::getRoute [::Fluid::GetUniqueName conditions]]/condition/group" set groups [$root selectNodes $xp1] foreach group $groups { set groupName [$group @n] @@ -126,12 +126,12 @@ proc Fluid::write::getBoundaryConditionMeshId {} { } # No-skin SubModelParts ids -proc Fluid::write::getNoSkinConditionMeshId {} { +proc ::Fluid::write::getNoSkinConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfNoSkinGroups [list ] # Append drag processes model parts names - set xp1 "[spdAux::getRoute [GetAttribute drag_un]]/group" + set xp1 "[spdAux::getRoute [::Fluid::GetUniqueName drag]]/group" set dragGroups [$root selectNodes $xp1] foreach dragGroup $dragGroups { set groupName [$dragGroup @n] @@ -158,7 +158,7 @@ proc Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } -proc Fluid::write::GetUsedElements {} { +proc ::Fluid::write::GetUsedElements {} { set root [customlib::GetBaseRoot] # Get the fluid part @@ -173,7 +173,7 @@ proc Fluid::write::GetUsedElements {} { return $lista } -proc Fluid::write::getSolverSettingsDict { } { +proc ::Fluid::write::getSolverSettingsDict { } { set solverSettingsDict [dict create] dict set solverSettingsDict model_part_name [GetAttribute model_part_name] set nDim [expr [string range [write::getValue nDim] 0 0]] @@ -259,7 +259,7 @@ proc Fluid::write::getSolverSettingsDict { } { return $solverSettingsDict } -proc Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { +proc ::Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { set element [Model::getElement $element_name] if {![$element hasAttribute FormulationElementType]} {error "Your monolithic element $element_name need to define the FormulationElementType field"} set formulation_element_type [$element getAttribute FormulationElementType] diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index eef23c0ff..a7e1498f1 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -1,12 +1,12 @@ -namespace eval Fluid::xml { +namespace eval ::Fluid::xml { # Namespace variables declaration variable dir } -proc Fluid::xml::Init { } { +proc ::Fluid::xml::Init { } { # Namespace variables inicialization variable dir - Model::InitVariables dir $Fluid::dir + Model::InitVariables dir $::Fluid::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -17,16 +17,17 @@ proc Fluid::xml::Init { } { Model::getProcesses Processes.xml Model::getConditions Conditions.xml Model::getSolvers "../../Common/xml/Solvers.xml" - } -proc Fluid::xml::getUniqueName {name} { - return ${::Fluid::prefix}${name} +proc ::Fluid::xml::getUniqueName {name} { + return [::Fluid::GetAttribute prefix]${name} } -proc Fluid::xml::CustomTree { args } { +proc ::Fluid::xml::CustomTree { args } { set root [customlib::GetBaseRoot] + set results_un [::Fluid::GetUniqueName "unique_names results"] + # Output control in output settings spdAux::SetValueOnTreeItem v time FLResults FileLabel spdAux::SetValueOnTreeItem v time FLResults OutputControlType @@ -54,7 +55,7 @@ proc Fluid::xml::CustomTree { args } { # Usage # Fluid::xml::CreateNewInlet Inlet {new false name Total} true "6*y*(1-y)" -proc Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { +proc ::Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { # Fluid Inlet set nd $::Model::SpatialDimension set condtype line @@ -91,7 +92,7 @@ proc Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true name } -proc Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { +proc ::Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { set nd $::Model::SpatialDimension set fluidConditions [spdAux::getRoute $fluid_conditions_UN] @@ -106,9 +107,7 @@ proc Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_c } } -proc Fluid::xml::ProcHideIfElement { domNode list_elements } { +proc ::Fluid::xml::ProcHideIfElement { domNode list_elements } { set element [lindex [Fluid::write::GetUsedElements] 0] if {$element in $list_elements} {return hidden} {return normal} } - -Fluid::xml::Init diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 490e320d7..2f2cba706 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -291,7 +291,11 @@ oo::class create App { method getProperty {n} {variable properties; if {[dict exists $properties $n]} {return [dict get $properties $n]}} method getProperties {} {variable properties; return $properties} method getPermission {n} {variable properties; if {[dict exists $properties permissions $n]} {return [dict get $properties permissions $n]} } + method getPermissions {} {variable properties; return [dict get $properties permissions]} method getUniqueName {n} {variable properties; if {[dict exists $properties unique_names $n]} {return [dict get $properties unique_names $n]} } + method getUniqueNames {} {variable properties; return [dict get $properties unique_names} + method getWriteProperty {n} {variable properties; if {[dict exists $properties write $n]} {return [dict get $properties write $n]} } + method getWriteProperties {} {variable properties; return [dict get $properties write} } proc apps::ActivateApp_do {app} { # set ::Kratos::must_quit 0 From 6b7de0bf5fd827ecf4e951aff99f4f91641efc93 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sun, 22 Aug 2021 12:30:19 +0200 Subject: [PATCH 327/556] get write properties --- kratos.gid/apps/Fluid/write/write.tcl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index d3f3cf41c..afebd602e 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -10,7 +10,6 @@ namespace eval ::Fluid::write { proc ::Fluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un [$Fluid::_app getUniqueName parts] SetAttribute nodal_conditions_un [$Fluid::_app getUniqueName nodal_conditions] SetAttribute conditions_un [$Fluid::_app getUniqueName conditions] @@ -20,11 +19,12 @@ proc ::Fluid::write::Init { } { SetAttribute time_parameters_un [$Fluid::_app getUniqueName time_parameters] SetAttribute writeCoordinatesByGroups [$Fluid::_app getWriteProperty coordinates] SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file "KratosFluid.py" - SetAttribute materials_file "FluidMaterials.json" - SetAttribute properties_location json - SetAttribute model_part_name "FluidModelPart" - SetAttribute output_model_part_name "fluid_computational_model_part" + SetAttribute main_script_file [$Fluid::_app getProperty main_launch_file] + SetAttribute materials_file [$Fluid::_app getWriteProperty materials_file] + SetAttribute properties_location [$Fluid::_app getWriteProperty properties_location] + SetAttribute model_part_name [$Fluid::_app getWriteProperty model_part_name] + SetAttribute output_model_part_name [$Fluid::_app getWriteProperty output_model_part_name] + variable last_condition_iterator set last_condition_iterator 0 } @@ -45,7 +45,7 @@ proc ::Fluid::write::writeModelPartEvent { } { writeProperties # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) - if {[GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} + if {[GetAttribute writeCoordinatesByGroups] ne "all"} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} # Element connectivities (Groups on FLParts) write::writeElementConnectivities @@ -63,6 +63,7 @@ proc ::Fluid::write::writeModelPartEvent { } { # Clean unset ::Fluid::write::FluidConditionMap } + proc ::Fluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file ::Fluid::write::WriteMaterialsFile From 59ea3bbe4dde30221feef2a741f994390e73e93f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:56:06 +0200 Subject: [PATCH 328/556] missing a catch --- kratos.gid/scripts/Utils.tcl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 3d956c36d..9deea492a 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -199,12 +199,13 @@ proc Kratos::LoadEnvironment { } { # W $data # Close the file close $fp - } - # Preferences are written in json format - foreach {k v} [write::json2dict $data] { - # W "$k $v" - # Foreach pair key value, restore it - set kratos_private($k) $v + + # Preferences are written in json format + foreach {k v} [write::json2dict $data] { + # W "$k $v" + # Foreach pair key value, restore it + set kratos_private($k) $v + } } } From 3babba589465bb43e29b4f337dc6aaebb1b5c7af Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:56:42 +0200 Subject: [PATCH 329/556] write properties also in start script --- kratos.gid/apps/Fluid/start.tcl | 1 + kratos.gid/apps/Fluid/write/write.tcl | 26 ++++++++++----------- kratos.gid/apps/Fluid/xml/XmlController.tcl | 2 +- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index 3799a0ad2..e4207d5af 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -19,3 +19,4 @@ proc ::Fluid::Init { app } { proc ::Fluid::GetAttribute {name} {return [$::Fluid::_app getProperty $name]} proc ::Fluid::GetUniqueName {name} {return [$::Fluid::_app getUniqueName $name]} +proc ::Fluid::GetWriteProperty {name} {return [$::Fluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index afebd602e..00a5eb7fa 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -10,20 +10,20 @@ namespace eval ::Fluid::write { proc ::Fluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un [$Fluid::_app getUniqueName parts] - SetAttribute nodal_conditions_un [$Fluid::_app getUniqueName nodal_conditions] - SetAttribute conditions_un [$Fluid::_app getUniqueName conditions] - SetAttribute materials_un [$Fluid::_app getUniqueName materials] - SetAttribute results_un [$Fluid::_app getUniqueName results] - SetAttribute drag_un [$Fluid::_app getUniqueName drag] - SetAttribute time_parameters_un [$Fluid::_app getUniqueName time_parameters] - SetAttribute writeCoordinatesByGroups [$Fluid::_app getWriteProperty coordinates] + SetAttribute parts_un [::Fluid::GetUniqueName parts] + SetAttribute nodal_conditions_un [::Fluid:::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::Fluid::GetUniqueName conditions] + SetAttribute materials_un [::Fluid::GetUniqueName materials] + SetAttribute results_un [::Fluid::GetUniqueName results] + SetAttribute drag_un [::Fluid::GetUniqueName drag] + SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file [$Fluid::_app getProperty main_launch_file] - SetAttribute materials_file [$Fluid::_app getWriteProperty materials_file] - SetAttribute properties_location [$Fluid::_app getWriteProperty properties_location] - SetAttribute model_part_name [$Fluid::_app getWriteProperty model_part_name] - SetAttribute output_model_part_name [$Fluid::_app getWriteProperty output_model_part_name] + SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] + SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] + SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] + SetAttribute output_model_part_name [::Fluid::GetWriteProperty output_model_part_name] variable last_condition_iterator set last_condition_iterator 0 diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index a7e1498f1..f10ec4f12 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -26,7 +26,7 @@ proc ::Fluid::xml::getUniqueName {name} { proc ::Fluid::xml::CustomTree { args } { set root [customlib::GetBaseRoot] - set results_un [::Fluid::GetUniqueName "unique_names results"] + set results_un [::Fluid::GetUniqueName "results"] # Output control in output settings spdAux::SetValueOnTreeItem v time FLResults FileLabel From f5847c8e06ca8e04435ae8ecfe3a9cd7e88d6718 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:57:06 +0200 Subject: [PATCH 330/556] Structural app json --- kratos.gid/apps/Structural/app.json | 52 +++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 kratos.gid/apps/Structural/app.json diff --git a/kratos.gid/apps/Structural/app.json b/kratos.gid/apps/Structural/app.json new file mode 100644 index 000000000..11f606787 --- /dev/null +++ b/kratos.gid/apps/Structural/app.json @@ -0,0 +1,52 @@ +{ + "id": "Structural", + "name": "Structural", + "prefix": "ST", + "themed": false, + "kratos_name": "StructuralMechanicsApplication", + "dimensions": [ + "2D", + "2Da", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/TrussCantilever.tcl", + "examples/HighRiseBuilding.tcl", + "examples/IncompressibleCookMembrane.tcl", + "xml/xmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl", + "postprocess/formfinding.tcl" + ], + "start_script":"::Structural::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "STParts", + "initial_conditions": "STInitialConditions", + "nodal_conditions": "STNodalConditions", + "conditions": "STLoads", + "time_parameters": "STTimeParameters", + "results": "STResults", + "materials": "STMaterials" + + }, + "write": { + "coordinates": "all", + "materials_file": "StructuralMaterials.json", + "properties_location": "json", + "model_part_name": "Structure" + }, + "main_launch_file": "KratosStructural.py", + "examples": "examples/examples.xml" +} From 3e5fed69113f64cbbaeb8b54b00e8f5438af9c26 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:57:44 +0200 Subject: [PATCH 331/556] Structural app loads by app json --- kratos.gid/apps/Structural/start.tcl | 65 ++++++------------- .../apps/Structural/xml/XmlController.tcl | 40 +++++------- 2 files changed, 39 insertions(+), 66 deletions(-) diff --git a/kratos.gid/apps/Structural/start.tcl b/kratos.gid/apps/Structural/start.tcl index 5ea35723a..a491245ce 100644 --- a/kratos.gid/apps/Structural/start.tcl +++ b/kratos.gid/apps/Structural/start.tcl @@ -1,68 +1,45 @@ namespace eval ::Structural { # Variable declaration variable dir - variable attributes - variable kratos_name - variable app_id + variable _app } -proc ::Structural::Init { } { +proc ::Structural::Init { app } { # Variable initialization variable dir - variable attributes - variable kratos_name - variable app_id - - set app_id Structural - set dir [apps::getMyDir "Structural"] - set attributes [dict create] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - # Intervals - dict set attributes UseIntervals 1 - if {$::Kratos::kratos_private(DevMode) eq "dev"} {dict set attributes UseIntervals 1} - - set kratos_name StructuralMechanicsApplication + variable _app + set _app $app - LoadMyFiles + ::Structural::xml::Init + ::Structural::write::Init } -proc ::Structural::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir postprocess formfinding.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] -} - -proc ::Structural::CustomMenus { } { - Structural::examples::UpdateMenus - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Formfinding - Update geometry" ] end POST [list ::Structural::Formfinding::UpdateGeometry] "" "" insert = - GiDMenu::UpdateMenus -} -proc ::Structural::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} +proc ::Structural::GetAttribute {name} {return [$::Structural::_app getProperty $name]} +proc ::Structural::GetUniqueName {name} {return [$::Structural::_app getUniqueName $name]} +proc ::Structural::GetWriteProperty {name} {return [$::Structural::_app getWriteProperty $name]} +# Create the old-gid condition relation_line_geo_mesh to link geometry and mesh entities. +# Topic: Local axes, beams +# TODO: remove this when GiD creates this relation automatically proc ::Structural::BeforeMeshGeneration { size } { foreach group [GiD_Groups list] { GiD_AssignData condition relation_line_geo_mesh Lines {0} [GiD_EntitiesGroups get $group lines] } } +# Some conditions applied over small displacement parts must change the topology name... una chufa proc ::Structural::ApplicationSpecificGetCondition {condition group etype nnodes} { return [Structural::write::ApplicationSpecificGetCondition $condition $group $etype $nnodes] } -::Structural::Init +# Add formfinding button in Kratos menu in postprocess +proc ::Structural::CustomMenus { } { + Structural::examples::UpdateMenus + + GiDMenu::InsertOption "Kratos" [list "---"] 8 POST "" "" "" insertafter = + GiDMenu::InsertOption "Kratos" [list "Formfinding - Update geometry" ] end POST [list ::Structural::Formfinding::UpdateGeometry] "" "" insert = + GiDMenu::UpdateMenus +} \ No newline at end of file diff --git a/kratos.gid/apps/Structural/xml/XmlController.tcl b/kratos.gid/apps/Structural/xml/XmlController.tcl index 1a0c25749..93e362382 100644 --- a/kratos.gid/apps/Structural/xml/XmlController.tcl +++ b/kratos.gid/apps/Structural/xml/XmlController.tcl @@ -1,8 +1,8 @@ -namespace eval Structural::xml { +namespace eval ::Structural::xml { variable dir } -proc Structural::xml::Init { } { +proc ::Structural::xml::Init { } { variable dir Model::InitVariables dir $Structural::dir @@ -19,26 +19,24 @@ proc Structural::xml::Init { } { Model::getSolvers Solvers.xml } -proc Structural::xml::getUniqueName {name} { +proc ::Structural::xml::getUniqueName {name} { return ST$name } -proc ::Structural::xml::MultiAppEvent {args} { - -} - -proc Structural::xml::CustomTree { args } { +proc ::Structural::xml::CustomTree { args } { spdAux::SetValueOnTreeItem state hidden STResults CutPlanes spdAux::SetValueOnTreeItem v SingleFile GiDOptions GiDMultiFileFlag spdAux::SetValueOnTreeItem v 1 GiDOptions EchoLevel - set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'CONDENSED_DOF_LIST_2D'\]"] + set nodal_results_node [[customlib::GetBaseRoot] selectNodes [spdAux::getRoute NodalResults]] + + set result_node [$nodal_results_node selectNodes "./value\[@n = 'CONDENSED_DOF_LIST_2D'\]"] if {$result_node ne "" } {$result_node delete} - set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'CONDENSED_DOF_LIST'\]"] + set result_node [$nodal_results_node selectNodes "./value\[@n = 'CONDENSED_DOF_LIST'\]"] if {$result_node ne "" } {$result_node delete} - set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'CONTACT'\]"] + set result_node [$nodal_results_node selectNodes "./value\[@n = 'CONTACT'\]"] if {$result_node ne "" } {$result_node delete} - set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'CONTACT_SLAVE'\]"] + set result_node [$nodal_results_node selectNodes "./value\[@n = 'CONTACT_SLAVE'\]"] if {$result_node ne "" } {$result_node delete} set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute STNodalConditions]/condition\[@n = 'VOLUMETRIC_STRAIN'\]"] if {$result_node ne "" } {$result_node delete} @@ -52,7 +50,7 @@ proc Structural::xml::CustomTree { args } { } } -proc Structural::xml::ProcCheckGeometryStructural {domNode args} { +proc ::Structural::xml::ProcCheckGeometryStructural {domNode args} { set ret "line,surface" if {$::Model::SpatialDimension eq "3D"} { set ret "line,surface,volume" @@ -60,7 +58,7 @@ proc Structural::xml::ProcCheckGeometryStructural {domNode args} { return $ret } -proc Structural::xml::ProcGetSolutionStrategiesStructural { domNode args } { +proc ::Structural::xml::ProcGetSolutionStrategiesStructural { domNode args } { set names "" set pnames "" set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute STSoluType]] v] @@ -82,7 +80,7 @@ proc Structural::xml::ProcGetSolutionStrategiesStructural { domNode args } { return $pnames } -proc Structural::xml::ProcCheckNodalConditionStateStructural {domNode args} { +proc ::Structural::xml::ProcCheckNodalConditionStateStructural {domNode args} { # Overwritten the base function to add Solution Type restrictions set parts_un STParts if {[spdAux::getRoute $parts_un] ne ""} { @@ -103,7 +101,7 @@ proc Structural::xml::ProcCheckNodalConditionStateStructural {domNode args} { } {return "normal"} } -proc Structural::xml::ProcCheckGeometryStructural {domNode args} { +proc ::Structural::xml::ProcCheckGeometryStructural {domNode args} { set ret "surface" if {$::Model::SpatialDimension eq "3D"} { set ret "surface,volume" @@ -112,7 +110,7 @@ proc Structural::xml::ProcCheckGeometryStructural {domNode args} { } -proc Structural::xml::UpdateParts {domNode args} { +proc ::Structural::xml::UpdateParts {domNode args} { set current [lindex [$domNode selectNodes "./group"] end] set element_name [get_domnode_attribute [$current selectNodes "./value\[@n = 'Element'\]"] v] set element [Model::getElement $element_name] @@ -122,7 +120,7 @@ proc Structural::xml::UpdateParts {domNode args} { } } -proc Structural::xml::AddLocalAxesToBeamElement { current } { +proc ::Structural::xml::AddLocalAxesToBeamElement { current } { # set y_axis_deviation [get_domnode_attribute [$current selectNodes "./value\[@n = 'LOCAL_AXIS_ROTATION'\]"] v] # W $y_axis_deviation set group [get_domnode_attribute $current n] @@ -136,7 +134,7 @@ proc Structural::xml::AddLocalAxesToBeamElement { current } { ############# procs ################# -proc Structural::xml::ProcGetElementsStructural { domNode args } { +proc ::Structural::xml::ProcGetElementsStructural { domNode args } { set nodeApp [spdAux::GetAppIdFromNode $domNode] set sol_stratUN [apps::getAppUniqueName $nodeApp SolStrat] set schemeUN [apps::getAppUniqueName $nodeApp Scheme] @@ -194,6 +192,4 @@ proc Structural::xml::ProcGetElementsStructural { domNode args } { } #spdAux::RequestRefresh return $diction -} - -Structural::xml::Init +} \ No newline at end of file From 8edfbd5ffff5e4694bee1089c8cf1b24a4a25383 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:58:31 +0200 Subject: [PATCH 332/556] Structural write uses GetWriteProperty --- kratos.gid/apps/Structural/write/write.tcl | 91 +++++++++---------- .../write/writeProjectParameters.tcl | 20 ++-- 2 files changed, 53 insertions(+), 58 deletions(-) diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index c57912e75..1b1fddee7 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -1,11 +1,11 @@ -namespace eval Structural::write { +namespace eval ::Structural::write { variable ConditionsDictGroupIterators variable NodalConditionsGroup variable writeAttributes variable ContactsDict } -proc Structural::write::Init { } { +proc ::Structural::write::Init { } { variable ConditionsDictGroupIterators variable NodalConditionsGroup set ConditionsDictGroupIterators [dict create] @@ -17,24 +17,24 @@ proc Structural::write::Init { } { variable writeAttributes set writeAttributes [dict create] SetAttribute validApps [list "Structural"] - SetAttribute writeCoordinatesByGroups 0 - SetAttribute properties_location json - SetAttribute parts_un STParts - SetAttribute time_parameters_un STTimeParameters - SetAttribute results_un STResults - SetAttribute materials_un STMaterials - SetAttribute initial_conditions_un STInitialConditions - SetAttribute nodal_conditions_un STNodalConditions - SetAttribute conditions_un STLoads + SetAttribute writeCoordinatesByGroups [::Structural::GetWriteProperty coordinates] + SetAttribute properties_location [::Structural::GetWriteProperty properties_location] + SetAttribute parts_un [::Structural::GetUniqueName parts] + SetAttribute time_parameters_un [::Structural::GetUniqueName time_parameters] + SetAttribute results_un [::Structural::GetUniqueName results] + SetAttribute materials_un [::Structural::GetUniqueName materials] + SetAttribute initial_conditions_un [::Structural::GetUniqueName initial_conditions] + SetAttribute nodal_conditions_un [::Structural::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::Structural::GetUniqueName conditions] SetAttribute nodal_conditions_no_submodelpart [list CONDENSED_DOF_LIST CONDENSED_DOF_LIST_2D CONTACT CONTACT_SLAVE] - SetAttribute materials_file "StructuralMaterials.json" - SetAttribute main_script_file "KratosStructural.py" - SetAttribute model_part_name "Structure" + SetAttribute materials_file [::Structural::GetWriteProperty materials_file] + SetAttribute main_script_file [::Structural::GetAttribute main_launch_file] + SetAttribute model_part_name [::Structural::GetWriteProperty model_part_name] SetAttribute output_model_part_name "" } # MDPA Blocks -proc Structural::write::writeModelPartEvent { } { +proc ::Structural::write::writeModelPartEvent { } { variable ConditionsDictGroupIterators initLocalWriteConfiguration write::initWriteConfiguration [GetAttributes] @@ -45,7 +45,7 @@ proc Structural::write::writeModelPartEvent { } { write::WriteString "End Properties" # Nodal coordinates (1: Print only Structural nodes | 0: the whole mesh ) - if {[GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} + if {[GetAttribute writeCoordinatesByGroups] ne "all"} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} # Element connectivities (Groups on STParts) write::writeElementConnectivities @@ -68,7 +68,7 @@ proc Structural::write::writeModelPartEvent { } { } -proc Structural::write::writeConditions { } { +proc ::Structural::write::writeConditions { } { variable ConditionsDictGroupIterators set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un] ] @@ -76,7 +76,7 @@ proc Structural::write::writeConditions { } { writeContactConditions $last_iter } -proc Structural::write::writeMeshes { } { +proc ::Structural::write::writeMeshes { } { # There are some Conditions and nodalConditions that dont generate a submodelpart # Add them to this list @@ -103,7 +103,7 @@ proc Structural::write::writeMeshes { } { writeContacts } -proc Structural::write::writeContactConditions { last_iter } { +proc ::Structural::write::writeContactConditions { last_iter } { variable ConditionsDictGroupIterators set root [customlib::GetBaseRoot] set ov "line" @@ -122,7 +122,7 @@ proc Structural::write::writeContactConditions { last_iter } { } } -proc Structural::write::writeLoads { } { +proc ::Structural::write::writeLoads { } { variable ConditionsDictGroupIterators set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" @@ -138,7 +138,7 @@ proc Structural::write::writeLoads { } { } } -proc Structural::write::writeContacts { } { +proc ::Structural::write::writeContacts { } { variable ConditionsDictGroupIterators variable ContactsDict @@ -179,14 +179,14 @@ proc Structural::write::writeContacts { } { } } -proc Structural::write::writeCustomBlock { } { +proc ::Structural::write::writeCustomBlock { } { write::WriteString "Begin Custom" write::WriteString "Custom write for Structural, any app can call me, so be careful!" write::WriteString "End Custom" write::WriteString "" } -proc Structural::write::getLastConditionId { } { +proc ::Structural::write::getLastConditionId { } { variable ConditionsDictGroupIterators set top 1 if {$ConditionsDictGroupIterators ne ""} { @@ -198,11 +198,11 @@ proc Structural::write::getLastConditionId { } { } # Custom files -proc Structural::write::WriteMaterialsFile { } { +proc ::Structural::write::WriteMaterialsFile { } { write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] True [GetAttribute model_part_name] } -proc Structural::write::GetUsedElements { {get "Objects"} } { +proc ::Structural::write::GetUsedElements { {get "Objects"} } { set lista [list ] foreach gNode [Structural::write::GetPartsGroups] { set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] @@ -213,7 +213,7 @@ proc Structural::write::GetUsedElements { {get "Objects"} } { return $lista } -proc Structural::write::GetPartsGroups { {get "Objects"} } { +proc ::Structural::write::GetPartsGroups { {get "Objects"} } { set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" set lista [list ] foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { @@ -224,7 +224,7 @@ proc Structural::write::GetPartsGroups { {get "Objects"} } { return $lista } -proc Structural::write::writeLocalAxes { } { +proc ::Structural::write::writeLocalAxes { } { set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] @@ -237,7 +237,7 @@ proc Structural::write::writeLocalAxes { } { } # This is the kind of code I hate -proc Structural::write::writeHinges { } { +proc ::Structural::write::writeHinges { } { # format for writing ids set id_f [dict get $write::formats_dict ID] @@ -309,10 +309,10 @@ proc Structural::write::writeHinges { } { } } -proc Structural::write::initLocalWriteConfiguration { } { +proc ::Structural::write::initLocalWriteConfiguration { } { } -proc Structural::write::usesContact { } { +proc ::Structural::write::usesContact { } { set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute STNodalConditions]/condition\[@n = 'CONTACT'\]/group"] if {$result_node ne ""} { @@ -323,7 +323,7 @@ proc Structural::write::usesContact { } { } # return 0 means ok; return [list 1 "Error message to be displayed"] -proc Structural::write::writeValidateEvent { } { +proc ::Structural::write::writeValidateEvent { } { set problem 0 set problem_message [list ] @@ -335,7 +335,7 @@ proc Structural::write::writeValidateEvent { } { return [list $problem $problem_message] } -proc Structural::write::validateTrussMesh { } { +proc ::Structural::write::validateTrussMesh { } { # Elements to be checked set truss_element_names [list "TrussLinearElement2D" "TrussElement2D" "TrussLinearElement3D" "TrussElement3D"] set error 0 @@ -368,7 +368,7 @@ proc Structural::write::validateTrussMesh { } { return [list $error $error_message] } -proc Structural::write::ApplicationSpecificGetCondition {condition group etype nnodes} { +proc ::Structural::write::ApplicationSpecificGetCondition {condition group etype nnodes} { # Prepare the return, if nothing to apply, return the same condition set ret $condition @@ -399,7 +399,7 @@ proc Structural::write::ApplicationSpecificGetCondition {condition group etype n return $ret } -proc Structural::write::GroupUsesSmallDisplacement {group used_small_disp_elements} { +proc ::Structural::write::GroupUsesSmallDisplacement {group used_small_disp_elements} { set ret 0 set group_nodes [GiD_EntitiesGroups get $group nodes] @@ -413,7 +413,7 @@ proc Structural::write::GroupUsesSmallDisplacement {group used_small_disp_elemen return $ret } -proc Structural::write::PrepareSubGroupsAssignChildEntitiesOnParents { } { +proc ::Structural::write::PrepareSubGroupsAssignChildEntitiesOnParents { } { # list of groups sorted by lenght. so we always treat childs first and parents last set groups_list [lsort -command {apply {{a b} {expr {[string length $a] - [string length $b]}}}} [GiD_Groups list]] foreach group $groups_list { @@ -428,8 +428,7 @@ proc Structural::write::PrepareSubGroupsAssignChildEntitiesOnParents { } { } } - -proc Structural::write::writeCustomFilesEvent { } { +proc ::Structural::write::writeCustomFilesEvent { } { WriteMaterialsFile write::SetParallelismConfiguration @@ -439,42 +438,40 @@ proc Structural::write::writeCustomFilesEvent { } { write::RenameFileInModel $orig_name "MainKratos.py" } -proc Structural::write::SetCoordinatesByGroups {value} { +proc ::Structural::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } -proc Structural::write::GetAttribute {att} { +proc ::Structural::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc Structural::write::GetAttributes {} { +proc ::Structural::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc Structural::write::SetAttribute {att val} { +proc ::Structural::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc Structural::write::AddAttribute {att val} { +proc ::Structural::write::AddAttribute {att val} { variable writeAttributes dict append writeAttributes $att $val] } -proc Structural::write::AddAttributes {configuration} { +proc ::Structural::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc Structural::write::AddValidApps {appList} { +proc ::Structural::write::AddValidApps {appList} { AddAttribute validApps $appList } -proc Structural::write::ApplyConfiguration { } { +proc ::Structural::write::ApplyConfiguration { } { variable writeAttributes write::SetConfigurationAttributes $writeAttributes } - -Structural::write::Init diff --git a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl index aa3c87be8..1f9409da5 100644 --- a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl @@ -1,12 +1,12 @@ # Project Parameters -proc Structural::write::getOldParametersDict { } { +proc ::Structural::write::getOldParametersDict { } { set model_part_name [GetAttribute model_part_name] set projectParametersDict [dict create] # Problem data # Create section - set problemDataDict [write::GetDefaultProblemDataDict $Structural::app_id] + set problemDataDict [write::GetDefaultProblemDataDict [::Structural::GetAttribute id]] set solutiontype [write::getValue STSoluType] # Time Parameters @@ -145,7 +145,7 @@ proc Structural::write::getOldParametersDict { } { dict set projectParametersDict processes $processesDict # GiD output configuration - dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict $Structural::app_id] + dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict [::Structural::GetAttribute id]] set check_list [list "UpdatedLagrangianElementUP2D" "UpdatedLagrangianElementUPAxisym"] foreach elem $check_list { @@ -163,7 +163,7 @@ proc Structural::write::getOldParametersDict { } { return $projectParametersDict } -proc Structural::write::GetContactConditionsDict { } { +proc ::Structural::write::GetContactConditionsDict { } { variable ContactsDict set root [customlib::GetBaseRoot] @@ -211,15 +211,13 @@ proc Structural::write::GetContactConditionsDict { } { return $contacts } - -proc Structural::write::writeParametersEvent { } { +proc ::Structural::write::writeParametersEvent { } { write::WriteJSON [getParametersDict] } - # Project Parameters -proc Structural::write::getParametersDict { } { +proc ::Structural::write::getParametersDict { } { # Get the base dictionary for the project parameters set project_parameters_dict [getOldParametersDict] @@ -234,11 +232,11 @@ proc Structural::write::getParametersDict { } { return $project_parameters_dict } -proc Structural::write::writeParametersEvent { } { +proc ::Structural::write::writeParametersEvent { } { write::WriteJSON [::Structural::write::getParametersDict] } -proc Structural::write::UsingSpecificDofElements { SpecificDof } { +proc ::Structural::write::UsingSpecificDofElements { SpecificDof } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group/value\[@n='Element'\]" set elements [$root selectNodes $xp1] @@ -252,7 +250,7 @@ proc Structural::write::UsingSpecificDofElements { SpecificDof } { return $bool } -proc Structural::write::UsingFileInPrestressedMembrane { } { +proc ::Structural::write::UsingFileInPrestressedMembrane { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group/value\[@n='Element'\]" set elements [$root selectNodes $xp1] From 428e18ffcec2b5a44d6968523d921133842253e8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:58:54 +0200 Subject: [PATCH 333/556] Structural examples update --- .../Structural/examples/HighRiseBuilding.tcl | 21 +++++++------ ...ane.tcl => IncompressibleCookMembrane.tcl} | 30 ++++++++++--------- .../Structural/examples/TrussCantilever.tcl | 17 ++++++----- .../apps/Structural/examples/examples.tcl | 12 +++----- .../apps/Structural/examples/examples.xml | 10 +++---- 5 files changed, 46 insertions(+), 44 deletions(-) rename kratos.gid/apps/Structural/examples/{incompressible_cook_membrane.tcl => IncompressibleCookMembrane.tcl} (88%) diff --git a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl index 57228e416..f61175d72 100644 --- a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl @@ -1,5 +1,8 @@ +namespace eval ::Structural::examples::HighRiseBuilding { -proc ::Structural::examples::HighRiseBuilding {args} { +} + +proc ::Structural::examples::HighRiseBuilding::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -7,10 +10,10 @@ proc ::Structural::examples::HighRiseBuilding {args} { } Kratos::ResetModel - DrawHighRiseBuildingGeometry$::Model::SpatialDimension - AssignGroupsHighRiseBuilding$::Model::SpatialDimension - AssignHighRiseBuildingMeshSizes$::Model::SpatialDimension - TreeAssignationHighRiseBuilding$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -18,7 +21,7 @@ proc ::Structural::examples::HighRiseBuilding {args} { GiD_Process 'Zoom Frame } -proc Structural::examples::DrawHighRiseBuildingGeometry2D {args} { +proc ::Structural::examples::HighRiseBuilding::DrawGeometry2D {args} { GiD_Layers create Structure GiD_Layers edit to_use Structure @@ -43,7 +46,7 @@ proc Structural::examples::DrawHighRiseBuildingGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface {*}$structureLines escape escape } -proc Structural::examples::AssignGroupsHighRiseBuilding2D {args} { +proc ::Structural::examples::HighRiseBuilding::AssignGroups2D {args} { # Group creation GiD_Groups create Structure GiD_Groups create Ground @@ -54,14 +57,14 @@ proc Structural::examples::AssignGroupsHighRiseBuilding2D {args} { GiD_EntitiesGroups assign InterfaceStructure lines {1 2 3} } -proc Structural::examples::AssignHighRiseBuildingMeshSizes2D {args} { +proc ::Structural::examples::HighRiseBuilding::AssignMeshSizes2D {args} { set structure_mesh_size 5.0 GiD_Process Mescape Meshing ElemType Quadrilateral [GiD_EntitiesGroups get Structure surfaces] escape GiD_Process Mescape Meshing Structured Surfaces Size {*}[GiD_EntitiesGroups get Structure surfaces] escape $structure_mesh_size {*}[GiD_EntitiesGroups get InterfaceStructure lines] escape escape escape escape } -proc Structural::examples::TreeAssignationHighRiseBuilding2D {args} { +proc ::Structural::examples::HighRiseBuilding::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/Structural/examples/incompressible_cook_membrane.tcl b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl similarity index 88% rename from kratos.gid/apps/Structural/examples/incompressible_cook_membrane.tcl rename to kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl index 94b996b83..8a574cc8f 100644 --- a/kratos.gid/apps/Structural/examples/incompressible_cook_membrane.tcl +++ b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl @@ -1,5 +1,7 @@ +namespace eval ::Structural::examples::IncompressibleCookMembrane { -proc ::Structural::examples::IncompressibleCookMembrane {args} { +} +proc ::Structural::examples::IncompressibleCookMembrane::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -7,10 +9,10 @@ proc ::Structural::examples::IncompressibleCookMembrane {args} { } Kratos::ResetModel - DrawIncompressibleCookMembraneGeometry$::Model::SpatialDimension - AssignGroupsIncompressibleCookMembrane$::Model::SpatialDimension - AssignIncompressibleCookMembraneMeshSizes$::Model::SpatialDimension - TreeAssignationIncompressibleCookMembrane$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -22,7 +24,7 @@ proc ::Structural::examples::IncompressibleCookMembrane {args} { GiD_Process 'Zoom Frame } -proc Structural::examples::DrawIncompressibleCookMembraneGeometry2D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::DrawGeometry2D {args} { GiD_Layers create Structure GiD_Layers edit to_use Structure @@ -47,15 +49,15 @@ proc Structural::examples::DrawIncompressibleCookMembraneGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface {*}$structureLines escape escape } -proc Structural::examples::DrawIncompressibleCookMembraneGeometry3D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::DrawGeometry3D {args} { # Create layers and draw in plane geometry - DrawIncompressibleCookMembraneGeometry2D + DrawGeometry2D # Extrude the xy-plane geometry GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape Mescape } -proc Structural::examples::AssignGroupsIncompressibleCookMembrane2D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::AssignGroups2D {args} { # Group creation GiD_Groups create Structure GiD_Groups create LeftEdge @@ -66,7 +68,7 @@ proc Structural::examples::AssignGroupsIncompressibleCookMembrane2D {args} { GiD_EntitiesGroups assign RightEdge lines 2 } -proc Structural::examples::AssignGroupsIncompressibleCookMembrane3D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::AssignGroups3D {args} { # Group creation GiD_Groups create Structure GiD_Groups create LeftSurface @@ -79,18 +81,18 @@ proc Structural::examples::AssignGroupsIncompressibleCookMembrane3D {args} { GiD_EntitiesGroups assign SideSurfaces surfaces {1 6} } -proc Structural::examples::AssignIncompressibleCookMembraneMeshSizes2D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::AssignMeshSizes2D {args} { set edges_divisions 64 GiD_Process Mescape Meshing Structured Surfaces 1 escape $edges_divisions 1 2 3 4 escape escape escape Mescape Meshing ElemType Quadrilateral 1 escape } -proc Structural::examples::AssignIncompressibleCookMembraneMeshSizes3D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::AssignMeshSizes3D {args} { set side_edges_divisions 64 set thickness_edges_divisions 1 GiD_Process Mescape Meshing ElemType Hexahedra 1 escape Mescape Meshing Structured Volumes 1 escape $side_edges_divisions 1 3 5 7 2 6 escape $thickness_edges_divisions 11 escape escape escape escape escape escape } -proc Structural::examples::TreeAssignationIncompressibleCookMembrane2D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -131,7 +133,7 @@ proc Structural::examples::TreeAssignationIncompressibleCookMembrane2D {args} { spdAux::RequestRefresh } -proc Structural::examples::TreeAssignationIncompressibleCookMembrane3D {args} { +proc ::Structural::examples::IncompressibleCookMembrane::TreeAssignation3D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl index b591888ee..3e26d234c 100644 --- a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl +++ b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl @@ -1,16 +1,18 @@ +namespace eval ::Structural::examples::TrussCantilever { -proc ::Structural::examples::TrussCantilever {args} { +} +proc ::Structural::examples::TrussCantilever::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawTrussCantileverGeometry - AssignTrussCantileverMeshSizes - TreeAssignationTrussCantilever + DrawGeometry + AssignMeshSizes + TreeAssignation } -proc Structural::examples::DrawTrussCantileverGeometry {args} { +proc ::Structural::examples::TrussCantilever::DrawGeometry {args} { Kratos::ResetModel set structure_layer Structure GiD_Process Mescape 'Layers ChangeName Layer0 $structure_layer escape @@ -57,12 +59,11 @@ proc Structural::examples::DrawTrussCantileverGeometry {args} { GidUtils::UpdateWindow GROUPS } -proc Structural::examples::AssignTrussCantileverMeshSizes {args} { +proc ::Structural::examples::TrussCantilever::AssignMeshSizes {args} { GiD_Process Mescape Meshing Structured Lines 1 {*}[GiD_EntitiesGroups get Structure lines] escape escape } - -proc Structural::examples::TreeAssignationTrussCantilever {args} { +proc ::Structural::examples::TrussCantilever::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/Structural/examples/examples.tcl b/kratos.gid/apps/Structural/examples/examples.tcl index 3dfcd42e1..804f1d1f4 100644 --- a/kratos.gid/apps/Structural/examples/examples.tcl +++ b/kratos.gid/apps/Structural/examples/examples.tcl @@ -1,14 +1,10 @@ -namespace eval Structural::examples { +namespace eval ::Structural::examples { } -proc Structural::examples::Init { } { - uplevel #0 [list source [file join $::Structural::dir examples TrussCantilever.tcl]] - uplevel #0 [list source [file join $::Structural::dir examples HighRiseBuilding.tcl]] - uplevel #0 [list source [file join $::Structural::dir examples incompressible_cook_membrane.tcl]] -} +proc ::Structural::examples::Init { } { -proc Structural::examples::UpdateMenus { } { } -Structural::examples::Init \ No newline at end of file +proc ::Structural::examples::UpdateMenus { } { +} diff --git a/kratos.gid/apps/Structural/examples/examples.xml b/kratos.gid/apps/Structural/examples/examples.xml index 7232baab8..618170084 100644 --- a/kratos.gid/apps/Structural/examples/examples.xml +++ b/kratos.gid/apps/Structural/examples/examples.xml @@ -1,9 +1,9 @@ - - - - - + + + + + \ No newline at end of file From a6119047409cf40314f72f5ca173b10e9ac915c5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 18:59:06 +0200 Subject: [PATCH 334/556] formfinding namespace --- kratos.gid/apps/Structural/postprocess/formfinding.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Structural/postprocess/formfinding.tcl b/kratos.gid/apps/Structural/postprocess/formfinding.tcl index 18ce5f95b..0b70427a7 100644 --- a/kratos.gid/apps/Structural/postprocess/formfinding.tcl +++ b/kratos.gid/apps/Structural/postprocess/formfinding.tcl @@ -5,7 +5,7 @@ namespace eval ::Structural::Formfinding { } # copy problem folder to restore the formfinding problem -proc Structural::Formfinding::CopyFormfinding {} { +proc ::Structural::Formfinding::CopyFormfinding {} { #delete formfinding folder if it exists # set script_file [file nativename [GiD_Info project modelname].gid] set script_folder [GiD_Info project modelname].gid @@ -28,7 +28,7 @@ proc Structural::Formfinding::CopyFormfinding {} { } # update nodal coordinates -proc Structural::Formfinding::ModifyNodes {} { +proc ::Structural::Formfinding::ModifyNodes {} { set node_list [GiD_Result get {Displacement Kratos 1.1}] set counter 0 foreach node $node_list { @@ -55,7 +55,7 @@ proc Structural::Formfinding::ModifyNodes {} { GidUtils::SetWarnLine "Preprocess mesh is now updated" } -proc Structural::Formfinding::UpdateGeometry { } { +proc ::Structural::Formfinding::UpdateGeometry { } { CopyFormfinding ModifyNodes } From 0eaff35fc9e88dd501e6109a7bf5cd23d94e648f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 19:16:36 +0200 Subject: [PATCH 335/556] Examples loaded --- kratos.gid/apps/Examples/app.json | 18 ++++++++++++++++++ kratos.gid/apps/Examples/start.tcl | 1 - 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/Examples/app.json delete mode 100644 kratos.gid/apps/Examples/start.tcl diff --git a/kratos.gid/apps/Examples/app.json b/kratos.gid/apps/Examples/app.json new file mode 100644 index 000000000..1bd3e7284 --- /dev/null +++ b/kratos.gid/apps/Examples/app.json @@ -0,0 +1,18 @@ +{ + "id": "Examples", + "name": "Examples", + "prefix": "ST", + "themed": false, + "kratos_name": "StructuralMechanicsApplication", + "start_script":"::Examples::StartWindow", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": false, + "intervals": false, + "wizard": true + } +} diff --git a/kratos.gid/apps/Examples/start.tcl b/kratos.gid/apps/Examples/start.tcl deleted file mode 100644 index 37c03046b..000000000 --- a/kratos.gid/apps/Examples/start.tcl +++ /dev/null @@ -1 +0,0 @@ -::Examples::StartWindow \ No newline at end of file From 566d9a25117b7f48d5a78d987e368c719dee2ac1 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 19:16:50 +0200 Subject: [PATCH 336/556] IsDeveloperMode function --- kratos.gid/apps/Pfem/start.tcl | 2 +- kratos.gid/apps/PfemFluid/start.tcl | 2 +- kratos.gid/apps/PfemThermic/start.tcl | 2 +- kratos.gid/apps/Stent/start.tcl | 1 - kratos.gid/scripts/Applications.tcl | 8 +++++--- .../Controllers/ApplicationMarketWindow.tcl | 2 +- kratos.gid/scripts/Controllers/CommonProcs.tcl | 5 ++--- kratos.gid/scripts/Deprecated.tcl | 16 ++++++++-------- kratos.gid/scripts/Model/Entity.tcl | 4 ++-- kratos.gid/scripts/Utils.tcl | 6 ++++++ kratos.gid/scripts/Writing/Writing.tcl | 6 +++--- 11 files changed, 30 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/Pfem/start.tcl b/kratos.gid/apps/Pfem/start.tcl index e1618d909..59ef0f5ca 100644 --- a/kratos.gid/apps/Pfem/start.tcl +++ b/kratos.gid/apps/Pfem/start.tcl @@ -18,7 +18,7 @@ proc ::Pfem::Init { } { set ::spdAux::TreeVisibility 1 set attributes [dict create] dict set attributes UseIntervals 1 - if {$::Kratos::kratos_private(DevMode) ne "dev"} {error [= "You need to change to Developer mode in the Kratos menu"] } + if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } dict set attributes UseRestart 1 LoadMyFiles } diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index ef9b17365..96565961b 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -18,7 +18,7 @@ proc ::PfemFluid::Init { } { set ::spdAux::TreeVisibility 1 set attributes [dict create] dict set attributes UseIntervals 1 - if {$::Kratos::kratos_private(DevMode) ne "dev"} {error [= "You need to change to Developer mode in the Kratos menu"] } + if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } dict set attributes UseRestart 1 LoadMyFiles } diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 0f612a96b..2862d6342 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -23,7 +23,7 @@ proc ::PfemThermic::Init { } { apps::LoadAppById "PfemFluid" apps::LoadAppById "ConvectionDiffusion" - if {$::Kratos::kratos_private(DevMode) ne "dev"} {error [= "You need to change to Developer mode in the Kratos menu"] } + if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } set ::spdAux::TreeVisibility 1 set ::Model::ValidSpatialDimensions [list 2D 3D] diff --git a/kratos.gid/apps/Stent/start.tcl b/kratos.gid/apps/Stent/start.tcl index 4f318790c..6456a8da3 100644 --- a/kratos.gid/apps/Stent/start.tcl +++ b/kratos.gid/apps/Stent/start.tcl @@ -32,7 +32,6 @@ proc ::Stent::Init { } { # Intervals dict set attributes UseIntervals 1 - if {$::Kratos::kratos_private(DevMode) eq "dev"} {dict set attributes UseIntervals 1} set kratos_name StructuralMechanicsApplication diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 2f2cba706..9b06b6e41 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -305,9 +305,11 @@ proc apps::ActivateApp_do {app} { if {[file exists $app_definition_file]} { set props [Kratos::ReadJsonDict $app_definition_file] $app setProperties $props - foreach source_file [dict get $props script_files] { - set fileName [file join $dir $source_file] - apps::loadAppFile $fileName + if {[dict exists $props script_files]} { + foreach source_file [dict get $props script_files] { + set fileName [file join $dir $source_file] + apps::loadAppFile $fileName + } } apps::ApplyAppPreferences $app if {[dict exists $props start_script]} {eval [dict get $props start_script] $app} diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index 2dfcb7970..b7f5d785b 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -77,7 +77,7 @@ proc spdAux::CreateWindow {} { } # More button - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { set more_path [file nativename [file join $::Kratos::kratos_private(Path) images "more.png"] ] set img [gid_themes::GetImage $more_path Kratos] ttk::button $w.tools.img_more -image $img -command [list VisitWeb "https://github.com/KratosMultiphysics/GiDInterface"] diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 0de11b04d..4cd7a1100 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -548,10 +548,9 @@ proc spdAux::ProcDirectorVectorNonZero { domNode args } { proc spdAux::ProcShowInMode { domNode args } { set kw [lindex $args 0] if {$kw ni [list "Release" "Developer"]} {return "hidden"} - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { if {$kw eq "Developer"} {return "normal"} {return "hidden"} - } - if {$::Kratos::kratos_private(DevMode) eq "release"} { + } else { if {$kw eq "Developer"} {return "hidden"} {return "normal"} } } diff --git a/kratos.gid/scripts/Deprecated.tcl b/kratos.gid/scripts/Deprecated.tcl index 17c5482b3..30d1f5977 100644 --- a/kratos.gid/scripts/Deprecated.tcl +++ b/kratos.gid/scripts/Deprecated.tcl @@ -9,7 +9,7 @@ # Deprecation date: 9/03/2018 # Estimated deletion version: 5.3.0 proc write::getMeshId {cid group} { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method write::getMeshId\nUse write::getSubModelPartId\n" } write::getSubModelPartId $cid $group @@ -18,7 +18,7 @@ proc write::getMeshId {cid group} { # Deprecation date: 9/03/2018 # Estimated deletion version: 5.3.0 proc write::writeGroupMesh { cid group {what "Elements"} {iniend ""} {tableid_list ""} } { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method write::writeGroupMesh\nUse write::writeGroupSubModelPart\n" } write::writeGroupSubModelPart $cid $group $what $iniend $tableid_list @@ -27,7 +27,7 @@ proc write::writeGroupMesh { cid group {what "Elements"} {iniend ""} {tableid_li # Deprecation date: 9/03/2018 # Estimated deletion version: 5.3.0 proc write::writePartMeshes { } { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method write::writePartMeshes\nUse write::writePartSubModelPart\n" } write::writePartSubModelPart @@ -36,7 +36,7 @@ proc write::writePartMeshes { } { # Deprecation date: 9/03/2018 # Estimated deletion version: 5.3.0 proc write::GetMeshFromCondition { base_UN condition_id } { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method write::GetMeshFromCondition\nUse write::GetSubModelPartFromCondition\n" } write::GetSubModelPartFromCondition $base_UN $condition_id @@ -45,7 +45,7 @@ proc write::GetMeshFromCondition { base_UN condition_id } { # Deprecation date: 9/03/2018 # Estimated deletion version: 5.3.0 proc write::getPartsMeshId {} { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method write::getPartsMeshId\nUse write::getPartsSubModelPartId\n" } write::getPartsSubModelPartId @@ -54,7 +54,7 @@ proc write::getPartsMeshId {} { # Deprecation date: 13/03/2018 # Estimated deletion version: 5.3.0 proc spdAux::AddConditionGroupOnXPath {xpath groupid} { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method spdAux::AddConditionGroupOnXPath\nUse customlib::AddConditionGroupOnXPath\n" } return [customlib::AddConditionGroupOnXPath $xpath $groupid] @@ -63,7 +63,7 @@ proc spdAux::AddConditionGroupOnXPath {xpath groupid} { # Deprecation date: 13/03/2018 # Estimated deletion version: 5.3.0 proc spdAux::AddConditionGroupOnNode {basenode groupid} { - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { W "Deprecated method spdAux::AddConditionGroupOnNode\nUse customlib::AddConditionGroupOnNode\n" } return [customlib::AddConditionGroupOnNode $basenode $groupid] @@ -72,7 +72,7 @@ proc spdAux::AddConditionGroupOnNode {basenode groupid} { # Deprecation date: 24/04/2018 # Estimated deletion version: 6.0.0 # proc spdAux::MergeGroups {basenode groupid} { -# if {$::Kratos::kratos_private(DevMode) eq "dev"} { +# if {[Kratos::IsDeveloperMode]} { # #W "Deprecated method spdAux::MergeGroups\nUse GidUtils::MergeGroups\n" # } # return [GidUtils::MergeGroups $basenode $groupid] diff --git a/kratos.gid/scripts/Model/Entity.tcl b/kratos.gid/scripts/Model/Entity.tcl index f188dbe45..c49c9fd39 100644 --- a/kratos.gid/scripts/Model/Entity.tcl +++ b/kratos.gid/scripts/Model/Entity.tcl @@ -113,8 +113,8 @@ oo::class create Entity { method cumple {args} { #W "Cumplimos con los filtros: $args" set c 1 - if {$::Kratos::kratos_private(DevMode) ne "release"} { - # if our mode is debug, it's allowd + if {[Kratos::IsDeveloperMode]} { + # if our mode is debug, it's allowed } elseif {[my getAttribute "ProductionReady"] ne "" && [my getAttribute "ProductionReady"] ne "ProductionReady"} { # if our mode is release, only release entities #W "[my getName] no paso - [my getAttribute "ProductionReady"] " diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 9deea492a..ae57c3275 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -313,4 +313,10 @@ proc Kratos::OpenCaseIn {program} { proc xmlprograms::OpenBrowserForDirectory { baseframe variable} { set $variable [MessageBoxGetFilename directory write [_ "Select kratos debug compiled folder (kratos / bin / debug"]] return variable +} + +proc Kratos::IsDeveloperMode {} { + set is_dev 0 + if {[info exists ::Kratos::kratos_private(DevMode)] && $::Kratos::kratos_private(DevMode) eq "dev"} {set is_dev 1} + return $is_dev } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 48a2dedbb..79c19d46c 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -172,7 +172,7 @@ proc write::singleFileEvent { filename wevent {errName ""} {needsOpen 1} } { CloseFile if {$needsOpen} {OpenFile $filename} - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { if {[catch {eval $wevent} errmsg options] } { W $::errorInfo set errcode 1 @@ -203,7 +203,7 @@ proc write::writeAppMDPA {appid} { CloseFile OpenFile $filename - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { eval $wevent } else { if { [catch {eval $wevent} fid] } { @@ -647,7 +647,7 @@ proc write::WriteAssignedValues {condNode} { proc write::writeLaunchJSONFile { } { # Check if developer - if {$::Kratos::kratos_private(DevMode) eq "dev"} { + if {[Kratos::IsDeveloperMode]} { set debug_folder $Kratos::kratos_private(debug_folder) # Prepare JSON as dict From d3ac6a6cdd94aa164777b2eec5c9e50971f05489 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 30 Aug 2021 23:39:48 +0200 Subject: [PATCH 337/556] Examples app has app document --- kratos.gid/apps/Examples/app.json | 4 +--- kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Examples/app.json b/kratos.gid/apps/Examples/app.json index 1bd3e7284..18868fb90 100644 --- a/kratos.gid/apps/Examples/app.json +++ b/kratos.gid/apps/Examples/app.json @@ -1,10 +1,8 @@ { "id": "Examples", "name": "Examples", - "prefix": "ST", "themed": false, - "kratos_name": "StructuralMechanicsApplication", - "start_script":"::Examples::StartWindow", + "start_script":"::Examples::StartWindowEmpty", "requeriments":{ "apps":[], "minimum_gid_version":"15.1.3d" diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 3673dacb2..185ca2e54 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -40,6 +40,10 @@ proc Examples::LoadMyFiles { } { ResolveLinks } +proc ::Examples::StartWindowEmpty {args} { + Examples::StartWindow +} + proc Examples::StartWindow { {filter ""} } { variable examples_window variable _canvas_scroll From 2cc377354695c87d7e57918e6770e482baf4311d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 31 Aug 2021 12:08:17 +0200 Subject: [PATCH 338/556] protection in tester --- kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl | 2 +- kratos.gid/scripts/Utils.tcl | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 628af5690..338945c8b 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -143,7 +143,7 @@ proc ::Fluid::examples::CylinderInFlow::AssignMeshSizes2D {args} { # Tree assign proc ::Fluid::examples::CylinderInFlow::TreeAssignation3D {args} { TreeAssignation2D - AddCuts + ::Fluid::examples::AddCuts } proc ::Fluid::examples::CylinderInFlow::TreeAssignation2D {args} { set nd $::Model::SpatialDimension diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index ae57c3275..4bebd79c0 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -309,10 +309,11 @@ proc Kratos::OpenCaseIn {program} { } } - -proc xmlprograms::OpenBrowserForDirectory { baseframe variable} { - set $variable [MessageBoxGetFilename directory write [_ "Select kratos debug compiled folder (kratos / bin / debug"]] - return variable +if { ![GidUtils::IsTkDisabled] } { + proc xmlprograms::OpenBrowserForDirectory { baseframe variable} { + set $variable [MessageBoxGetFilename directory write [_ "Select kratos debug compiled folder (kratos / bin / debug"]] + return variable + } } proc Kratos::IsDeveloperMode {} { From b284c54fa94df034f337e6f6b1a96843aaba8890 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 31 Aug 2021 12:34:34 +0200 Subject: [PATCH 339/556] Fix launchers DEM and Fluid --- kratos.gid/apps/DEM/app.json | 52 +++++++++++++++++++++++++ kratos.gid/apps/DEM/start.tcl | 5 +-- kratos.gid/apps/DEMLauncher/app.json | 18 +++++++++ kratos.gid/apps/DEMLauncher/start.tcl | 7 +--- kratos.gid/apps/FluidLauncher/app.json | 1 + kratos.gid/apps/FluidLauncher/start.tcl | 5 +-- 6 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 kratos.gid/apps/DEM/app.json create mode 100644 kratos.gid/apps/DEMLauncher/app.json diff --git a/kratos.gid/apps/DEM/app.json b/kratos.gid/apps/DEM/app.json new file mode 100644 index 000000000..c90c2f8a7 --- /dev/null +++ b/kratos.gid/apps/DEM/app.json @@ -0,0 +1,52 @@ +{ + "id": "DEM", + "name": "DEM", + "prefix": "DEM", + "themed": false, + "kratos_name": "DEMApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "xml/XmlController.tcl", + "xml/material_relations/material_relations_window.tcl", + "write/write.tcl", + "write/writeMDPA_Parts.tcl", + "write/writeMDPA_Inlet.tcl", + "write/writeMDPA_Walls.tcl", + "write/writeMDPA_Clusters.tcl", + "write/writeMaterials.tcl", + "write/writeProjectParameters.tcl", + "write/write_utils.tcl", + "examples/examples.tcl", + "examples/SpheresDrop.tcl" + ], + "start_script": "::DEM::Init", + "requeriments": { + "apps": [], + "minimum_gid_version": "15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "DEMParts", + "nodal_conditions": "DEMNodalConditions", + "conditions": "DEMConditions", + "materials": "DEMMaterials" + }, + "write": { + "coordinates": "groups", + "materials_file": "MaterialsDEM.json", + "properties_location": "json", + "model_part_name": "FluidModelPart", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "KratosDEMAnalysis.py", + "examples": "examples/examples.xml" +} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index fee203a51..26f4671e1 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -5,7 +5,7 @@ namespace eval ::DEM { variable kratos_name } -proc ::DEM::Init { } { +proc ::DEM::Init { app } { # Variable initialization variable dir variable attributes @@ -193,6 +193,3 @@ proc ::DEM::PatchMissingSpheresInGroup {filespd} { close $fp } } - - -::DEM::Init diff --git a/kratos.gid/apps/DEMLauncher/app.json b/kratos.gid/apps/DEMLauncher/app.json new file mode 100644 index 000000000..f5de5f069 --- /dev/null +++ b/kratos.gid/apps/DEMLauncher/app.json @@ -0,0 +1,18 @@ +{ + "id": "DEM Launcher", + "name": "DEM", + "script_files": [ + "start.tcl" + ], + "start_script":"::DemLauncher::Init", + "requeriments":{ + "apps":["DEM", "DEMPFEM", "FluidDEM", "CDEM"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": true, + "intervals": false, + "wizard": false + } +} diff --git a/kratos.gid/apps/DEMLauncher/start.tcl b/kratos.gid/apps/DEMLauncher/start.tcl index 6aa2b55d0..b8af86977 100644 --- a/kratos.gid/apps/DEMLauncher/start.tcl +++ b/kratos.gid/apps/DEMLauncher/start.tcl @@ -2,10 +2,10 @@ namespace eval ::DemLauncher { variable available_apps } -proc ::DemLauncher::Init { } { +proc ::DemLauncher::Init { app } { variable available_apps - set dir [apps::getMyDir "DemLauncher"] + # TODO: Get apps from json set available_apps [list DEM DEMPFEM FluidDEM CDEM] # Allow to open the tree set ::spdAux::TreeVisibility 0 @@ -25,7 +25,6 @@ proc ::DemLauncher::AppSelectorWindow { } { # } } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait - set dir $::Kratos::kratos_private(Path) set initwind .gid.win_dem_launcher spdAux::DestroyWindows @@ -69,5 +68,3 @@ proc ::DemLauncher::ChangeAppTo {appid} { spdAux::SetSpatialDimmension undefined apps::setActiveApp $appid } - -::DemLauncher::Init diff --git a/kratos.gid/apps/FluidLauncher/app.json b/kratos.gid/apps/FluidLauncher/app.json index f2a76e7f3..9481433ca 100644 --- a/kratos.gid/apps/FluidLauncher/app.json +++ b/kratos.gid/apps/FluidLauncher/app.json @@ -4,6 +4,7 @@ "script_files": [ "start.tcl" ], + "start_script":"::FluidLauncher::Init", "requeriments":{ "apps":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], "minimum_gid_version":"15.1.3d" diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index 4f4f84b51..896daf11f 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -2,9 +2,10 @@ namespace eval ::FluidLauncher { variable available_apps } -proc ::FluidLauncher::Init { } { +proc ::FluidLauncher::Init { app } { variable available_apps + # TODO: Get apps from json set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM] # Allow to open the tree set ::spdAux::TreeVisibility 0 @@ -72,5 +73,3 @@ proc ::FluidLauncher::ChangeAppTo {appid} { spdAux::SetSpatialDimmension undefined apps::setActiveApp $appid } - -::FluidLauncher::Init From b16fa9ced9ebd7674a7b21645f5da7544a095f43 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 31 Aug 2021 13:44:40 +0200 Subject: [PATCH 340/556] Adapt DEM to app.json --- kratos.gid/apps/DEM/app.json | 4 +- kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 24 ++++------ kratos.gid/apps/DEM/examples/SpheresDrop.tcl | 24 ++++------ kratos.gid/apps/DEM/examples/examples.tcl | 17 +++---- kratos.gid/apps/DEM/examples/examples.xml | 4 +- kratos.gid/apps/DEM/start.tcl | 46 ++++--------------- kratos.gid/apps/DEM/write/write.tcl | 17 ++++--- kratos.gid/apps/DEM/xml/XmlController.tcl | 10 +--- .../material_relations/MaterialRelations.tcl | 21 +++++---- .../material_relations_window.tcl | 1 - 10 files changed, 58 insertions(+), 110 deletions(-) diff --git a/kratos.gid/apps/DEM/app.json b/kratos.gid/apps/DEM/app.json index c90c2f8a7..2be4989c1 100644 --- a/kratos.gid/apps/DEM/app.json +++ b/kratos.gid/apps/DEM/app.json @@ -11,6 +11,7 @@ "script_files": [ "start.tcl", "xml/XmlController.tcl", + "xml/material_relations/MaterialRelations.tcl", "xml/material_relations/material_relations_window.tcl", "write/write.tcl", "write/writeMDPA_Parts.tcl", @@ -21,7 +22,8 @@ "write/writeProjectParameters.tcl", "write/write_utils.tcl", "examples/examples.tcl", - "examples/SpheresDrop.tcl" + "examples/SpheresDrop.tcl", + "examples/CirclesDrop.tcl" ], "start_script": "::DEM::Init", "requeriments": { diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index 975c21bb8..cda7cb550 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -1,14 +1,16 @@ +namespace eval ::DEM::examples::CirclesDrop { -proc ::DEM::examples::CirclesDrop {args} { +} +proc ::DEM::examples::CirclesDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawGeometryCirclesDrop - AssignToTreeCirclesDrop - AssignMeshSizeCirclesDrop + DrawGeometry + AssignToTree + AssignMeshSize GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +19,7 @@ proc ::DEM::examples::CirclesDrop {args} { } -proc ::DEM::examples::DrawGeometryCirclesDrop { } { +proc ::DEM::examples::CirclesDrop::DrawGeometry { } { Kratos::ResetModel GiD_Groups create "Box" @@ -40,7 +42,7 @@ proc ::DEM::examples::DrawGeometryCirclesDrop { } { } -proc ::DEM::examples::AssignToTreeCirclesDrop { } { +proc ::DEM::examples::CirclesDrop::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] @@ -76,15 +78,7 @@ proc ::DEM::examples::AssignToTreeCirclesDrop { } { spdAux::RequestRefresh } -proc ::DEM::examples::AssignMeshSizeCirclesDrop { } { +proc ::DEM::examples::CirclesDrop::AssignMeshSize { } { GiD_Process Mescape Meshing AssignSizes Surfaces 0.6 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Lines 0.6 1:end escape escape escape } - -proc ::DEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl index 45a4b68da..73447bbdd 100644 --- a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl @@ -1,21 +1,23 @@ +namespace eval ::DEM::examples::SpheresDrop { -proc ::DEM::examples::SpheresDrop {args} { +} +proc ::DEM::examples::SpheresDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawGeometrySpheresDrop - AssignToTreeSpheresDrop - AssignMeshSizeSpheresDrop + DrawGeometry + AssignToTree + AssignMeshSize GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS GidUtils::UpdateWindow LAYER } -proc ::DEM::examples::DrawGeometrySpheresDrop { } { +proc ::DEM::examples::SpheresDrop::DrawGeometry { } { Kratos::ResetModel # Draw floor surface @@ -40,7 +42,7 @@ proc ::DEM::examples::DrawGeometrySpheresDrop { } { GiD_EntitiesGroups assign "Body" volumes 1 } -proc ::DEM::examples::AssignToTreeSpheresDrop { } { +proc ::DEM::examples::SpheresDrop::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6] @@ -90,17 +92,9 @@ proc ::DEM::examples::AssignToTreeSpheresDrop { } { spdAux::RequestRefresh } -proc DEM::examples::AssignMeshSizeSpheresDrop { } { +proc ::DEM::examples::SpheresDrop::AssignMeshSize { } { GiD_Process Mescape Meshing AssignSizes Volumes 0.2 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Surfaces 0.2 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Lines 0.2 1:end escape escape escape } - -proc DEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/examples.tcl b/kratos.gid/apps/DEM/examples/examples.tcl index 27e0f8072..0029e86e1 100644 --- a/kratos.gid/apps/DEM/examples/examples.tcl +++ b/kratos.gid/apps/DEM/examples/examples.tcl @@ -1,14 +1,11 @@ -namespace eval DEM::examples { +namespace eval ::DEM::examples { } -proc DEM::examples::Init { } { - uplevel #0 [list source [file join $::DEM::dir examples SpheresDrop.tcl]] - uplevel #0 [list source [file join $::DEM::dir examples CirclesDrop.tcl]] +proc ::DEM::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } - -proc DEM::examples::UpdateMenus { } { - -} - -DEM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/examples.xml b/kratos.gid/apps/DEM/examples/examples.xml index eff2a9f6f..c93a86412 100644 --- a/kratos.gid/apps/DEM/examples/examples.xml +++ b/kratos.gid/apps/DEM/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 26f4671e1..9a23265bc 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -1,56 +1,26 @@ namespace eval ::DEM { # Variable declaration variable dir - variable attributes - variable kratos_name + variable _app } proc ::DEM::Init { app } { # Variable initialization + variable _app variable dir - variable attributes - variable kratos_name - set dir [apps::getMyDir "DEM"] - set attributes [dict create] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - dict set attributes UseIntervals 1 - - set kratos_name DEMApplication - - set ::Model::ValidSpatialDimensions [list 2D 3D] + set _app $app GiD_Set CalcWithoutMesh 1 - LoadMyFiles + DEM::xml::Init + DEM::write::Init } -proc ::DEM::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml material_relations MaterialRelations.tcl]] - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir xml material_relations material_relations_window.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Parts.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Walls.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Clusters.tcl]] - uplevel #0 [list source [file join $dir write writeMaterials.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir write write_utils.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] -} +proc ::DEM::GetAttribute {name} {return [$::DEM::_app getProperty $name]} +proc ::DEM::GetUniqueName {name} {return [$::DEM::_app getUniqueName $name]} +proc ::DEM::GetWriteProperty {name} {return [$::DEM::_app getWriteProperty $name]} -proc ::DEM::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} proc ::DEM::CustomToolbarItems { } { diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 0318b2697..5042068bf 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -13,14 +13,14 @@ proc DEM::write::Init { } { variable writeAttributes set writeAttributes [dict create] SetAttribute validApps [list "DEM"] - SetAttribute writeCoordinatesByGroups 1 - SetAttribute properties_location json - SetAttribute parts_un DEMParts - SetAttribute materials_un DEMMaterials - SetAttribute conditions_un DEMConditions - SetAttribute nodal_conditions_un DEMNodalConditions - SetAttribute materials_file "MaterialsDEM.json" - SetAttribute main_script_file "KratosDEMAnalysis.py" + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] + SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] + SetAttribute parts_un [::DEM::GetUniqueName parts] + SetAttribute materials_un [::DEM::GetUniqueName parts] + SetAttribute conditions_un [::DEM::GetUniqueName parts] + SetAttribute nodal_conditions_un [::DEM::GetUniqueName parts] + SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] + SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] variable partsProperties set partsProperties [dict create] @@ -174,4 +174,3 @@ proc DEM::write::FindPropertiesBySubmodelpart {props subid } { return $result } -DEM::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 2c7177aec..7a480e05e 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -17,11 +17,7 @@ proc DEM::xml::Init { } { } proc DEM::xml::getUniqueName {name} { - return DEM$name -} - -proc DEM::xml::MultiAppEvent {args} { - + return [::DEM::GetAttribute prefix]$name } proc DEM::xml::CustomTree { args } { @@ -134,7 +130,3 @@ proc DEM::xml::MaterialRelationsValidation { } { return $err } - - - -DEM::xml::Init diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl index 430a2bfbb..74770a3c8 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { catch {MaterialRelation destroy} oo::class create MaterialRelation { superclass Entity @@ -26,13 +26,13 @@ oo::class create MaterialRelation { } -proc Model::ParseMaterialRelations { doc } { +proc ::Model::ParseMaterialRelations { doc } { variable MaterialRelations set MatNodeList [$doc getElementsByTagName MaterialRelation] foreach MatNode $MatNodeList { set mat_rel [ParseMatRelNode $MatNode] - set ma [Model::getMaterialRelation [$mat_rel getName] ] + set ma [::Model::getMaterialRelation [$mat_rel getName] ] if {$ma eq ""} { lappend MaterialRelations $mat_rel } else { @@ -43,7 +43,7 @@ proc Model::ParseMaterialRelations { doc } { } } -proc Model::ParseMatRelNode { node } { +proc ::Model::ParseMatRelNode { node } { set name [$node getAttribute n] set mat [::Model::MaterialRelation new $name] @@ -60,13 +60,13 @@ proc Model::ParseMatRelNode { node } { return $mat } -proc Model::getMaterialRelations { MaterialRelationsFileName } { +proc ::Model::getMaterialRelations { MaterialRelationsFileName } { variable dir dom parse [tDOM::xmlReadFile [file join $dir xml $MaterialRelationsFileName]] doc ParseMaterialRelations $doc } -proc Model::GetMaterialRelations {args} { +proc ::Model::GetMaterialRelations {args} { variable MaterialRelations # W "Get materials $args" set cumplen [list ] @@ -77,7 +77,8 @@ proc Model::GetMaterialRelations {args} { # W "Good materials $cumplen" return $cumplen } -proc Model::GetMaterialRelationNames {args} { + +proc ::Model::GetMaterialRelationNames {args} { set material_relations [list ] foreach mat [GetMaterialRelations {*}$args] { lappend material_relations [$mat getName] @@ -85,7 +86,7 @@ proc Model::GetMaterialRelationNames {args} { return $material_relations } -proc Model::getMaterialRelation {mid} { +proc ::Model::getMaterialRelation {mid} { foreach mat_rel [GetMaterialRelations] { if {[$mat_rel getName] eq $mid} { return $mat_rel} @@ -94,12 +95,12 @@ proc Model::getMaterialRelation {mid} { } -proc Model::ForgetMaterialRelations { } { +proc ::Model::ForgetMaterialRelations { } { variable MaterialRelations set MaterialRelations [list ] } -proc Model::ForgetMaterialRelation { mid } { +proc ::Model::ForgetMaterialRelation { mid } { variable MaterialRelations set MaterialRelations2 [list ] foreach material_relation $MaterialRelations { diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl index 07a74813a..ceaa0565a 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -1,5 +1,4 @@ - proc DEM::xml::ShowMaterialRelationWindow { } { set material_relations [GetMaterialRelationsTable] From 7b8d9c6ab0dc2ab2e81243786d8d1d50f4605f81 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 11:21:21 +0200 Subject: [PATCH 341/556] DEM Namespaces --- kratos.gid/apps/DEM/start.tcl | 5 +- kratos.gid/apps/DEM/write/write.tcl | 44 +++++++++--------- .../apps/DEM/write/writeMDPA_Clusters.tcl | 2 +- kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl | 26 +++++------ kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 34 +++++++------- kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 42 ++++++++--------- kratos.gid/apps/DEM/write/writeMaterials.tcl | 10 ++-- .../apps/DEM/write/writeProjectParameters.tcl | 10 ++-- kratos.gid/apps/DEM/write/write_utils.tcl | 46 +++++++++---------- kratos.gid/apps/DEM/xml/XmlController.tcl | 22 ++++----- .../material_relations_window.tcl | 4 +- 11 files changed, 123 insertions(+), 122 deletions(-) diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 9a23265bc..7440f13b0 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -10,11 +10,12 @@ proc ::DEM::Init { app } { variable dir set _app $app + set dir [apps::getMyDir "DEM"] GiD_Set CalcWithoutMesh 1 - DEM::xml::Init - DEM::write::Init + ::DEM::xml::Init + ::DEM::write::Init } proc ::DEM::GetAttribute {name} {return [$::DEM::_app getProperty $name]} diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 5042068bf..875b46a67 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -1,4 +1,4 @@ -namespace eval DEM::write { +namespace eval ::DEM::write { variable writeAttributes variable partsProperties variable inletProperties @@ -9,18 +9,18 @@ namespace eval DEM::write { variable restore_ov } -proc DEM::write::Init { } { +proc ::DEM::write::Init { } { variable writeAttributes set writeAttributes [dict create] SetAttribute validApps [list "DEM"] - SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] - SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] + SetAttribute writeCoordinatesByGroups [::DEM::GetWriteProperty coordinates] + SetAttribute properties_location [::DEM::GetWriteProperty properties_location] SetAttribute parts_un [::DEM::GetUniqueName parts] - SetAttribute materials_un [::DEM::GetUniqueName parts] - SetAttribute conditions_un [::DEM::GetUniqueName parts] - SetAttribute nodal_conditions_un [::DEM::GetUniqueName parts] - SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] - SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute materials_un [::DEM::GetUniqueName materials] + SetAttribute conditions_un [::DEM::GetUniqueName conditions] + SetAttribute nodal_conditions_un [::DEM::GetUniqueName nodal_conditions] + SetAttribute materials_file [::DEM::GetWriteProperty materials_file] + SetAttribute main_script_file [::DEM::GetAttribute main_launch_file] variable partsProperties set partsProperties [dict create] @@ -45,7 +45,7 @@ proc DEM::write::Init { } { } # MDPA Blocks -proc DEM::write::writeModelPartEvent { } { +proc ::DEM::write::writeModelPartEvent { } { # Validation set err [Validate] @@ -87,7 +87,7 @@ proc DEM::write::writeModelPartEvent { } { } -proc DEM::write::writeCustomFilesEvent { } { +proc ::DEM::write::writeCustomFilesEvent { } { set orig_name [GetAttribute main_script_file] write::CopyFileIntoModel [file join "python" $orig_name ] @@ -97,7 +97,7 @@ proc DEM::write::writeCustomFilesEvent { } { DEM::write::writeMaterialsFile } -proc DEM::write::writeMaterialsFile {} { +proc ::DEM::write::writeMaterialsFile {} { # Materials set materials [DEM::write::getDEMMaterialsDict] write::OpenFile [GetAttribute materials_file] @@ -106,46 +106,46 @@ proc DEM::write::writeMaterialsFile {} { } # Attributes block -proc DEM::write::GetAttribute {att} { +proc ::DEM::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc DEM::write::GetAttributes {} { +proc ::DEM::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc DEM::write::SetAttribute {att val} { +proc ::DEM::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc DEM::write::AddAttribute {att val} { +proc ::DEM::write::AddAttribute {att val} { variable writeAttributes dict append writeAttributes $att $val] } -proc DEM::write::AddAttributes {configuration} { +proc ::DEM::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } # MultiApp events -proc DEM::write::AddValidApps {appList} { +proc ::DEM::write::AddValidApps {appList} { AddAttribute validApps $appList } -proc DEM::write::SetCoordinatesByGroups {value} { +proc ::DEM::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } -proc DEM::write::ApplyConfiguration { } { +proc ::DEM::write::ApplyConfiguration { } { variable writeAttributes write::SetConfigurationAttributes $writeAttributes } -proc DEM::write::Validate {} { +proc ::DEM::write::Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -163,7 +163,7 @@ proc DEM::write::Validate {} { return $err } -proc DEM::write::FindPropertiesBySubmodelpart {props subid } { +proc ::DEM::write::FindPropertiesBySubmodelpart {props subid } { set result "" foreach prop [dict get $props properties] { diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Clusters.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Clusters.tcl index 86e241d9f..2aacfb61b 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Clusters.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Clusters.tcl @@ -1,4 +1,4 @@ -proc DEM::write::WriteMDPAClusters { } { +proc ::DEM::write::WriteMDPAClusters { } { } diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl index da3175deb..a75e19d5a 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Inlet.tcl @@ -1,4 +1,4 @@ -proc DEM::write::WriteMDPAInlet { } { +proc ::DEM::write::WriteMDPAInlet { } { # Headers write::writeModelPartData @@ -19,7 +19,7 @@ proc DEM::write::WriteMDPAInlet { } { copyClusterFiles } -proc DEM::write::GetInletConditionName { } { +proc ::DEM::write::GetInletConditionName { } { set condition_name Inlet if {$::Model::SpatialDimension eq "2D"} { set condition_name Inlet2D @@ -27,14 +27,14 @@ proc DEM::write::GetInletConditionName { } { return $condition_name } -proc DEM::write::GetInletConditionXpath { } { +proc ::DEM::write::GetInletConditionXpath { } { set condition_name [GetInletConditionName] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" return $xp1 } # That can be all or active / All by default -proc DEM::write::GetInletGroups { {that all}} { +proc ::DEM::write::GetInletGroups { {that all}} { set groups [list ] foreach group [[customlib::GetBaseRoot] selectNodes [DEM::write::GetInletConditionXpath]/group] { @@ -49,7 +49,7 @@ proc DEM::write::GetInletGroups { {that all}} { } -proc DEM::write::copyClusterFiles { } { +proc ::DEM::write::copyClusterFiles { } { set dir [write::GetConfigurationAttribute dir] set src_dir $::Kratos::kratos_private(Path) @@ -75,7 +75,7 @@ proc DEM::write::copyClusterFiles { } { } } -proc DEM::write::GetUsedClusters { } { +proc ::DEM::write::GetUsedClusters { } { variable inletProperties set clusters_list [list ] set custom_clusters_list [list] @@ -99,7 +99,7 @@ proc DEM::write::GetUsedClusters { } { return [list $clusters_list $custom_clusters_list] } -proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { +proc ::DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { set inlet_element_type [DEM::write::GetInletElementType] if {[dict get $inletProperties Material Variables InletElementType] eq "Cluster3D"} { set contains_clusters 1 @@ -121,7 +121,7 @@ proc DEM::write::DefineInletConditions {inletProperties mid contains_clusters} { write::WriteString " CONTAINS_CLUSTERS $contains_clusters" } -proc DEM::write::GetInletElementType {} { +proc ::DEM::write::GetInletElementType {} { set elem_name SphericParticle3D if {$::Model::SpatialDimension eq "2D"} { set elem_name CylinderParticle2D @@ -129,11 +129,11 @@ proc DEM::write::GetInletElementType {} { return $elem_name } -proc DEM::write::GetInjectorElementType {} { +proc ::DEM::write::GetInjectorElementType {} { return [DEM::write::GetInletElementType] } -proc DEM::write::writeInletMeshes { } { +proc ::DEM::write::writeInletMeshes { } { variable inletProperties set condition_name [DEM::write::GetInletConditionName] @@ -329,7 +329,7 @@ proc DEM::write::writeInletMeshes { } { } } -proc DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_type} { +proc ::DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_type} { if {$inlet_element_type eq "LineCluster3D"} { set inlet_element_type "Cluster3D" set cluster_file_name "linecluster3D.clu" @@ -409,7 +409,7 @@ proc DEM::write::GetClusterFileNameAndReplaceInletElementType {inlet_element_typ return [list $inlet_element_type $cluster_file_name] } -proc DEM::write::writeMaterialsInlet { } { +proc ::DEM::write::writeMaterialsInlet { } { write::WriteString "Begin Properties 0" write::WriteString "End Properties" @@ -417,7 +417,7 @@ proc DEM::write::writeMaterialsInlet { } { } -proc DEM::write::processInletMaterials { } { +proc ::DEM::write::processInletMaterials { } { variable inletProperties set inlet_xpath [DEM::write::GetInletConditionXpath] write::processMaterials $inlet_xpath/group diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index d224a265e..18a848bc5 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -1,4 +1,4 @@ -proc DEM::write::WriteMDPAParts { } { +proc ::DEM::write::WriteMDPAParts { } { # Headers write::writeModelPartData @@ -32,7 +32,7 @@ proc DEM::write::WriteMDPAParts { } { } -proc DEM::write::GetDEMGroupNamesCustomSubmodelpart { } { +proc ::DEM::write::GetDEMGroupNamesCustomSubmodelpart { } { set groups [list ] foreach group [DEM::write::GetDEMGroupsCustomSubmodelpart] { set groupid [$group @n] @@ -40,7 +40,7 @@ proc DEM::write::GetDEMGroupNamesCustomSubmodelpart { } { } return $groups } -proc DEM::write::GetDEMGroupsCustomSubmodelpart { } { +proc ::DEM::write::GetDEMGroupsCustomSubmodelpart { } { set groups [list ] set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { @@ -52,7 +52,7 @@ proc DEM::write::GetDEMGroupsCustomSubmodelpart { } { return $groups } -proc DEM::write::GetDEMGroupsInitialC { } { +proc ::DEM::write::GetDEMGroupsInitialC { } { set groups [list ] if {$::Model::SpatialDimension eq "2D"} { set xp3 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityIC2D'\]/group" @@ -66,7 +66,7 @@ proc DEM::write::GetDEMGroupsInitialC { } { return $groups } -proc DEM::write::GetDEMGroupsBoundaryC { } { +proc ::DEM::write::GetDEMGroupsBoundaryC { } { set groups [list ] if {$::Model::SpatialDimension eq "2D"} { set xp4 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-VelocityBC2D'\]/group" @@ -80,7 +80,7 @@ proc DEM::write::GetDEMGroupsBoundaryC { } { return $groups } -proc DEM::write::GetNodesForGraphs { } { +proc ::DEM::write::GetNodesForGraphs { } { set groups [list ] if {$::Model::SpatialDimension eq "2D"} { set xp5 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-GraphCondition2D'\]/group" @@ -94,7 +94,7 @@ proc DEM::write::GetNodesForGraphs { } { return $groups } -proc DEM::write::writeSphereRadius { } { +proc ::DEM::write::writeSphereRadius { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" foreach group [$root selectNodes $xp1] { @@ -102,7 +102,7 @@ proc DEM::write::writeSphereRadius { } { } } -proc DEM::write::writeSphereRadiusOnGroup { group } { +proc ::DEM::write::writeSphereRadiusOnGroup { group } { set groupid [$group @n] set print_groupid [write::GetWriteGroupName $groupid] write::WriteString "Begin NodalData RADIUS // GUI group identifier: $print_groupid" @@ -111,7 +111,7 @@ proc DEM::write::writeSphereRadiusOnGroup { group } { write::WriteString "" } -proc DEM::write::writeDEMConditionMeshes { } { +proc ::DEM::write::writeDEMConditionMeshes { } { foreach {cond group_list} [GetSpheresGroupsListInConditions] { if {$cond in {"DEM-VelocityBC" "DEM-VelocityBC2D"}} { #set cnd [Model::getCondition $cond] @@ -309,7 +309,7 @@ proc DEM::write::writeDEMConditionMeshes { } { } } -proc DEM::write::DefineDEMExtraConditions {group_node group} { +proc ::DEM::write::DefineDEMExtraConditions {group_node group} { set GraphPrint [write::getValueByNode [$group_node selectNodes "./value\[@n='GraphPrint'\]"]] if {$GraphPrint == "true"} { set GraphPrintval 1 @@ -321,7 +321,7 @@ proc DEM::write::DefineDEMExtraConditions {group_node group} { } # TODO: This code is extremely inefficient -> find a simple way to solve it -proc DEM::write::GetSpheresGroupsListInConditions { } { +proc ::DEM::write::GetSpheresGroupsListInConditions { } { set conds_groups_dict [dict create ] set groups [list ] @@ -347,7 +347,7 @@ proc DEM::write::GetSpheresGroupsListInConditions { } { return $conds_groups_dict } -proc DEM::write::GetSpheresGroups { } { +proc ::DEM::write::GetSpheresGroups { } { set groups [list ] set conditions_list {DEM-VelocityBC DEM-VelocityIC DEM-GraphCondition} @@ -367,21 +367,21 @@ proc DEM::write::GetSpheresGroups { } { } -proc DEM::write::processPartMaterials { } { +proc ::DEM::write::processPartMaterials { } { variable partsProperties # Materials for parts are already processed #W [write::processMaterials] set partsProperties [write::getPropertiesList [GetAttribute parts_un] 0 SpheresPart] } -proc DEM::write::writeMaterialsParts { } { +proc ::DEM::write::writeMaterialsParts { } { write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc DEM::write::PrepareCustomMeshedParts { } { +proc ::DEM::write::PrepareCustomMeshedParts { } { variable restore_ov set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" @@ -398,7 +398,7 @@ proc DEM::write::PrepareCustomMeshedParts { } { } } -proc DEM::write::RestoreCustomMeshedParts { } { +proc ::DEM::write::RestoreCustomMeshedParts { } { variable restore_ov set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group" @@ -414,7 +414,7 @@ proc DEM::write::RestoreCustomMeshedParts { } { } -proc DEM::write::WriteCustomDEMSmp { } { +proc ::DEM::write::WriteCustomDEMSmp { } { set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { set group_id [$group @n] diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index c473d5045..789de0c42 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -1,4 +1,4 @@ -proc DEM::write::WriteMDPAWalls { } { +proc ::DEM::write::WriteMDPAWalls { } { # Headers write::writeModelPartData @@ -31,28 +31,28 @@ proc DEM::write::WriteMDPAWalls { } { } -proc DEM::write::processRigidWallMaterials { } { +proc ::DEM::write::processRigidWallMaterials { } { variable wallsProperties set walls_xpath [DEM::write::GetRigidWallXPath] write::processMaterials $walls_xpath/group set wallsProperties [write::getPropertiesListByConditionXPath $walls_xpath 0 RigidFacePart] } -proc DEM::write::processPhantomWallMaterials { } { +proc ::DEM::write::processPhantomWallMaterials { } { variable wallsProperties set phantom_walls_xpath [DEM::write::GetPhantomWallXPath] write::processMaterials $phantom_walls_xpath/group set phantomwallsProperties [write::processMaterials $phantom_walls_xpath] } -proc DEM::write::WriteRigidWallProperties { } { +proc ::DEM::write::WriteRigidWallProperties { } { write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc DEM::write::WritePhantomWallProperties { } { +proc ::DEM::write::WritePhantomWallProperties { } { set wall_properties [dict create ] set condition_name "Phantom-Wall" set cnd [Model::getCondition $condition_name] @@ -113,7 +113,7 @@ proc DEM::write::WritePhantomWallProperties { } { } -proc DEM::write::WriteWallCustomSmp { } { +proc ::DEM::write::WriteWallCustomSmp { } { set condition_name "DEM-CustomSmp" set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" @@ -136,17 +136,17 @@ proc DEM::write::WriteWallCustomSmp { } { } -proc DEM::write::writeConditions { } { +proc ::DEM::write::writeConditions { } { variable wallsProperties write::writeConditionsByGiDId DEMConditions [GetRigidWallConditionName] $wallsProperties } -proc DEM::write::writePhantomConditions { } { +proc ::DEM::write::writePhantomConditions { } { variable phantomwallsProperties write::writeConditionsByGiDId DEMConditions [GetPhantomWallConditionName] $phantomwallsProperties } -proc DEM::write::GetWallsGroups { } { +proc ::DEM::write::GetWallsGroups { } { set groups [list ] set groups_rigid [GetRigidWallsGroups] set groups_phantom [GetPhantomWallsGroups] @@ -154,14 +154,14 @@ proc DEM::write::GetWallsGroups { } { return $groups } -proc DEM::write::GetRigidWallConditionName {} { +proc ::DEM::write::GetRigidWallConditionName {} { set condition_name "DEM-FEM-Wall" if {$::Model::SpatialDimension eq "2D"} { set condition_name "DEM-FEM-Wall2D" } return $condition_name } -proc DEM::write::GetPhantomWallConditionName {} { +proc ::DEM::write::GetPhantomWallConditionName {} { set condition_name "Phantom-Wall" if {$::Model::SpatialDimension eq "2D"} { set condition_name "Phantom-Wall2D" @@ -169,16 +169,16 @@ proc DEM::write::GetPhantomWallConditionName {} { return $condition_name } -proc DEM::write::GetRigidWallXPath { } { +proc ::DEM::write::GetRigidWallXPath { } { set condition_name [GetRigidWallConditionName] return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" } -proc DEM::write::GetPhantomWallXPath { } { +proc ::DEM::write::GetPhantomWallXPath { } { set condition_name [GetPhantomWallConditionName] return "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = '$condition_name'\]" } -proc DEM::write::GetRigidWallsGroups { } { +proc ::DEM::write::GetRigidWallsGroups { } { set groups [list ] foreach group [[customlib::GetBaseRoot] selectNodes "[DEM::write::GetRigidWallXPath]/group"] { @@ -188,7 +188,7 @@ proc DEM::write::GetRigidWallsGroups { } { return $groups } -proc DEM::write::GetPhantomWallsGroups { } { +proc ::DEM::write::GetPhantomWallsGroups { } { set groups [list ] foreach group [[customlib::GetBaseRoot] selectNodes "[DEM::write::GetPhantomWallXPath]/group"] { @@ -198,7 +198,7 @@ proc DEM::write::GetPhantomWallsGroups { } { return $groups } -proc DEM::write::GetWallsGroupsSmp { } { +proc ::DEM::write::GetWallsGroupsSmp { } { set groups [list ] set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp2] { @@ -212,7 +212,7 @@ proc DEM::write::GetWallsGroupsSmp { } { } ## TODO: UNDER REVISION, UNUSED PROC -proc DEM::write::GetWallsGroupsListInConditions { } { +proc ::DEM::write::GetWallsGroupsListInConditions { } { set conds_groups_dict [dict create ] set groups [list ] @@ -249,7 +249,7 @@ proc DEM::write::GetWallsGroupsListInConditions { } { ## TODO: UNDER REVISION, UNUSED PROC -proc DEM::write::GetConditionsGroups { } { +proc ::DEM::write::GetConditionsGroups { } { set groups [list ] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" foreach group [[customlib::GetBaseRoot] selectNodes $xp1] { @@ -259,7 +259,7 @@ proc DEM::write::GetConditionsGroups { } { return $groups } -proc DEM::write::writeWallConditionMeshes { } { +proc ::DEM::write::writeWallConditionMeshes { } { variable wallsProperties variable phantomwallsProperties @@ -280,7 +280,7 @@ proc DEM::write::writeWallConditionMeshes { } { } } -proc DEM::write::writeWallConditionMesh { condition group props } { +proc ::DEM::write::writeWallConditionMesh { condition group props } { set mid [write::AddSubmodelpart $condition $group] @@ -530,7 +530,7 @@ proc DEM::write::writeWallConditionMesh { condition group props } { write::WriteString "" } -proc DEM::write::DefineFEMExtraConditions {props} { +proc ::DEM::write::DefineFEMExtraConditions {props} { set GraphPrint [dict get $props Material Variables GraphPrint] set GraphPrintval 0 if {[write::isBooleanTrue $GraphPrint]} { diff --git a/kratos.gid/apps/DEM/write/writeMaterials.tcl b/kratos.gid/apps/DEM/write/writeMaterials.tcl index 852175fd0..23f08f1e1 100644 --- a/kratos.gid/apps/DEM/write/writeMaterials.tcl +++ b/kratos.gid/apps/DEM/write/writeMaterials.tcl @@ -1,4 +1,4 @@ -proc DEM::write::getDEMMaterialsDict { } { +proc ::DEM::write::getDEMMaterialsDict { } { # TODO: Remove properties in mdpas ? Check with MA. Probably remove material properties but check the process properties # TODO: Check 2d dem fem wall is written twice, also as phantom # TODO: Materials have more properties than expected. Write from properties variables, not from xml @@ -78,7 +78,7 @@ proc DEM::write::getDEMMaterialsDict { } { return $global_dict } -proc DEM::write::GetModelPartParentNameFromGroup {group} { +proc ::DEM::write::GetModelPartParentNameFromGroup {group} { set model_part_parent SpheresPart if {$group in [DEM::write::GetWallsGroups]} {set model_part_parent "RigidFacePart"} if {$group in [DEM::write::GetInletGroups]} {set model_part_parent "DEMInletPart"} @@ -86,7 +86,7 @@ proc DEM::write::GetModelPartParentNameFromGroup {group} { } -proc DEM::write::GetDEMUsedMaterialsNodeList { } { +proc ::DEM::write::GetDEMUsedMaterialsNodeList { } { # Dem needs more material information than default set materials [list ] @@ -97,7 +97,7 @@ proc DEM::write::GetDEMUsedMaterialsNodeList { } { return $materials } -proc DEM::write::GetMaterialRelationsNodeList { } { +proc ::DEM::write::GetMaterialRelationsNodeList { } { # Dem needs more material information than default set material_relations [list ] @@ -110,7 +110,7 @@ proc DEM::write::GetMaterialRelationsNodeList { } { return $material_relations } -proc DEM::write::ValidateMaterialRelations {materials relations assignations} { +proc ::DEM::write::ValidateMaterialRelations {materials relations assignations} { set material_relations [DEM::xml::GetMaterialRelationsTable] foreach relation_ref [dict keys $material_relations] { diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 4028fe9c5..ccc378500 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -1,7 +1,7 @@ # Project Parameters -proc DEM::write::getParametersDict { } { +proc ::DEM::write::getParametersDict { } { set project_parameters_dict [dict create] set dimension [expr 3] @@ -112,7 +112,7 @@ proc DEM::write::getParametersDict { } { return $project_parameters_dict } -proc DEM::write::GetDemStrategyName { } { +proc ::DEM::write::GetDemStrategyName { } { return sphere_strategy # set ElementType [::wkcf::GetElementType] # TODO: check old ::wkcf::GetElementType functionalities if required # set used_elements [spdAux::GetUsedElements] @@ -133,14 +133,14 @@ proc DEM::write::GetDemStrategyName { } { # } } -proc DEM::write::GetTimeSettings { } { +proc ::DEM::write::GetTimeSettings { } { set result [dict create] dict set result DeltaTime [write::getValue DEMTimeParameters DeltaTime] dict set result EndTime [write::getValue DEMTimeParameters EndTime] return $result } -proc DEM::write::GetGravity { } { +proc ::DEM::write::GetGravity { } { set gravity_value [write::getValue DEMGravity GravityValue] set gravity_X [write::getValue DEMGravity Cx] set gravity_Y [write::getValue DEMGravity Cy] @@ -153,7 +153,7 @@ proc DEM::write::GetGravity { } { return [list $gx $gy $gz] } -proc DEM::write::writeParametersEvent { } { +proc ::DEM::write::writeParametersEvent { } { write::SetParallelismConfiguration write::WriteJSON [getParametersDict] } diff --git a/kratos.gid/apps/DEM/write/write_utils.tcl b/kratos.gid/apps/DEM/write/write_utils.tcl index b9a03662a..c8d9ba38c 100644 --- a/kratos.gid/apps/DEM/write/write_utils.tcl +++ b/kratos.gid/apps/DEM/write/write_utils.tcl @@ -1,5 +1,5 @@ # utility for advanced meshing features in DEM -proc DEM::write::Elements_Substitution {} { +proc ::DEM::write::Elements_Substitution {} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute DEMParts]/group" @@ -236,7 +236,7 @@ proc DEM::write::Elements_Substitution {} { return $fail } -proc DEM::write::Compute_External_Elements {ndime cgroupid element_ids} { +proc ::DEM::write::Compute_External_Elements {ndime cgroupid element_ids} { set mesh_elements [GiD_EntitiesGroups get $cgroupid all_mesh] set real_mesh_elements [lindex $mesh_elements 1] @@ -279,7 +279,7 @@ proc DEM::write::Compute_External_Elements {ndime cgroupid element_ids} { return [array get is_external_element] } -proc DEM::write::Delete_Unnecessary_Elements_From_Mesh {cgroupid} { +proc ::DEM::write::Delete_Unnecessary_Elements_From_Mesh {cgroupid} { set elem_types [list line triangle quadrilateral tetrahedra hexahedra] foreach elem_type $elem_types { if {[GiD_EntitiesGroups get $cgroupid elements -count -element_type $elem_type] > 0} { @@ -288,7 +288,7 @@ proc DEM::write::Delete_Unnecessary_Elements_From_Mesh {cgroupid} { } } -proc DEM::write::Cleaning_Up_Skin_And_Removing_Isolated_Nodes {final_list_of_isolated_nodes} { +proc ::DEM::write::Cleaning_Up_Skin_And_Removing_Isolated_Nodes {final_list_of_isolated_nodes} { # GiD_EntitiesGroups unassign SKIN_SPHERE_DO_NOT_DELETE nodes # # GiD_Mesh delete element [GiD_EntitiesGroups get SKIN_SPHERE_DO_NOT_DELETE elements -element_type triangle] @@ -304,7 +304,7 @@ proc DEM::write::Cleaning_Up_Skin_And_Removing_Isolated_Nodes {final_list_of_iso } } -proc DEM::write::NormalDistribution {mean standard_deviation min_rad max_rad} { +proc ::DEM::write::NormalDistribution {mean standard_deviation min_rad max_rad} { if {$standard_deviation} { set max_iterations 1000 ; #set a maximun number of iterations to avoid an infinite loop for {set i 0} {$i < $max_iterations} {incr i} { @@ -321,7 +321,7 @@ proc DEM::write::NormalDistribution {mean standard_deviation min_rad max_rad} { return $mean } -proc DEM::write::LognormalDistribution {mean standard_deviation min_rad max_rad} { +proc ::DEM::write::LognormalDistribution {mean standard_deviation min_rad max_rad} { if {$standard_deviation} { set log_min [expr log($min_rad)] set log_max [expr log($max_rad)] @@ -332,7 +332,7 @@ proc DEM::write::LognormalDistribution {mean standard_deviation min_rad max_rad} return $mean } -proc DEM::write::Destroy_Skin_Sphere_Group {what_dempack_package} { +proc ::DEM::write::Destroy_Skin_Sphere_Group {what_dempack_package} { if {$what_dempack_package eq "G-DEMPack"} { if [GiD_Groups exists SKIN_SPHERE_DO_NOT_DELETE] { GiD_Groups delete SKIN_SPHERE_DO_NOT_DELETE @@ -343,7 +343,7 @@ proc DEM::write::Destroy_Skin_Sphere_Group {what_dempack_package} { } } -proc DEM::write::GetNodeHigherentities {node_id} { +proc ::DEM::write::GetNodeHigherentities {node_id} { set node_data [GiD_Info list_entities nodes $node_id] if {![regexp {HigherEntity: ([0-9]+)} $node_data dummy higherentity]} { set higherentity 9999; #the node does not exist, return > 0 to not delete it @@ -351,7 +351,7 @@ proc DEM::write::GetNodeHigherentities {node_id} { return $higherentity } -proc DEM::write::GetElementCenter {element_id} { +proc ::DEM::write::GetElementCenter {element_id} { set element_data [GiD_Mesh get element $element_id] set num_nodes [lindex $element_data 2] set node_ids [lrange $element_data 3 2+$num_nodes] @@ -363,7 +363,7 @@ proc DEM::write::GetElementCenter {element_id} { return [MathUtils::ScalarByVectorProd [expr {1.0/$num_nodes}] $sum] } -proc DEM::write::BeforeMeshGenerationUtils {elementsize} { +proc ::DEM::write::BeforeMeshGenerationUtils {elementsize} { # Align the normal DEM::write::AlignSurfNormals Outwards @@ -412,7 +412,7 @@ proc DEM::write::BeforeMeshGenerationUtils {elementsize} { } -proc DEM::write::AlignSurfNormals {direction} { +proc ::DEM::write::AlignSurfNormals {direction} { # ABSTRACT: Makes all of boundary surfaces' normals point inwards or outwards # Arguments # direction => Direction option ["Inwards"|"Outwards"] @@ -456,7 +456,7 @@ proc DEM::write::AlignSurfNormals {direction} { } } -proc DEM::write::CleanAutomaticConditionGroupGiD {args {fieldvalue ""}} { +proc ::DEM::write::CleanAutomaticConditionGroupGiD {args {fieldvalue ""}} { if {![GiD_Groups exists $fieldvalue]} { GiD_Groups create $fieldvalue } @@ -469,7 +469,7 @@ proc DEM::write::CleanAutomaticConditionGroupGiD {args {fieldvalue ""}} { GidUtils::UpdateWindow GROUPS } -proc DEM::write::FindBoundariesOfNonSphericElements {entity} { +proc ::DEM::write::FindBoundariesOfNonSphericElements {entity} { # ABSTRACT: Return a list containing all boundaries entities # Arguments # entity => Entity to be processed @@ -514,7 +514,7 @@ proc DEM::write::FindBoundariesOfNonSphericElements {entity} { return $boundarylist } -proc DEM::write::FindAllSurfacesOfNonSphericElements {entity} { +proc ::DEM::write::FindAllSurfacesOfNonSphericElements {entity} { # ABSTRACT: Return a list containing all boundaries entities # Arguments # entity => surface @@ -545,7 +545,7 @@ proc DEM::write::FindAllSurfacesOfNonSphericElements {entity} { return $boundarylist } -proc DEM::write::AssignGeometricalEntitiesToSkinSphere2D {} { +proc ::DEM::write::AssignGeometricalEntitiesToSkinSphere2D {} { set list_of_points [GiD_Geometry list point 1:end] set list_of_lines [GiD_Geometry list line 1:end] @@ -564,7 +564,7 @@ proc DEM::write::AssignGeometricalEntitiesToSkinSphere2D {} { } -proc DEM::write::AssignGeometricalEntitiesToSkinSphere3D {} { +proc ::DEM::write::AssignGeometricalEntitiesToSkinSphere3D {} { set list_of_points [GiD_Geometry list point 1:end] set list_of_lines [GiD_Geometry list line 1:end] @@ -601,7 +601,7 @@ proc DEM::write::AssignGeometricalEntitiesToSkinSphere3D {} { GiD_EntitiesGroups assign SKIN_SPHERE_DO_NOT_DELETE all_geometry $total_skin_sphere_list } -proc DEM::write::GetSurfaceTypeList {surfacelist} { +proc ::DEM::write::GetSurfaceTypeList {surfacelist} { set tetrasurf [list] set hexasurf [list] @@ -630,7 +630,7 @@ proc DEM::write::GetSurfaceTypeList {surfacelist} { return [list $tetrasurf $hexasurf] } -proc DEM::write::AssignConditionToGroupGID {entity elist groupid} { +proc ::DEM::write::AssignConditionToGroupGID {entity elist groupid} { # Need New GiD_group adaptation if {![GiD_Groups exists $groupid]} { GiD_Groups create $groupid @@ -640,7 +640,7 @@ proc DEM::write::AssignConditionToGroupGID {entity elist groupid} { GidUtils::UpdateWindow GROUPS } -proc DEM::write::AssignSpecialBoundaries {entitylist} { +proc ::DEM::write::AssignSpecialBoundaries {entitylist} { #set DEMApplication "No" #catch {set DEMApplication [::xmlutils::setXml {GeneralApplicationData//c.ApplicationTypes//i.DEM} dv]} #if {$DEMApplication eq "Yes"} { @@ -675,7 +675,7 @@ proc DEM::write::AssignSpecialBoundaries {entitylist} { #} } -proc DEM::write::ForceTheMeshingOfDEMFEMWallGroups {} { +proc ::DEM::write::ForceTheMeshingOfDEMFEMWallGroups {} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute "DEMConditions"]/condition\[@n ='DEM-FEM-Wall'\]/group" foreach group [$root selectNodes $xp1] { @@ -689,7 +689,7 @@ proc DEM::write::ForceTheMeshingOfDEMFEMWallGroups {} { } } -proc DEM::write::ForceTheMeshingOfDEMInletGroups {} { +proc ::DEM::write::ForceTheMeshingOfDEMInletGroups {} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute "DEMConditions"]/condition\[@n ='Inlet'\]/group" foreach group [$root selectNodes $xp1] { @@ -703,7 +703,7 @@ proc DEM::write::ForceTheMeshingOfDEMInletGroups {} { } } -proc DEM::write::FindBoundariesOfCircularElements {entity} { +proc ::DEM::write::FindBoundariesOfCircularElements {entity} { set root [customlib::GetBaseRoot] @@ -752,7 +752,7 @@ proc DEM::write::FindBoundariesOfCircularElements {entity} { -proc DEM::write::FindBoundariesOfSphericElements {entity} { +proc ::DEM::write::FindBoundariesOfSphericElements {entity} { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute DEMParts]/group" diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 7a480e05e..c66eaa1f2 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -1,10 +1,10 @@ -namespace eval DEM::xml { +namespace eval ::DEM::xml { variable dir } -proc DEM::xml::Init { } { +proc ::DEM::xml::Init { } { variable dir - Model::InitVariables dir $DEM::dir + Model::InitVariables dir $::DEM::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -16,11 +16,11 @@ proc DEM::xml::Init { } { Model::getMaterialRelations "material_relations/MaterialRelations.xml" } -proc DEM::xml::getUniqueName {name} { +proc ::DEM::xml::getUniqueName {name} { return [::DEM::GetAttribute prefix]$name } -proc DEM::xml::CustomTree { args } { +proc ::DEM::xml::CustomTree { args } { set root [customlib::GetBaseRoot] spdAux::SetValueOnTreeItem values OpenMP ParallelType spdAux::SetValueOnTreeItem state hidden DEMTimeParameters StartTime @@ -49,7 +49,7 @@ proc DEM::xml::CustomTree { args } { spdAux::processDynamicNodes [customlib::GetBaseRoot] } -proc DEM::xml::ProcGetElements { domNode args } { +proc ::DEM::xml::ProcGetElements { domNode args } { set elems [Model::GetElements] set names [list ] set pnames [list ] @@ -70,7 +70,7 @@ proc DEM::xml::ProcGetElements { domNode args } { return $diction } -proc DEM::xml::ProcGetStateBoundingBoxParams { domNode args } { +proc ::DEM::xml::ProcGetStateBoundingBoxParams { domNode args } { set bounding_box_active [write::getValue Boundingbox UseBB ] set bounding_box_automatic [write::getValue Boundingbox AutomaticBB ] @@ -82,7 +82,7 @@ proc DEM::xml::ProcGetStateBoundingBoxParams { domNode args } { return $ret } -proc DEM::xml::ProcGetDEMPartsOvWhat { domNode args } { +proc ::DEM::xml::ProcGetDEMPartsOvWhat { domNode args } { if {$::Model::SpatialDimension eq "2D"} { return "point,line,surface" } else { @@ -91,7 +91,7 @@ proc DEM::xml::ProcGetDEMPartsOvWhat { domNode args } { } -proc DEM::xml::InertiaType { args } { +proc ::DEM::xml::InertiaType { args } { set ret inline_vector if {$::Model::SpatialDimension eq "2D"} { set ret double @@ -100,7 +100,7 @@ proc DEM::xml::InertiaType { args } { return $ret } -proc DEM::xml::injectMaterialRelations { basenode args } { +proc ::DEM::xml::injectMaterialRelations { basenode args } { set base [$basenode parent] set materials_relations [Model::GetMaterialRelations {*}$args] @@ -122,7 +122,7 @@ proc DEM::xml::injectMaterialRelations { basenode args } { } -proc DEM::xml::MaterialRelationsValidation { } { +proc ::DEM::xml::MaterialRelationsValidation { } { set err "" # Get Used Materials diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl index ceaa0565a..88d757690 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -1,5 +1,5 @@ -proc DEM::xml::ShowMaterialRelationWindow { } { +proc ::DEM::xml::ShowMaterialRelationWindow { } { set material_relations [GetMaterialRelationsTable] set materials [dict keys $material_relations] @@ -34,7 +34,7 @@ proc DEM::xml::ShowMaterialRelationWindow { } { } } -proc DEM::xml::GetMaterialRelationsTable {} { +proc ::DEM::xml::GetMaterialRelationsTable {} { set material_relations [dict create] set materials [list ] From 1ea446a260cf679910466fcad544b05539bf1a3d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 11:27:35 +0200 Subject: [PATCH 342/556] remove old apps --- .../apps/Solid/examples/CircularTank.tcl | 297 ------ .../CircularTank2Da.gid/CircularTank2Da.geo | Bin 4523 -> 0 bytes .../CircularTank2Da.gid/CircularTank2Da.prj | 25 - .../CircularTank2Da.gid/CircularTank2Da.vv | 37 - .../CircularTank3D.gid/CircularTank3D.geo | Bin 11208 -> 0 bytes .../CircularTank3D.gid/CircularTank3D.prj | 26 - .../CircularTank3D.gid/CircularTank3D.vv | 37 - .../apps/Solid/examples/DynamicBeam.tcl | 141 --- .../DynamicBeam3D.gid/DynamicBeam3D.geo | Bin 572 -> 0 bytes .../DynamicBeam3D.gid/DynamicBeam3D.prj | 24 - .../DynamicBeam3D.gid/DynamicBeam3D.vv | 37 - kratos.gid/apps/Solid/examples/DynamicRod.tcl | 206 ---- .../DynamicRod2D.gid/DynamicRod2D.geo | Bin 10244 -> 0 bytes .../DynamicRod2D.gid/DynamicRod2D.prj | 24 - .../examples/DynamicRod2D.gid/DynamicRod2D.vv | 37 - .../DynamicRod3D.gid/DynamicRod3D.geo | Bin 35516 -> 0 bytes .../DynamicRod3D.gid/DynamicRod3D.prj | 29 - .../examples/DynamicRod3D.gid/DynamicRod3D.vv | 37 - .../apps/Solid/examples/EccentricColumn.tcl | 181 ---- .../EccentricColumn3D.geo | Bin 24732 -> 0 bytes .../EccentricColumn3D.prj | 31 - .../EccentricColumn3D.vv | 37 - .../apps/Solid/examples/NotchedBeam.tcl | 164 --- .../NotchedBeam2D.gid/NotchedBeam2D.geo | Bin 3788 -> 0 bytes .../NotchedBeam2D.gid/NotchedBeam2D.prj | 25 - .../NotchedBeam2D.gid/NotchedBeam2D.vv | 37 - .../StaticBeamLattice.geo | Bin 6202 -> 0 bytes .../StaticBeamLattice.prj | 28 - .../StaticBeamLattice.vv | 37 - .../apps/Solid/examples/StaticBeamLattice.tcl | 204 ---- kratos.gid/apps/Solid/examples/examples.tcl | 41 - kratos.gid/apps/Solid/images/2D.png | Bin 4975 -> 0 bytes kratos.gid/apps/Solid/images/2Da.png | Bin 6018 -> 0 bytes kratos.gid/apps/Solid/images/3D.png | Bin 4907 -> 0 bytes .../apps/Solid/images/Black/analysis_type.png | Bin 523 -> 0 bytes .../apps/Solid/images/Black/beam_example.png | Bin 857 -> 0 bytes kratos.gid/apps/Solid/images/Black/bodies.png | Bin 318 -> 0 bytes .../Solid/images/Black/boundaryConditions.png | Bin 327 -> 0 bytes .../apps/Solid/images/Black/cancelProcess.png | Bin 1526 -> 0 bytes .../Solid/images/Black/column_example.png | Bin 746 -> 0 bytes .../Solid/images/Black/contactStrategy.png | Bin 262 -> 0 bytes kratos.gid/apps/Solid/images/Black/data.png | Bin 251 -> 0 bytes .../apps/Solid/images/Black/doRestart.png | Bin 281 -> 0 bytes kratos.gid/apps/Solid/images/Black/folder.png | Bin 277 -> 0 bytes .../apps/Solid/images/Black/groupCreated.png | Bin 456 -> 0 bytes .../apps/Solid/images/Black/linear_solver.png | Bin 355 -> 0 bytes .../Solid/images/Black/meshingStrategies.png | Bin 303 -> 0 bytes .../Solid/images/Black/modelProperties.png | Bin 1765 -> 0 bytes .../Solid/images/Black/notched_example.png | Bin 760 -> 0 bytes .../apps/Solid/images/Black/parallel_type.png | Bin 291 -> 0 bytes .../apps/Solid/images/Black/rod_example.png | Bin 1161 -> 0 bytes .../apps/Solid/images/Black/runSimulation.png | Bin 1552 -> 0 bytes .../apps/Solid/images/Black/seeResults.png | Bin 306 -> 0 bytes kratos.gid/apps/Solid/images/Black/select.png | Bin 327 -> 0 bytes .../apps/Solid/images/Black/setLoad.png | Bin 277 -> 0 bytes .../apps/Solid/images/Black/setUnits.png | Bin 294 -> 0 bytes kratos.gid/apps/Solid/images/Black/sheets.png | Bin 293 -> 0 bytes kratos.gid/apps/Solid/images/Black/solid.png | Bin 567 -> 0 bytes .../apps/Solid/images/Black/solvers.png | Bin 384 -> 0 bytes .../apps/Solid/images/Black/tank_example.png | Bin 1092 -> 0 bytes .../apps/Solid/images/Black/timeIntervals.png | Bin 372 -> 0 bytes .../Solid/images/Black/timeParameters.png | Bin 364 -> 0 bytes kratos.gid/apps/Solid/images/Black/tree.png | Bin 510 -> 0 bytes kratos.gid/apps/Solid/images/Black/view.png | Bin 1661 -> 0 bytes .../apps/Solid/images/CircularTank2Da.png | Bin 3232 -> 0 bytes .../apps/Solid/images/CircularTank3D.png | Bin 4886 -> 0 bytes kratos.gid/apps/Solid/images/DynamicBeam.png | Bin 1439 -> 0 bytes kratos.gid/apps/Solid/images/DynamicRod2D.png | Bin 6963 -> 0 bytes kratos.gid/apps/Solid/images/DynamicRod3D.png | Bin 6273 -> 0 bytes .../apps/Solid/images/EccentricColumn.png | Bin 2880 -> 0 bytes kratos.gid/apps/Solid/images/NotchedBeam.png | Bin 7737 -> 0 bytes .../apps/Solid/images/analysis_type.png | Bin 811 -> 0 bytes kratos.gid/apps/Solid/images/beam_example.png | Bin 863 -> 0 bytes kratos.gid/apps/Solid/images/bodies.png | Bin 287 -> 0 bytes .../apps/Solid/images/boundaryConditions.png | Bin 274 -> 0 bytes .../apps/Solid/images/cancelProcess.png | Bin 1863 -> 0 bytes .../apps/Solid/images/column_example.png | Bin 850 -> 0 bytes .../apps/Solid/images/conditions/arrow.msh | 53 - .../Solid/images/conditions/displacement.png | Bin 279 -> 0 bytes .../Solid/images/conditions/selfweight.msh | 38 - .../apps/Solid/images/conditions/spring.msh | 430 -------- .../apps/Solid/images/contactStrategy.png | Bin 291 -> 0 bytes kratos.gid/apps/Solid/images/data.png | Bin 203 -> 0 bytes kratos.gid/apps/Solid/images/doRestart.png | Bin 258 -> 0 bytes kratos.gid/apps/Solid/images/folder.png | Bin 262 -> 0 bytes kratos.gid/apps/Solid/images/groupCreated.png | Bin 422 -> 0 bytes .../apps/Solid/images/lattice_example.png | Bin 1387 -> 0 bytes .../apps/Solid/images/linear_solver.png | Bin 294 -> 0 bytes kratos.gid/apps/Solid/images/logo.png | Bin 15360 -> 0 bytes kratos.gid/apps/Solid/images/logo_beam.png | Bin 14958 -> 0 bytes .../apps/Solid/images/meshingStrategies.png | Bin 246 -> 0 bytes .../apps/Solid/images/modelProperties.png | Bin 1938 -> 0 bytes .../apps/Solid/images/notched_example.png | Bin 792 -> 0 bytes .../apps/Solid/images/parallel_type.png | Bin 335 -> 0 bytes kratos.gid/apps/Solid/images/rod_example.png | Bin 1078 -> 0 bytes .../apps/Solid/images/runSimulation.png | Bin 1887 -> 0 bytes kratos.gid/apps/Solid/images/seeResults.png | Bin 265 -> 0 bytes kratos.gid/apps/Solid/images/select.png | Bin 289 -> 0 bytes kratos.gid/apps/Solid/images/setLoad.png | Bin 283 -> 0 bytes kratos.gid/apps/Solid/images/setUnits.png | Bin 237 -> 0 bytes kratos.gid/apps/Solid/images/sheets.png | Bin 280 -> 0 bytes kratos.gid/apps/Solid/images/solid.png | Bin 801 -> 0 bytes kratos.gid/apps/Solid/images/solvers.png | Bin 294 -> 0 bytes kratos.gid/apps/Solid/images/tank_example.png | Bin 918 -> 0 bytes .../apps/Solid/images/timeIntervals.png | Bin 287 -> 0 bytes .../apps/Solid/images/timeParameters.png | Bin 273 -> 0 bytes kratos.gid/apps/Solid/images/tree.png | Bin 814 -> 0 bytes kratos.gid/apps/Solid/images/view.png | Bin 1950 -> 0 bytes kratos.gid/apps/Solid/python/RunSolid.py | 8 - kratos.gid/apps/Solid/start.tcl | 84 -- kratos.gid/apps/Solid/symbols/symbols.tcl | 393 ------- kratos.gid/apps/Solid/write/validation.tcl | 137 --- kratos.gid/apps/Solid/write/write.tcl | 376 ------- .../Solid/write/writeProjectParameters.tcl | 177 ---- .../apps/Solid/xml/BoundaryConditions.spd | 4 - kratos.gid/apps/Solid/xml/Conditions.xml | 378 ------- .../apps/Solid/xml/ConstitutiveLaws.xml | 694 ------------- .../apps/Solid/xml/DeprecatedProcesses.xml | 59 -- kratos.gid/apps/Solid/xml/Elements.xml | 958 ------------------ kratos.gid/apps/Solid/xml/Fields.spd | 8 - kratos.gid/apps/Solid/xml/Functions.spd | 18 - kratos.gid/apps/Solid/xml/Loads.spd | 4 - kratos.gid/apps/Solid/xml/Main.spd | 13 - kratos.gid/apps/Solid/xml/Materials.spd | 4 - kratos.gid/apps/Solid/xml/Materials.xml | 38 - kratos.gid/apps/Solid/xml/NodalConditions.xml | 87 -- kratos.gid/apps/Solid/xml/Parts.spd | 20 - kratos.gid/apps/Solid/xml/Processes.xml | 78 -- kratos.gid/apps/Solid/xml/Procs.spd | 23 - kratos.gid/apps/Solid/xml/Results.spd | 33 - .../apps/Solid/xml/SolutionStrategy.spd | 8 - kratos.gid/apps/Solid/xml/StageInfo.spd | 15 - kratos.gid/apps/Solid/xml/Strategies.xml | 261 ----- kratos.gid/apps/Solid/xml/XmlController.tcl | 152 --- 134 files changed, 6293 deletions(-) delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank.tcl delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.geo delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.prj delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.vv delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.geo delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.prj delete mode 100644 kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.vv delete mode 100644 kratos.gid/apps/Solid/examples/DynamicBeam.tcl delete mode 100644 kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.geo delete mode 100644 kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.prj delete mode 100644 kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod.tcl delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.geo delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.prj delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.vv delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.geo delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.prj delete mode 100644 kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.vv delete mode 100644 kratos.gid/apps/Solid/examples/EccentricColumn.tcl delete mode 100644 kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.geo delete mode 100644 kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.prj delete mode 100644 kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv delete mode 100644 kratos.gid/apps/Solid/examples/NotchedBeam.tcl delete mode 100644 kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.geo delete mode 100644 kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.prj delete mode 100644 kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.vv delete mode 100644 kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.geo delete mode 100644 kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.prj delete mode 100644 kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.vv delete mode 100644 kratos.gid/apps/Solid/examples/StaticBeamLattice.tcl delete mode 100644 kratos.gid/apps/Solid/examples/examples.tcl delete mode 100644 kratos.gid/apps/Solid/images/2D.png delete mode 100644 kratos.gid/apps/Solid/images/2Da.png delete mode 100644 kratos.gid/apps/Solid/images/3D.png delete mode 100644 kratos.gid/apps/Solid/images/Black/analysis_type.png delete mode 100644 kratos.gid/apps/Solid/images/Black/beam_example.png delete mode 100644 kratos.gid/apps/Solid/images/Black/bodies.png delete mode 100644 kratos.gid/apps/Solid/images/Black/boundaryConditions.png delete mode 100644 kratos.gid/apps/Solid/images/Black/cancelProcess.png delete mode 100644 kratos.gid/apps/Solid/images/Black/column_example.png delete mode 100644 kratos.gid/apps/Solid/images/Black/contactStrategy.png delete mode 100644 kratos.gid/apps/Solid/images/Black/data.png delete mode 100644 kratos.gid/apps/Solid/images/Black/doRestart.png delete mode 100644 kratos.gid/apps/Solid/images/Black/folder.png delete mode 100644 kratos.gid/apps/Solid/images/Black/groupCreated.png delete mode 100644 kratos.gid/apps/Solid/images/Black/linear_solver.png delete mode 100644 kratos.gid/apps/Solid/images/Black/meshingStrategies.png delete mode 100644 kratos.gid/apps/Solid/images/Black/modelProperties.png delete mode 100644 kratos.gid/apps/Solid/images/Black/notched_example.png delete mode 100644 kratos.gid/apps/Solid/images/Black/parallel_type.png delete mode 100644 kratos.gid/apps/Solid/images/Black/rod_example.png delete mode 100644 kratos.gid/apps/Solid/images/Black/runSimulation.png delete mode 100644 kratos.gid/apps/Solid/images/Black/seeResults.png delete mode 100644 kratos.gid/apps/Solid/images/Black/select.png delete mode 100644 kratos.gid/apps/Solid/images/Black/setLoad.png delete mode 100644 kratos.gid/apps/Solid/images/Black/setUnits.png delete mode 100644 kratos.gid/apps/Solid/images/Black/sheets.png delete mode 100644 kratos.gid/apps/Solid/images/Black/solid.png delete mode 100644 kratos.gid/apps/Solid/images/Black/solvers.png delete mode 100644 kratos.gid/apps/Solid/images/Black/tank_example.png delete mode 100644 kratos.gid/apps/Solid/images/Black/timeIntervals.png delete mode 100644 kratos.gid/apps/Solid/images/Black/timeParameters.png delete mode 100644 kratos.gid/apps/Solid/images/Black/tree.png delete mode 100644 kratos.gid/apps/Solid/images/Black/view.png delete mode 100644 kratos.gid/apps/Solid/images/CircularTank2Da.png delete mode 100644 kratos.gid/apps/Solid/images/CircularTank3D.png delete mode 100644 kratos.gid/apps/Solid/images/DynamicBeam.png delete mode 100644 kratos.gid/apps/Solid/images/DynamicRod2D.png delete mode 100644 kratos.gid/apps/Solid/images/DynamicRod3D.png delete mode 100644 kratos.gid/apps/Solid/images/EccentricColumn.png delete mode 100644 kratos.gid/apps/Solid/images/NotchedBeam.png delete mode 100644 kratos.gid/apps/Solid/images/analysis_type.png delete mode 100644 kratos.gid/apps/Solid/images/beam_example.png delete mode 100644 kratos.gid/apps/Solid/images/bodies.png delete mode 100644 kratos.gid/apps/Solid/images/boundaryConditions.png delete mode 100644 kratos.gid/apps/Solid/images/cancelProcess.png delete mode 100644 kratos.gid/apps/Solid/images/column_example.png delete mode 100644 kratos.gid/apps/Solid/images/conditions/arrow.msh delete mode 100644 kratos.gid/apps/Solid/images/conditions/displacement.png delete mode 100644 kratos.gid/apps/Solid/images/conditions/selfweight.msh delete mode 100644 kratos.gid/apps/Solid/images/conditions/spring.msh delete mode 100644 kratos.gid/apps/Solid/images/contactStrategy.png delete mode 100644 kratos.gid/apps/Solid/images/data.png delete mode 100644 kratos.gid/apps/Solid/images/doRestart.png delete mode 100644 kratos.gid/apps/Solid/images/folder.png delete mode 100644 kratos.gid/apps/Solid/images/groupCreated.png delete mode 100644 kratos.gid/apps/Solid/images/lattice_example.png delete mode 100644 kratos.gid/apps/Solid/images/linear_solver.png delete mode 100644 kratos.gid/apps/Solid/images/logo.png delete mode 100644 kratos.gid/apps/Solid/images/logo_beam.png delete mode 100644 kratos.gid/apps/Solid/images/meshingStrategies.png delete mode 100644 kratos.gid/apps/Solid/images/modelProperties.png delete mode 100644 kratos.gid/apps/Solid/images/notched_example.png delete mode 100644 kratos.gid/apps/Solid/images/parallel_type.png delete mode 100644 kratos.gid/apps/Solid/images/rod_example.png delete mode 100644 kratos.gid/apps/Solid/images/runSimulation.png delete mode 100644 kratos.gid/apps/Solid/images/seeResults.png delete mode 100644 kratos.gid/apps/Solid/images/select.png delete mode 100644 kratos.gid/apps/Solid/images/setLoad.png delete mode 100644 kratos.gid/apps/Solid/images/setUnits.png delete mode 100644 kratos.gid/apps/Solid/images/sheets.png delete mode 100644 kratos.gid/apps/Solid/images/solid.png delete mode 100644 kratos.gid/apps/Solid/images/solvers.png delete mode 100644 kratos.gid/apps/Solid/images/tank_example.png delete mode 100644 kratos.gid/apps/Solid/images/timeIntervals.png delete mode 100644 kratos.gid/apps/Solid/images/timeParameters.png delete mode 100644 kratos.gid/apps/Solid/images/tree.png delete mode 100644 kratos.gid/apps/Solid/images/view.png delete mode 100644 kratos.gid/apps/Solid/python/RunSolid.py delete mode 100644 kratos.gid/apps/Solid/start.tcl delete mode 100644 kratos.gid/apps/Solid/symbols/symbols.tcl delete mode 100644 kratos.gid/apps/Solid/write/validation.tcl delete mode 100644 kratos.gid/apps/Solid/write/write.tcl delete mode 100644 kratos.gid/apps/Solid/write/writeProjectParameters.tcl delete mode 100644 kratos.gid/apps/Solid/xml/BoundaryConditions.spd delete mode 100644 kratos.gid/apps/Solid/xml/Conditions.xml delete mode 100644 kratos.gid/apps/Solid/xml/ConstitutiveLaws.xml delete mode 100644 kratos.gid/apps/Solid/xml/DeprecatedProcesses.xml delete mode 100644 kratos.gid/apps/Solid/xml/Elements.xml delete mode 100644 kratos.gid/apps/Solid/xml/Fields.spd delete mode 100644 kratos.gid/apps/Solid/xml/Functions.spd delete mode 100644 kratos.gid/apps/Solid/xml/Loads.spd delete mode 100644 kratos.gid/apps/Solid/xml/Main.spd delete mode 100644 kratos.gid/apps/Solid/xml/Materials.spd delete mode 100644 kratos.gid/apps/Solid/xml/Materials.xml delete mode 100644 kratos.gid/apps/Solid/xml/NodalConditions.xml delete mode 100644 kratos.gid/apps/Solid/xml/Parts.spd delete mode 100644 kratos.gid/apps/Solid/xml/Processes.xml delete mode 100644 kratos.gid/apps/Solid/xml/Procs.spd delete mode 100644 kratos.gid/apps/Solid/xml/Results.spd delete mode 100644 kratos.gid/apps/Solid/xml/SolutionStrategy.spd delete mode 100644 kratos.gid/apps/Solid/xml/StageInfo.spd delete mode 100644 kratos.gid/apps/Solid/xml/Strategies.xml delete mode 100644 kratos.gid/apps/Solid/xml/XmlController.tcl diff --git a/kratos.gid/apps/Solid/examples/CircularTank.tcl b/kratos.gid/apps/Solid/examples/CircularTank.tcl deleted file mode 100644 index a1be5e5e9..000000000 --- a/kratos.gid/apps/Solid/examples/CircularTank.tcl +++ /dev/null @@ -1,297 +0,0 @@ - -proc ::Solid::examples::CircularTank {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawCircularTankGeometry$::Model::SpatialDimension - TreeAssignationCircularTank$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawCircularTankGeometry3D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples CircularTank3D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawCircularTankGeometry2Da {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples CircularTank2Da.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawCircularTankGeometry2D {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationCircularTank3D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Static solution strategy set - spdAux::SetValueOnTreeItem v "Static" SLSoluType - - # Time parameters - set time_parameters [list EndTime 1.0 DeltaTime 1.0] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov volume - set props [list Element SmallDisplacementElement$nd ConstitutiveLaw SmallStrain3DLaw.LinearElasticModel] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone ConstraintX Total - GiD_Groups edit parent Total ConstraintX - spdAux::AddIntervalGroup ConstraintX "ConstraintX//Total" - GiD_Groups edit state "ConstraintX//Total" hidden - set solidConstraintX {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintXNode [customlib::AddConditionGroupOnXPath $solidConstraintX "ConstraintX//Total"] - $solidConstraintXNode setAttribute ov surface - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintXNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone ConstraintZ Total - GiD_Groups edit parent Total ConstraintZ - spdAux::AddIntervalGroup ConstraintZ "ConstraintZ//Total" - GiD_Groups edit state "ConstraintZ//Total" hidden - set solidConstraintZ {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintZNode [customlib::AddConditionGroupOnXPath $solidConstraintZ "ConstraintZ//Total"] - $solidConstraintZNode setAttribute ov surface - set props [list selector_component_X Not selector_component_Y Not selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintZNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov volume - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Pressure Total - GiD_Groups edit parent Total Pressure - spdAux::AddIntervalGroup Pressure "Pressure//Total" - GiD_Groups edit state "Pressure//Total" hidden - set solidPressure "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Pressure$nd'\]" - set solidPressureNode [customlib::AddConditionGroupOnXPath $solidPressure "Pressure//Total"] - $solidPressureNode setAttribute ov surface - set props [list ByFunction Yes function_value "9.81*1000*(2.5-y)" Interval Total] - foreach {prop val} $props { - set propnode [$solidPressureNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Ballast Total - GiD_Groups edit parent Total Ballast - spdAux::AddIntervalGroup Ballast "Ballast//Total" - GiD_Groups edit state "Ballast//Total" hidden - set solidBallast "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Ballast$nd'\]" - set solidBallastNode [customlib::AddConditionGroupOnXPath $solidBallast "Ballast//Total"] - $solidBallastNode setAttribute ov surface - set props [list ByFunction No value 50e6 Interval Total] - foreach {prop val} $props { - set propnode [$solidBallastNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - # Solver - set solver_parameters [list Solver amgcl max_iteration 2000 tolerance 1e-6 krylov_type cg] - set solver_params_path [spdAux::getRoute "SLStaticlinear_solver_settings"] - foreach {n v} $solver_parameters { - [$root selectNodes "$solver_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationCircularTank2Da {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Static solution strategy set - spdAux::SetValueOnTreeItem v "Static" SLSoluType - - # Time parameters - set time_parameters [list EndTime 1.0 DeltaTime 1.0] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - - } - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov surface - set props [list Element SmallDisplacementElement$nd ConstitutiveLaw SmallStrainAxisymmetric2DLaw.LinearElasticModel] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone Constraint Total - GiD_Groups edit parent Total Constraint - spdAux::AddIntervalGroup Constraint "Constraint//Total" - GiD_Groups edit state "Constraint//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Constraint//Total"] - $solidConstraintNode setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov surface - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Pressure Total - GiD_Groups edit parent Total Pressure - spdAux::AddIntervalGroup Pressure "Pressure//Total" - GiD_Groups edit state "Pressure//Total" hidden - set solidPressure "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Pressure$nd'\]" - set solidPressureNode [customlib::AddConditionGroupOnXPath $solidPressure "Pressure//Total"] - $solidPressureNode setAttribute ov line - set props [list ByFunction Yes function_value "9.81*1000*(2.5-y)" Interval Total] - foreach {prop val} $props { - set propnode [$solidPressureNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Ballast Total - GiD_Groups edit parent Total Ballast - spdAux::AddIntervalGroup Ballast "Ballast//Total" - GiD_Groups edit state "Ballast//Total" hidden - set solidBallast "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Ballast$nd'\]" - set solidBallastNode [customlib::AddConditionGroupOnXPath $solidBallast "Ballast//Total"] - $solidBallastNode setAttribute ov line - set props [list ByFunction No value 50e6 Interval Total] - foreach {prop val} $props { - set propnode [$solidBallastNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationCircularTank2D {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.geo b/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.geo deleted file mode 100644 index 2ae4c7227a67cddbc4adf1dbbed01c25bc7dfdf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4523 zcmds)J5Lo+5XV;@3Id9kN3_zy7J{OoA-PL;P1HgY6HB6o7z^=&C_Z_kkuQLSU%^5X zON?4-LQrFCVqs%}hEDW4zdbw4>|vLyB~Ehg?3w?6&SQ4YoV%?-5S$q}b#~x%*U;sQ zU1NRSeZelVT`3QaULBDKCp$!8J~=pksoWFUFfE#f@mHl%85Rvz6E{(bfM1i|R(QDz z&Z4&RAFYC4uY!-oxTt6k%%#HmZ%9XN?D2qtqJIm1)8IgG@f$aG-w*tjhqp^#g>i37 zN9V;}FAcvt#?H9D-(7>tW8!zu*zsdL73RAyovisLjNSKRJ(C{p$7jmm@)*=gW4>w6 z&U&!VYHA3%U}6! zE9xZQd{3c_Zn8D499o(51C#T`s-1gTn8{_0K zT${^2SL;7H3)kkZ&!wh=lcR8LzWLm_7$>jb+Whjl^D#~y!L>O-Uj;wvKRh^KHV1qz zH6JeT0Bnym6`#v}1W)&7^TS{7M9kAQv`Sya=W;K>BUa40PnwFq2JTw+qwk`iMA81Z z+`st4N4H5+@wwco@H7q`N)+vLxj%>*`)AxvX(~QG@Dg=}Tj%6Di-fE1uS?Mb}rIMuR}@P7^PC-YuJb@E??TkvDM3 z1PI??|2c5EFm8JCnsKEg}-|@2dnT-K4;hT+kQE!PC^_JRb&!Ti){9YE~ z{921^0!Wr@@AJr=k|o51Z&>0*BTn2o)H@q5o{v-KM+)J(d>2(J^`V%yknI~UHpPD3 zH^zr3FF2n^j&=8Rl`kB1i33XnqF$!X;ainNirnPqe5g-Ba5%KVcJ?e=kodTdm-j_C d=Xz25s@G(|&U0U%Jgr^n=O8>@M7}3$`vVzP!e#&f diff --git a/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.prj b/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.prj deleted file mode 100644 index 5ee745466..000000000 --- a/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.prj +++ /dev/null @@ -1,25 +0,0 @@ - - -
-    
-    
-      
-      
-      
-      
-      
-    
-    
-      
-        1 3 6 7 15 16 18 19
-        1x8
-        5 2 1x4 2 2
-      
-      
-        2 5 7 9:11
-        2x6
-        4 3 4 3 4 3 4 3 4 3 4 3
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.vv b/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.vv deleted file mode 100644 index fe66fee6e..000000000 --- a/kratos.gid/apps/Solid/examples/CircularTank2Da.gid/CircularTank2Da.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/cpuigbo/Desktop/CircularTank2Da.gid/CircularTank2Da.vv - x -2.27358531951904297 7.77358531951904297 - y 4.63604164123535156 -2.13604164123535156 - z -4.54599666595458984 4.54599666595458984 - e 3.38604164123535156 - v 0 0 0 - r 1 - m 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 - c 3.74545454978942871 0.654545426368713379 0 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/cpuigbo/Desktop/CircularTank2Da.gid/CircularTank2Da.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.geo b/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.geo deleted file mode 100644 index 4581818297ace19264f65c3f4061b2e37022eb7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11208 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 C)Ieqc diff --git a/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.prj b/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.prj deleted file mode 100644 index 372744322..000000000 --- a/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.prj +++ /dev/null @@ -1,26 +0,0 @@ - - -
-    
-    
-      
-      
-      
-      
-      
-      
-    
-    
-      
-        1:3 6:8 12
-        1x7
-        3 6 6 5x3 2
-      
-      
-        1
-        2
-        1 4
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.vv b/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.vv deleted file mode 100644 index 6a5d81bac..000000000 --- a/kratos.gid/apps/Solid/examples/CircularTank3D.gid/CircularTank3D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/cpuigbo/Desktop/CircularTank3D.gid/CircularTank3D.vv - x -4.36261892318725586 9.74696636199951172 - y 5.52431821823120117 -3.00504279136657715 - z -2.05847859382629395 7.42126178741455078 - e 4.26468038558959961 - v -0.150687560439109802 -0.215787529945373535 -0.0511590689420700073 - r 0.963385581970214844 - m 0.901636958122253418 0.163604810833930969 -0.400355130434036255 0 -0.0335388220846652985 0.949352025985717773 0.31241944432258606 0 0.43119126558303833 -0.268261492252349854 0.861458003520965576 0 0 0 0 1 - c 2.68139147758483887 0.784821450710296631 -2.68139147758483887 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/cpuigbo/Desktop/CircularTank3D.gid/CircularTank3D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/DynamicBeam.tcl b/kratos.gid/apps/Solid/examples/DynamicBeam.tcl deleted file mode 100644 index 61becb49e..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicBeam.tcl +++ /dev/null @@ -1,141 +0,0 @@ - -proc ::Solid::examples::DynamicBeam {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawDynamicBeamGeometry$::Model::SpatialDimension - TreeAssignationDynamicBeam$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawDynamicBeamGeometry3D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples DynamicBeam3D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawDynamicBeamGeometry2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::DrawDynamicBeamGeometry2D {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationDynamicBeam3D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype point - - # Static solution strategy set - spdAux::SetValueOnTreeItem v "Dynamic" SLSoluType - spdAux::SetValueOnTreeItem v "SimoStep" SLScheme - - # Time parameters - set time_parameters [list EndTime 5.0 DeltaTime 0.05] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov line - set props [list Element LargeDisplacementBeamElement3D ConstitutiveLaw CircularSection3D DIAMETER 0.05 YOUNG_MODULUS 206.9e8] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - spdAux::RequestRefresh - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone Constraint Total - GiD_Groups edit parent Total Constraint - spdAux::AddIntervalGroup Constraint "Constraint//Total" - GiD_Groups edit state "Constraint//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Constraint//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone AngularConstraint Total - GiD_Groups edit parent Total AngularConstraint - spdAux::AddIntervalGroup AngularConstraint "AngularConstraint//Total" - GiD_Groups edit state "AngularConstraint//Total" hidden - set solidAngularConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='ANGULAR_VELOCITY']} - set solidAngularConstraintNode [customlib::AddConditionGroupOnXPath $solidAngularConstraint "AngularConstraint//Total"] - $solidAngularConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 2.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidAngularConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov line - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationDynamicBeam2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::TreeAssignationDynamicBeam2D {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.geo b/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.geo deleted file mode 100644 index c8f5c092f7e9c04d7370cddf74cafdf7b7c1f788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmWe&U|vP*Jb;&XF%YOJ&X^dzW@yr3wu6qJ@X|Skf&zN1c8rmw*deo C)GEaQ diff --git a/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.prj b/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.prj deleted file mode 100644 index 17cf51e35..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.prj +++ /dev/null @@ -1,24 +0,0 @@ - - -
-    
-    
-      
-      
-      
-      
-    
-    
-      
-        1
-        3
-        3 1 4
-      
-      
-        1 2
-        2 2
-        1 2 1 2
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv b/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv deleted file mode 100644 index d30c49831..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/cpuigbo/GiDInterface/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv - x 0.582600831985473633 3.13705992698669434 - y 0.753371059894561768 -1.3496021032333374 - z -1.89401459693908691 1.89401459693908691 - e 1.65831243991851807 - v 0.0429526552950176832 0.875547797747364354 0.149245509813539512 - r -0.457489782468801232 - m -0.577716350555419922 0.211770802736282349 -0.788287341594696045 0 -0.0613423846662044525 0.951761722564697266 0.300643950700759888 0 0.813929319381713867 0.222042351961135864 -0.536857724189758301 0 0 0 0 1 - c 1.66666662693023682 -0.333333343267440796 0 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 0 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/cpuigbo/GiDInterface/kratos.gid/apps/Solid/examples/DynamicBeam3D.gid/DynamicBeam3D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/DynamicRod.tcl b/kratos.gid/apps/Solid/examples/DynamicRod.tcl deleted file mode 100644 index 90de1106f..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicRod.tcl +++ /dev/null @@ -1,206 +0,0 @@ - -proc ::Solid::examples::DynamicRod {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawDynamicRodGeometry$::Model::SpatialDimension - TreeAssignationDynamicRod$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawDynamicRodGeometry3D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples DynamicRod3D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawDynamicRodGeometry2D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples DynamicRod2D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawDynamicRodGeometry2Da {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationDynamicRod3D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Dynamic solution strategy set - spdAux::SetValueOnTreeItem v "Dynamic" SLSoluType - - # Time parameters - set time_parameters [list EndTime 1.06 DeltaTime 0.01] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov volume - set props [list Element TotalLagrangianElement$nd ConstitutiveLaw LargeStrain3DLaw.SaintVenantKirchhoffModel] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone Constraint Total - GiD_Groups edit parent Total Constraint - spdAux::AddIntervalGroup Constraint "Constraint//Total" - GiD_Groups edit state "Constraint//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Constraint//Total"] - $solidConstraintNode setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov volume - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationDynamicRod2D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Dynamic solution strategy set - spdAux::SetValueOnTreeItem v "Dynamic" SLSoluType - - # Time parameters - set time_parameters [list EndTime 1.06 DeltaTime 0.01] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov surface - set props [list Element TotalLagrangianElement$nd ConstitutiveLaw LargeStrain3DLaw.SaintVenantKirchhoffModel] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone Constraint Total - GiD_Groups edit parent Total Constraint - spdAux::AddIntervalGroup Constraint "Constraint//Total" - GiD_Groups edit state "Constraint//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Constraint//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov surface - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } -} -proc Solid::examples::TreeAssignationDynamicRod2Da {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.geo b/kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.geo deleted file mode 100644 index 27f7e44aaa86dd93ab9d2d548ac4b7d46ed56bdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 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 m!_-woE?+`dL)dRNd - -
-    
-    
-      
-      
-      
-      
-    
-    
-      
-        85
-        1
-        4
-      
-      
-        1:3
-        2x3
-        2 3 2 3 2 3
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.vv b/kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.vv deleted file mode 100644 index bb19ca5af..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicRod2D.gid/DynamicRod2D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/jmaria/Tests/DynamicRod2D.gid/DynamicRod2D.vv - x -0.0860478430986404419 0.338547825813293457 - y 0.147866189479827881 -0.147866189479827881 - z -0.443598568439483643 0.443598568439483643 - e 0.147866189479827881 - v 0 0 0 - r 1 - m 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 - c 0.126249998807907104 0 -6.32091712304827524e-09 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 1 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/jmaria/Tests/DynamicRod2D.gid/DynamicRod2D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.geo b/kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.geo deleted file mode 100644 index bf48e089e57367b2dd0923b3f5489b772a8d18d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35516 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 - -
-    
-    
-      
-      
-      
-      
-    
-    
-      
-        116
-        1
-        2
-      
-      
-        8:19 31:33 40 53:56
-        1x20
-        1x20
-      
-      
-        1
-        2
-        3 4
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.vv b/kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.vv deleted file mode 100644 index dacde8124..000000000 --- a/kratos.gid/apps/Solid/examples/DynamicRod3D.gid/DynamicRod3D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/jmaria/Tests/DynamicRod3D.gid/DynamicRod3D.vv - x -0.0906996056437492371 0.33330225944519043 - y 0.143511354923248291 -0.152221024036407471 - z -0.418598592281341553 0.468598544597625732 - e 0.147866189479827881 - v -0.155974417924880981 0.326733916997909546 0.115599974989891052 - r 0.924961388111114502 - m 0.759763181209564209 -0.315775305032730103 0.568371236324310303 0 0.111926771700382233 0.924617230892181396 0.364081501960754395 0 -0.640493810176849365 -0.21299976110458374 0.737833857536315918 0 0 0 0 1 - c 0.110273361206054688 6.73620590418977372e-08 -0.0249999910593032837 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 1 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/jmaria/Tests/DynamicRod3D.gid/DynamicRod3D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/EccentricColumn.tcl b/kratos.gid/apps/Solid/examples/EccentricColumn.tcl deleted file mode 100644 index f6301d3f2..000000000 --- a/kratos.gid/apps/Solid/examples/EccentricColumn.tcl +++ /dev/null @@ -1,181 +0,0 @@ - -proc ::Solid::examples::EccentricColumn {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawEccentricColumnGeometry$::Model::SpatialDimension - TreeAssignationEccentricColumn$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawEccentricColumnGeometry3D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples EccentricColumn3D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawEccentricColumnGeometry2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::DrawEccentricColumnGeometry2D {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationEccentricColumn3D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Static solution strategy set - spdAux::SetValueOnTreeItem v "Static" SLSoluType - - # Time parameters - set time_parameters [list EndTime 1.0 DeltaTime 1.0] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov volume - set props [list Element SmallDisplacementElement$nd ConstitutiveLaw SmallStrain3DLaw.LinearElasticModel] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone ConstraintX Total - GiD_Groups edit parent Total ConstraintX - spdAux::AddIntervalGroup ConstraintX "ConstraintX//Total" - GiD_Groups edit state "ConstraintX//Total" hidden - set solidConstraintX {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintXNode [customlib::AddConditionGroupOnXPath $solidConstraintX "ConstraintX//Total"] - $solidConstraintXNode setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintXNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone ConstraintZ Total - GiD_Groups edit parent Total ConstraintZ - spdAux::AddIntervalGroup ConstraintZ "ConstraintZ//Total" - GiD_Groups edit state "ConstraintZ//Total" hidden - set solidConstraintZ {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintZNode [customlib::AddConditionGroupOnXPath $solidConstraintZ "ConstraintZ//Total"] - $solidConstraintZNode setAttribute ov line - set props [list selector_component_X Not selector_component_Y Not selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintZNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone SelfWeight Total - GiD_Groups edit parent Total SelfWeight - spdAux::AddIntervalGroup SelfWeight "SelfWeight//Total" - GiD_Groups edit state "SelfWeight//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='SelfWeight$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "SelfWeight//Total"] - $solidLoadNode setAttribute ov volume - set props [list ByFunction No modulus 9.81 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Load Total - GiD_Groups edit parent Total Load - spdAux::AddIntervalGroup Load "Load//Total" - GiD_Groups edit state "Load//Total" hidden - set solidLoad "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Load$nd'\]" - set solidLoadNode [customlib::AddConditionGroupOnXPath $solidLoad "Load//Total"] - $solidLoadNode setAttribute ov surface - set props [list ByFunction No modulus 4.44e6 direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Spring Total - GiD_Groups edit parent Total Spring - spdAux::AddIntervalGroup Spring "Spring//Total" - GiD_Groups edit state "Spring//Total" hidden - set solidSpring "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Spring$nd'\]" - set solidSpringNode [customlib::AddConditionGroupOnXPath $solidSpring "Spring//Total"] - $solidSpringNode setAttribute ov surface - set props [list ByFunction No modulus 50e6 direction 0.0,1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidSpringNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - # Solver - set solver_parameters [list Solver amgcl max_iteration 2000 tolerance 1e-6 krylov_type cg] - set solver_params_path [spdAux::getRoute "SLStaticlinear_solver_settings"] - foreach {n v} $solver_parameters { - [$root selectNodes "$solver_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationEccentricColumn2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::TreeAssignationEccentricColumn2D {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.geo b/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.geo deleted file mode 100644 index 59e6badc1349d59b2197c353e30fa6eea37f2b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24732 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 K>dfnN-~I=g$l?V6 diff --git a/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.prj b/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.prj deleted file mode 100644 index 29a1ac92a..000000000 --- a/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.prj +++ /dev/null @@ -1,31 +0,0 @@ - - -
-    
-    
-      
-      
-      
-      
-      
-      
-    
-    
-      
-        10 12
-        1 1
-        6 5
-      
-      
-        4 6 7 25 35
-        1x5
-        4x4 2
-      
-      
-        2:9
-        2x8
-        1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv b/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv deleted file mode 100644 index 97c55a377..000000000 --- a/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/cpuigbo/GiDInterface/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv - x -3.94726991653442383 5.74480867385864258 - y 6.39163064956665039 -1.58742785453796387 - z -2.95716428756713867 3.97514200210571289 - e 2.76385402679443359 - v -0.0793274012290671182 0.899682501223218134 0.174501511325530018 - r 0.392208881101695939 - m -0.679758787155151367 -0.279621034860610962 0.678041458129882812 0 -0.00585686462000012398 0.926512777805328369 0.37621772289276123 0 -0.733412444591522217 0.251766085624694824 -0.631442904472351074 0 0 0 0 1 - c 0.508988738059997559 1.8859550952911377 -0.508988738059997559 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/cpuigbo/GiDInterface/kratos.gid/apps/Solid/examples/EccentricColumn3D.gid/EccentricColumn3D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/NotchedBeam.tcl b/kratos.gid/apps/Solid/examples/NotchedBeam.tcl deleted file mode 100644 index acd3a3688..000000000 --- a/kratos.gid/apps/Solid/examples/NotchedBeam.tcl +++ /dev/null @@ -1,164 +0,0 @@ - -proc ::Solid::examples::NotchedBeam {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawNotchedBeamGeometry$::Model::SpatialDimension - TreeAssignationNotchedBeam$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawNotchedBeamGeometry3D {args} { - Kratos::ResetModel -} -proc Solid::examples::DrawNotchedBeamGeometry2D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples NotchedBeam2D.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawNotchedBeamGeometry2Da {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationNotchedBeam3D {args} { - Kratos::ResetModel -} -proc Solid::examples::TreeAssignationNotchedBeam2D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - if {$nd eq "3D"} { set condtype surface } - - # Quasi-static solution strategy set - spdAux::SetValueOnTreeItem v "Quasi-static" SLSoluType - spdAux::SetValueOnTreeItem v "Non-linear" SLAnalysisType - - # Time parameters - set time_parameters [list EndTime 200 DeltaTime 1] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Solid] - $solidPartsNode setAttribute ov surface - set props [list Element SmallDisplacementElement$nd ConstitutiveLaw SmallStrainPlaneStress2DLaw.SimoJuExponentialDamageModel DENSITY 2500 YOUNG_MODULUS 2.8e10 POISSON_RATIO 0.1 THICKNESS 0.1 DAMAGE_THRESHOLD 19.1237 STRENGTH_RATIO 10.9375 FRACTURE_ENERGY 140] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone ConstraintXY Total - GiD_Groups edit parent Total ConstraintXY - spdAux::AddIntervalGroup ConstraintXY "ConstraintXY//Total" - GiD_Groups edit state "ConstraintXY//Total" hidden - set solidConstraintXY {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintXYNode [customlib::AddConditionGroupOnXPath $solidConstraintXY "ConstraintXY//Total"] - $solidConstraintXYNode setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintXYNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Constraint - GiD_Groups clone ConstraintY Total - GiD_Groups edit parent Total ConstraintY - spdAux::AddIntervalGroup ConstraintY "ConstraintY//Total" - GiD_Groups edit state "ConstraintY//Total" hidden - set solidConstraintY {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintYNode [customlib::AddConditionGroupOnXPath $solidConstraintY "ConstraintY//Total"] - $solidConstraintYNode setAttribute ov line - set props [list selector_component_X Not selector_component_Y Not selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintYNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Solid Loads - GiD_Groups clone LoadY Total - GiD_Groups edit parent Total LoadY - spdAux::AddIntervalGroup LoadY "LoadY//Total" - GiD_Groups edit state "LoadY//Total" hidden - set solidLoadY "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Load$nd'\]" - set solidLoadYNode [customlib::AddConditionGroupOnXPath $solidLoadY "LoadY//Total"] - $solidLoadYNode setAttribute ov line - set props [list ByFunction Yes function_modulus "3000*t" direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadYNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone LoadYY Total - GiD_Groups edit parent Total LoadYY - spdAux::AddIntervalGroup LoadYY "LoadYY//Total" - GiD_Groups edit state "LoadYY//Total" hidden - set solidLoadYY "container\[@n='Solid'\]/container\[@n='Loads'\]/condition\[@n='Load$nd'\]" - set solidLoadYYNode [customlib::AddConditionGroupOnXPath $solidLoadYY "LoadYY//Total"] - $solidLoadYYNode setAttribute ov line - set props [list ByFunction Yes function_modulus "30000*t" direction 0.0,-1.0,0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidLoadYYNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - # Output - set output_parameters [list DAMAGE_VARIABLE Yes] - set output_params_path [spdAux::getRoute "ElementResults"] - foreach {n v} $output_parameters { - [$root selectNodes "$output_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationNotchedBeam2Da {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.geo b/kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.geo deleted file mode 100644 index 4ee2b07ddfc5325303c9fe3ed62a49f8ca6f6298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3788 zcma)IzLZQ%( zb=%6;#a0|VRKDV9aimyjQZh`g5kq`I-~6V@Pt?HSp|#V%^KHq=DK?$%l6d0G5Xz?BiD)l z1J^%(<5T1m<~Vm%acOTX6Sq4jZlCeYJvnkyr*meUxmV+w?x^+8mm^1SbsGKl1#pKy zy}WSgcBdO7@sHnrjcdB2)waAf`W?uTYl`#N0Pa9(bK#l(UZdZ^04^07zHZLvZvot& zDkJZWbQt|60=P~-n{#6*fa}EQwDFF<2XKj0X>)^-`!j(1 zYGHBhI+h+nFJRxP7?L7;v6MOWM;(Ekmc;3HeGX3EZMudvy&FA&o`Nk;!-`*hUvQiQ z?92cx`^vk81F*!4T4mo^K3IN>!BLxFXZv6=fg>lt&I!QsZuA5{n!O;uA7W!bRMR3$U*diY+CUE2g z`KZ^iMzeFBZzF1#xN;BN8yxaY(QOR5DUX`k^Bc=MZ}z^3TX{2(yBU27TuKrae9p}y zdo8{;@8RN-_ty4;o~Bc=b1j08P1#a?rF}3%FZj>)Z_qQ>r{L4|vY&TMBzZD=ttx{& zc49#tm_*(~zCFn|@`(JP$LYOGEnR`vw()i1*qYX4{BFAM;(|OAbNu!eF02Vv+-*5# zH~gj+p$r{fvSDRyhn21ue9Vq_o9k2X>3Z4EJ9^{ewXyQri61p=65>GY=&$q^dJ(;g z*ikpsLy>yegI-C`1`CIrmiWu4R9QtZACuphCtu##aJ8n@je(hHj{BC$=X)wIw_Aw= zwa1t4s&V69S-hy=?1B#&dcnsR&9|bPQ+X@+bbYq7IC_b1I!g31I`PrJU&zPk>PR#a zjh5TNlPw62i1W|JYdbL65?`>P(C(7dd`XD}* - -
-    
-    
-      
-      
-      
-      
-      
-    
-    
-      
-        21 24 27 30
-        1x4
-        3 2 4 5
-      
-      
-        3:5
-        1x3
-        1x3
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.vv b/kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.vv deleted file mode 100644 index b1e32bd49..000000000 --- a/kratos.gid/apps/Solid/examples/NotchedBeam2D.gid/NotchedBeam2D.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/josep_maria/Desktop/damage/NotchedBeam2D.gid/NotchedBeam2D.vv - x -0.387526094913482666 1.22752606868743896 - y 0.564327478408813477 -0.364327490329742432 - z -1.39298248291015625 1.39298248291015625 - e 0.464327484369277954 - v -0 -0 -8.74227765734758577e-08 - r -1 - m 1 -1.74845553146951715e-07 0 0 1.74845553146951715e-07 1 0 0 0 0 1 0 0 0 0 1 - c 0.419999986886978149 0.118095241487026215 0 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 1 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/josep_maria/Desktop/damage/NotchedBeam2D.gid/NotchedBeam2D.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.geo b/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.geo deleted file mode 100644 index 5f3a05b9f37afaf1bfe4955967124d25bc40fc0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6202 zcmb7{OKeqD6o#)->=jY)QSfaO>4bz!5fW@dat};Y1k@@BW7}vGjWeQgfI2Y7p)(nf z_*Q)2`xTQmVd6js>dY{6K;lRflU@^`?(eMg@2-2oKMIi&J|#XMP%~#5GK>3zu)!xE$_z zoUpVw50^V>l(<^!f3_Fku68d=+~%7X1iPx9^y+hMZY!6=U9@km@7vaf=~=q_J=+sg<4Eo2s{?LL-9B20Yw(l1xG&MCQ9AeDfpa@{ZtbgUL`=^T zchb1?I(O1>*9P1jHFtDDT!Wwfk#D{>;8p|YZg#%9F5qg}&K;}Fws>Br#q=!QSMe;a z#el{0`XRYKo|T_$Q94&!>s+%fo^R0N3S7mrxIUh59Fptfc`V>6o}WAZ%VgHwV0kIZht&aR6d^X7?SJb`Obi=<$-UmYtCI-OwUVvb5l1aDj(0|LvnpQ zfA9*G$3`g!>r%e7T%YATSRV#l+qIqR^P1OA?3;St;`wC2wO-fDec_n()Y?}c1>BzX zpIo0`a@>ytuASS?_4(DaNB{fl4~yqd03{IV5+paqIhj9dH%T zsyRNMzX`Z@-*&FgKAyh~xQb_;>*M*mfU9^G*T?hs0ax)Xu8-#*0iQlO- zSfh@h`F@D*We4VH>JPQ(7xyx ze1YwCr{@TZZowDWUT2oD=oEYb*6Yd=7F~ibzsFu7RVCn7ng75WOESY(*#+~Tp z@`cx48JH%*(!22mw%1xEEWH|Efc4s{grzs*3$R{Gm9S_Yd;!*LrxKRF4IZr5N+m3P z8oz<{+Ngx3FXK0`UJI45^kMu4)@z>3_?dKvkiyNo;bDYw_Vhz<8Ltj$=~)r^-g5Y diff --git a/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.prj b/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.prj deleted file mode 100644 index d92ec5512..000000000 --- a/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.prj +++ /dev/null @@ -1,28 +0,0 @@ - - -
-    
-    
-      
-      
-      
-      
-      
-      
-      
-      
-    
-    
-      
-        1:6 18 27:32 100018
-        1x14
-        19 20 19 19 16 19 17 15x4 18 15 17
-      
-      
-        1:24 100001:100024 1000007:1000018 1000020:1000025
-        1x66
-        1x48 14x18
-      
-    
-  
-
diff --git a/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.vv b/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.vv deleted file mode 100644 index f545aaa7e..000000000 --- a/kratos.gid/apps/Solid/examples/StaticBeamLattice.gid/StaticBeamLattice.vv +++ /dev/null @@ -1,37 +0,0 @@ -BeginZE /home/jmaria/Desktop/StaticBeamLattice.gid/StaticBeamLattice.vv - x -6.89991378784179688 6.89991378784179688 - y 15.3079414367675781 -4.42514467239379883 - z -20.6997413635253906 20.6997413635253906 - e 6.89991378784179688 - v 0.257072094239774285 -0.00642424184424369993 0.00395524515450007726 - r -0.966362780489641304 - m 0.999886155128479004 0.00434141699224710464 0.0144498627632856369 0 -0.0109473904594779015 0.867796599864959717 0.496798992156982422 0 -0.0103827305138111115 -0.496900618076324463 0.867745339870452881 0 0 0 0 1 - c 0 5.44139814376831055 0 - pd 0 - pno 0 - pfo 0 - pf 4 - pv 0 - NowUse 0 - DrawingType 0 - LightVector 90 90 150 0 - OGLShadow(UseShadows) 0 - OGLShadow(RenderMode) RenderNice - OGLShadow(ShadowBias) -0.002 - OGLShadow(AmbientShadows) 1 - OGLShadow(UseFBO) 0 - OGLShadow(FBOSize) 2048 - OGLShadow(DimmedLightFactor) 0.02 - OGLStereo(UseStereo) 0 - OGLStereo(RelativeEyeDistance) 1 - OGLStereo(FlipEyes) 0 - OGLStereo(StereoMode) AnaglyphColors - OGLStereo(EyeDistance) 0.075 - OGLStereo(LeftEyeDistance) 1 0 0 1 - OGLStereo(RightEyeDistance) 0 1 1 1 -EndZE /home/jmaria/Desktop/StaticBeamLattice.gid/StaticBeamLattice.vv - -BeginMirror - Mirror 0 Angle 0.0 AngleFake -15.0 SizeFactor 2.0 HeightOffset 0.25 Color #d9e5f24d Backlight Off EdgeStyle No Type Scene DrawMode Mirror -EndMirror - diff --git a/kratos.gid/apps/Solid/examples/StaticBeamLattice.tcl b/kratos.gid/apps/Solid/examples/StaticBeamLattice.tcl deleted file mode 100644 index bffb42d84..000000000 --- a/kratos.gid/apps/Solid/examples/StaticBeamLattice.tcl +++ /dev/null @@ -1,204 +0,0 @@ - -proc ::Solid::examples::StaticBeamLattice {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - DrawStaticBeamLatticeGeometry$::Model::SpatialDimension - TreeAssignationStaticBeamLattice$::Model::SpatialDimension - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER - GiD_Process 'Zoom Frame -} - - -# Draw Geometry -proc Solid::examples::DrawStaticBeamLatticeGeometry3D {args} { - Kratos::ResetModel - set dir [apps::getMyDir "Solid"] - set problemfile [file join $dir examples StaticBeamLattice.gid] - GiD_Process Mescape Files InsertGeom $problemfile -} -proc Solid::examples::DrawStaticBeamLatticeGeometry2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::DrawStaticBeamLatticeGeometry2D {args} { - Kratos::ResetModel -} -# Mesh sizes - - -# Tree assign -proc Solid::examples::TreeAssignationStaticBeamLattice3D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype point - - # Static solution strategy set - spdAux::SetValueOnTreeItem v "Quasi-static" SLSoluType - spdAux::SetValueOnTreeItem v "StaticStep" SLScheme - - # Time parameters - set time_parameters [list EndTime 1.6e2 DeltaTime 5.0] - set time_params_path [spdAux::getRoute SLTimeParameters] - foreach {name value} $time_parameters { - set node [$root selectNodes "$time_params_path/value\[@n = '$name'\]"] - if {$node ne ""} { - $node setAttribute v $value - } else { - W "Couldn't find $name - Check example script" - } - } - - # Solid Parts - set solidParts [spdAux::getRoute "SLParts"] - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Wires] - $solidPartsNode setAttribute ov line - set props [list Element LargeDisplacementBeamElement3D ConstitutiveLaw UserDefined3D DENSITY 2650 CROSS_SECTION_AREA 7.85e-4 YOUNG_MODULUS 83.0e15 INERTIA_X 4.9E-6 INERTIA_Y 4.9E-6] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - set solidPartsNode [customlib::AddConditionGroupOnXPath $solidParts Connectors] - $solidPartsNode setAttribute ov line - set props [list Element LargeDisplacementBeamElement3D ConstitutiveLaw UserDefined3D DENSITY 2650 CROSS_SECTION_AREA 7.85e-4 YOUNG_MODULUS 83.0e15 INERTIA_X 1.0E-6 INERTIA_Y 1.0E-6] - foreach {prop val} $props { - set propnode [$solidPartsNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - spdAux::RequestRefresh - set solidConditions [spdAux::getRoute "SLNodalConditions"] - - # Solid Constraint - GiD_Groups clone Displacement1 Total - GiD_Groups edit parent Total Displacement1 - spdAux::AddIntervalGroup Displacement1 "Displacement1//Total" - GiD_Groups edit state "Displacement1//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement1//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Displacement2 Total - GiD_Groups edit parent Total Displacement2 - spdAux::AddIntervalGroup Displacement2 "Displacement2//Total" - GiD_Groups edit state "Displacement2//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement2//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X Not selector_component_Y ByFunction function_component_Y "1.0e-2*t" selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Displacement3 Total - GiD_Groups edit parent Total Displacement3 - spdAux::AddIntervalGroup Displacement3 "Displacement3//Total" - GiD_Groups edit state "Displacement3//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement3//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Displacement4 Total - GiD_Groups edit parent Total Displacement4 - spdAux::AddIntervalGroup Displacement4 "Displacement4//Total" - GiD_Groups edit state "Displacement4//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement4//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByFunction function_component_Y "1.0e-2*t" selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Displacement5 Total - GiD_Groups edit parent Total Displacement5 - spdAux::AddIntervalGroup Displacement5 "Displacement5//Total" - GiD_Groups edit state "Displacement5//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement5//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X Not value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z Not Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - GiD_Groups clone Displacement6 Total - GiD_Groups edit parent Total Displacement6 - spdAux::AddIntervalGroup Displacement6 "Displacement6//Total" - GiD_Groups edit state "Displacement6//Total" hidden - set solidConstraint {container[@n='Solid']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} - set solidConstraintNode [customlib::AddConditionGroupOnXPath $solidConstraint "Displacement6//Total"] - $solidConstraintNode setAttribute ov point - set props [list selector_component_X Not selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] - foreach {prop val} $props { - set propnode [$solidConstraintNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Solid $prop" - } - } - - # Parallelism - set time_parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set time_params_path [spdAux::getRoute "Parallelization"] - foreach {n v} $time_parameters { - [$root selectNodes "$time_params_path/value\[@n = '$n'\]"] setAttribute v $v - } - - - spdAux::RequestRefresh -} -proc Solid::examples::TreeAssignationStaticBeamLattice2Da {args} { - Kratos::ResetModel -} -proc Solid::examples::TreeAssignationStaticBeamLattice2D {args} { - Kratos::ResetModel -} diff --git a/kratos.gid/apps/Solid/examples/examples.tcl b/kratos.gid/apps/Solid/examples/examples.tcl deleted file mode 100644 index 046f1c732..000000000 --- a/kratos.gid/apps/Solid/examples/examples.tcl +++ /dev/null @@ -1,41 +0,0 @@ -namespace eval Solid::examples { - -} - -proc Solid::examples::Init { } { - uplevel #0 [list source [file join $::Solid::dir examples DynamicBeam.tcl]] - uplevel #0 [list source [file join $::Solid::dir examples CircularTank.tcl]] - uplevel #0 [list source [file join $::Solid::dir examples EccentricColumn.tcl]] - uplevel #0 [list source [file join $::Solid::dir examples DynamicRod.tcl]] - uplevel #0 [list source [file join $::Solid::dir examples NotchedBeam.tcl]] - uplevel #0 [list source [file join $::Solid::dir examples StaticBeamLattice.tcl]] -} - -proc Solid::examples::UpdateMenus3D { } { - set menu_id 7 - GiDMenu::InsertOption "Kratos" [list "DynamicBeam" ] [incr menu_id] PRE [list ::Solid::examples::DynamicBeam] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "CircularTank" ] [incr menu_id] PRE [list ::Solid::examples::CircularTank] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "EccentricColumn" ] [incr menu_id] PRE [list ::Solid::examples::EccentricColumn] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "DynamicRod" ] [incr menu_id] PRE [list ::Solid::examples::DynamicRod] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "StaticBeamLattice" ] [incr menu_id] PRE [list ::Solid::examples::StaticBeamLattice] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "---"] [incr menu_id] PRE "" "" "" insertbefore = - GiDMenu::UpdateMenus -} - -proc Solid::examples::UpdateMenus2D { } { - set menu_id 7 - GiDMenu::InsertOption "Kratos" [list "NotchedBeam" ] [incr menu_id] PRE [list ::Solid::examples::NotchedBeam] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "DynamicRod" ] [incr menu_id] PRE [list ::Solid::examples::DynamicRod] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "---"] [incr menu_id] PRE "" "" "" insertbefore = - GiDMenu::UpdateMenus -} - -proc Solid::examples::UpdateMenus2Da { } { - set menu_id 7 - GiDMenu::InsertOption "Kratos" [list "CircularTank" ] [incr menu_id] PRE [list ::Solid::examples::CircularTank] "" "" insertbefore = - GiDMenu::InsertOption "Kratos" [list "---"] [incr menu_id] PRE "" "" "" insertbefore = - GiDMenu::UpdateMenus -} - - -Solid::examples::Init diff --git a/kratos.gid/apps/Solid/images/2D.png b/kratos.gid/apps/Solid/images/2D.png deleted file mode 100644 index b7ea880e06699fac5268602666d82352aceae74b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4975 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 diff --git a/kratos.gid/apps/Solid/images/2Da.png b/kratos.gid/apps/Solid/images/2Da.png deleted file mode 100644 index 177ed86fc7ff3f99c095bd9ae369293743b67bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6018 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 diff --git a/kratos.gid/apps/Solid/images/3D.png b/kratos.gid/apps/Solid/images/3D.png deleted file mode 100644 index 6b418ad8e99895147b932d4420491f9af67a8c1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4907 zcmV+`6V&X9P)4|xd!f}&u>2Voq8y zptpB03aCy8-aJ9+h{wb!CS=_R@L!3mS7)bYX67)Fh8D(0M@L#38k%^Utw#gAaf#Af z3lhgcn&hmk+*N65YZm&E{0$qBS6GOZ2?>Z_wTekSfHBb1gQ5O@G}qVTW@F=m=Bu@_ zvB5ezIur~1elB@t5ywHAxRjLiHMzO@t{P2R?eDHzObG>?fM|Vq0b2jkI2}(x<05AZLq^((#=8QA| z@XU)ZA|W{$VqlMbF)R|BOG;oKAIDdpemd`5VoFMep{whz!D87Dpj-d|8^;|;PEU6l zL6wx2BCntTc2Q)K4FNo~cQ0CR-o(v@hS}jaA!Jp0dP;9g%i{pbgubpWx&gsc_L#@#;-zG${HsAU9uSTnlyJs-05M14ukdgw*OjJlC zBO?Qyot?A(78Vv3ZUNQ_0PGw$f8tx0mtC!}HbHmYLbID@meiV=swd*_$~ zC`ZV=6Qa$=rW`^XqRoc6+~5cS2T=DKhfO&!%rjJEhL1z(^dDxDhK=KdcsTAxak$ht zc7Tl>hk8`y$}?WbIi}21F?bb@GvYAFHdS^zL}sc&+f+GM96yfZ%o{eoe-|4$X3TM` zaVR0gk!HcbFemyZ&i?Ou9EaNNEOj)*;WRj!HIC!zMmCPa;Ko$hIgXpBk|?DR*1hh>negTBE_rgao&RD)pV67#|&lp{on` zjK(Dsur@9ZQEIi*bB6Bjpd^jmo7wS&Zd4L+Ivr9oGm({-hosf3W!*dT`cb11E%o)d zRab|xu`xyZ6~Af~qP1FRv|7Yy@9##Sj){Rr>)p--qedgfO(qQV_Trw=h~fTz=arug9A8>j41G*RP}Q;>9KJH+Ay#E3nx;ed33FH+N z_>?pbL_|g5sh3{Dsn0)0b8T(VScAMxn~=9@6PmAI$M>gCV|-*}N%~=%n3%V&io@)6 zRr7DMT78y}({}TwV&=&c?0@n}n1+U+@90p>IrJBSGS{xfzrXz!byZb<|9y8BhXWw- z90#7~XB{@H6{6j)_+baoeB*}Sg|PpLClC=CDXXu6fQYCl>@F+AzQc!Q_kU5x)DrNy zyx@5r03?@tP}wQPgxP#QCqu!*E{fEFR zhdsR@&sidu&1!{hauUvJ1TGext*zKtROIq}S9?2p^!oc+Zw4~gu0?uww%2MuEh`Hh zt*wg=N9V$7HlxpAz{tP=jB}h>ZEP%J17t&l_! z&K7FUT#)BB1904ALR56L;+<={ejQ~;j?5B#bA3IU>+5mLjSqAlfJ&vpgS&QN=b=Ng ze>W{N6YaNdDgHdw=g#4LMa6>Gtx8QrUO@p0AAAs6ozAP@$}KF!mXZ=&zHq@O#Icyo zF8M(2D-k-gT7`38N0MM2A4hnEq8t9gJUWWL?rub=RQRr<0<|)t2J`4B&K*Avc;x zT3Lyv+FCsR+;hk+l(&VuO0CAOM;^f!F188s29s0u0^D(da2zOL_m~NjRx8BGNl;1^ zJMMOLEV_-F@4uJ(c0F#}SMAO`#z#kS?5}@CZDpnG7hPCfj1{r5io6T!#DuJw0)fa_ zL-0HgazCCAxFK>hUh)*-|=I|@bed6l;!KB=j5QHx!JFB=McpB z#S1SWD?i`k>#I(k3ixNbR#hci>twH6=f4h4*|VS|PIi7ie*OCEcwom4SzmM2>C-{+ zeAi?;{A=>^{N6_afW-5>PezC3B0{Zpxzn&pr9x(29yV;*;?=;}7w^3X+r)%plFlbk zs_mw_I&9y+-{b3(GctVoT(h3>{_Zi75J+EIa#|W*c>Q(7+x_2n-a%7cUC?M$x&Deb z1BfAMs^plbV}JPz>T7C(uJ64v^N=(BY_0@5AQ7IYWQk1`l_W*ShH5J-@qeFxKJ93F z)3)3S9!mD#EYm?Iei~aNJWuU`WU7>U=-SFkoca1|m=vDFSV=jdB+!K}dY;Q4P(S=z@X zB*?nHv$fSfbsRk@<>qgg$HvgviSQ#IW9S07`nsRWEXLnf{PL!7iv^7v` zG+w8b`fVJCOqFsAgeeD4F)}oSfBpUMsH?8V(=Wd)Yvi z^Z0tLPKT%!D`2r$6zc;|h$1pvS5P3^zv*mi^V|C)JP*6OCBVT1i^T%t;GnE~T%~W! zasb1_{r)Va4?isH`j+~7MLz%!Ox2I!|8f{Nwt6AFK--3(sI(M`9uRsaT9=@JgCiVY z7JE6!6}UsSEB4$@ij2z|Do9DeZka1nt!6W7tE>I`?g+;b05mAW@wwQvZQGKD&x>s@ zF*zAWe*0V5>&mMyT=4sQTheemGAat0Yu75)){X-QWZ&m$;Q?P`ZGJv}`Rc2(v-nJd zgQ)rLyCv)Ql8hW@W@qDxU;PTE!9i4>Jc;JU#(7mKJSEMuue^d7nNdhz0F;l7jf=z1 zg9qJK>~M!OUw!43%oHQeRBi?JXD&%@K>>jK#g59396{MsbkKU^2D&>sFtR{|6s}TX z+s>VMu(Z^xvLQEWY8201;W^HuHgh*_L~cQW*MxCIQY{S)OOpRHv&@N|^Ybc)^sKD; z0xc|@9{4g14#H$KqN}}q)-^G)u}DZxmhA{TC62<+o1UGGod*x1x4RpYQ)Pa2iHT6D z)d-7>#H!R(uj~5E)s`nd`DDp_(wV!*_%*7Ej*VT=w8ZFih|%d35%gSCojQd{o6X~O z(sGF7i~i1yqW*F8sK@>HA#tcjWloetj*OL;N~5p48<)?Y2MNLm(lj`TFFyPbqbAeR z_MZ^Yh4!oRiDN8t=2ywD^+b7jQ0{Epefu{4@&5a;2EfL1WL7?oA9Ie=)~s0)(tPr_ zzhSViFX%{f>C72a2G*K);`eYoJuAyE71igOr;5)$3yQM*Gtp2}gNtX+!szE^J^?w7 zGhwm7G&m@G+{IheR#u|&+Z&=$%KKP9(3KljjlQSOK<_cB9yzIk0UN=FHJ@x zu2ogx+El69RjH}aB_$z7tHp|#7-(0nbgt4Z77X$d zXyf9h&qb-#&?P0gy??N`cX|!@Ku^y!p@SNMxXPhNuSbtwACU68XENcQ$uviGHX>9Z zaDbiXIK^uiGb~raaNvS{l>@`l7%Sk%)KRuGJ%c>WBTTV}sU8N8qN*v!nDK={W>6IZ zH2@iWt9ck0Xn=fel%4)4+)S2GF2d(XT)Lf06fowESDv~41V>FnUBN3 zoMQ$*>Kp(NL_h-1Q!pQg!80cZBJ*(=ybi~Cuqg)y8473W5CDk0AcWFh1PqHIPFNTK zh)mHiEGnvEX%!5zqAI3w7#5{*7#J9F7<_1_rt)!?P4P$uzd1M*j*ZSJrOY{IV9qgv zPi++dMFZ^CSk|D@74bOwlSUb+baR#r# zaW?wL;1MRw=8-U zO{O~2Um8 zN^dt@y?Uwt?%jGOA_ixuzj(32Y_ZgRLuo%Sqg?Gu;Jf3;j;;RXYp&X>6HRPbgC6ARK@%D{RhW!Y?WRplV)OKgrp7vrQ1qNA1vCv`%!gtbSe|; z^2M0R)K!1!(l?h+ojMy0Ts%*y%Z)XNCkq@NB4m@5=eHD=lx#}R$;paOO3G44M<;{L zst3PGvRHe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00DDJL_t(I%bk=lOIuMGhMyx1 z6}yx`5#rE697BqWxJU>60bTnClv4T=@(YS&4Nj#?K(~OPrIdz15j#{f1VlQd5NP2R z1YLyoaXD$P#~UNw>74g{&-=aSJ0BPB`Kiy)z#4D{ z`~)t6dEl*j5klBkw}A!VTT%5B^@sZUmV~ovZdum@TO}ORiY=>Ph;9a4qF*5rlUzM?mw%a#`G&w8*xALuP^bvhdFUa{iQZ@*mgAN<*=HX z0ZgS8LkKItIj|bV0ayb50B>^AzoW$za0on9t2x0Y@L25w$G{_?8$!rmvs%>HcL~;s zcoxmlGi|k<2b$_2Mjv4%^-w)f>xn@vnlGo$1NBRSEvG}Jmeud-ZqXb(i6h^;QQ^Pl zr8-oK`J0XPiyZkH4Y9q$ZV!Bu3^jEDdb21%W{HFi_ N002ovPDHLkV1gB`(YXKs diff --git a/kratos.gid/apps/Solid/images/Black/beam_example.png b/kratos.gid/apps/Solid/images/Black/beam_example.png deleted file mode 100644 index a63274eab7d605a0a82d0edfc22d19d236166bea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)=0Zjnh1$x(qO=GyqzhC;7owL4ilQjGJ_m(e zA1X@7A|jN^ibA1_R>Ue5YhJ>2bM3Oq=3ZuJriZNwQDZHuhxWic%=evhe)FA~|2ZS< zJyoLfk4)qrS_~e8$Kc%^g~-*PCP(9>YC02B$1-Y2JTDvEc)jg}lrWn9hv8vWqpaj2 zSK3@mS-pc*Gt!uzl8D>u$Kwm|vGqOeegy!jkEIcQ)?UqV5;sfBcyjG*m-R`x1=yFZ zWqw8ygAyzRf(k9(PMVrs_=5_fC`R=ly~1TlZ8K@x>}kZUZv6b z+SpG{PG)@mM&{48lan@*p;ik{x0k22bp%4;9;?wKJi%h3=+I6h`J~(emakYzP*D*D z5CnmCzk(+y@UHe5FRm8h^ZAVUaT%FRSh|H(b26Eeo`|RFCcr_1~$#JG1ZpJ6UQ4$ zA33_iB~hTIBgENn@Q8 zfH7${W=>B3rADG^I%+74Nfue0w}>VAd3^p7q}KTsN3$2t=MH2^jKD-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Muv|vffe)L+@3!7X5)Sx zPifDU?VhWBZd=S@T5QDMu>0sm#$T$%JWUCI)fkJE-#0FGy~Mn2Uzw9<=aNU#&p4k= zn&dw-jCnF+@_G9dhc}b%G^}&~lr&4laKmShqz6x4ZJ!`gnU<8Ua#nS&YOc)mY@gDb zYR|sJo@Ud@5_*vIM6zJ3N85o_XWEx7cbnvNUPtNvp1N@UbBCH`nf6>f3G^0&r>mdK II;Vst0D_Qn(EtDd diff --git a/kratos.gid/apps/Solid/images/Black/boundaryConditions.png b/kratos.gid/apps/Solid/images/Black/boundaryConditions.png deleted file mode 100644 index 7a53439e5dfc77a9560a44fc40a5f60bc7332481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu@}G$@BXGpwJah7sn8b(`P5|aY)0&9vbHfR1N~^xMPI~R5GPlV|DBr_R zwIS|p6{CoU)$7|X3=QlJyF2ETCX2tH+mOf5XDPZkP~gn1!K!_l4vllZSMW6<3dUA1-1BAx{o?H~0l+U0U_2E(lUs+YwLtbdpMzJI7lw>X|5 R>@3iK44$rjF6*2UngE@MdpH09 diff --git a/kratos.gid/apps/Solid/images/Black/cancelProcess.png b/kratos.gid/apps/Solid/images/Black/cancelProcess.png deleted file mode 100644 index 6f0580957a8bd6528433de84344e100de1f42522..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1526 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 diff --git a/kratos.gid/apps/Solid/images/Black/doRestart.png b/kratos.gid/apps/Solid/images/Black/doRestart.png deleted file mode 100644 index 4f5a443ac692102bac2aaa2ac8cd8a1df8d539bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu?M#_aW0FpwKc;7sn8b(`P4bZ(O2!yDIb&bhjq?RUn>u32+mc2xb}Xr5DZ WZ~d3Om4ARPX7F_Nb6Mw<&;$ShbY&s{ diff --git a/kratos.gid/apps/Solid/images/Black/folder.png b/kratos.gid/apps/Solid/images/Black/folder.png deleted file mode 100644 index 9b967fc382f65f6848cad5df68f8749ba232a7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu<~D@u7sn8b(|e~Jpftp zS*Fyunz{PYo2~{uhbdWNW}oX_l}=vrl{wgU(@$wZ{I*x+mm0-^Vh8{L diff --git a/kratos.gid/apps/Solid/images/Black/groupCreated.png b/kratos.gid/apps/Solid/images/Black/groupCreated.png deleted file mode 100644 index f174a291e789088edc659ffd0e1c1e4bd421cb72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 zcmV;(0XP1MP)g0aZyv zK~y-)rIfErL{Sihzp)BiM5|?!R*M+?k!*s+X0g}|wrv)(e}L7Z25rIyQCQ3yL|DuV zDkuoTy5+OnC)dmK8N6_LbMKj%ch1bbhsu9f{069tz-o5&1e`_0d+9q-6Wmruz%?+F zL2JN^+Ha(#Zm6H?MuX2$@@du5&p~xt-EMkWot$f6B_iI{H{cnVRtH(|BtS%50=Mc( z$zqf-SkJIybyn>q`>n#&ah{~3c9OlW?q^sPoF^Wn=TL1|a<-BjBH{|zR4>#Xa05J~ zU9MALd7^fBB9?$X;02firhu-xpk4sy$#uGvb5wL-kfcp!_I@F2sJ6=i`|d)LQk@s_ zI%W5t-z|=aN8nZ6N#~CrRACpmFB0^DgEDJN9aqzu=nv99EPPMY;a_9lX&C#iI;tJ} yf>A#u>sCciMI4t6X#5pa%z*jovxtbhI=?R&?_EG4ml`bq0000K8=f4h63`&GyEKk=s{c)6Y8%brlA4mzZb^>@TE5sb0~g!8G}^>Fdp`tPxkv zbt!3Yn*D2f-fvIq3qC=TCjM*(^O^-uJe%Km)6{~$Xi@0HCl$3;ZSqQ+zBVcqeKHAq zDpeZwmbZ6Lar`!~zgv#TdZh99J2Rbo@HngTe~DWM4fGF6Gl diff --git a/kratos.gid/apps/Solid/images/Black/meshingStrategies.png b/kratos.gid/apps/Solid/images/Black/meshingStrategies.png deleted file mode 100644 index 194b2797684b2f2e35fd396043a865b047606944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu<~JAWY~OP-u^*i(`nz>9dm+`Irm^Tp2PhYZZ`OVC;7UBvbRmlrjnLeE86Mh`P&|~@3u%7?uqk+5)p>pfQb|#KkBR$ spP$`hsQF_5nqBhB)(7}Mf8WpWV(Q#tS@s9%Kz}fJy85}Sb4q9e0DKZ@Y5)KL diff --git a/kratos.gid/apps/Solid/images/Black/modelProperties.png b/kratos.gid/apps/Solid/images/Black/modelProperties.png deleted file mode 100644 index 5bd3d0c2c04e9b91113d4abecc502115b1d646aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmV-O*)!`~^UXJFuMsn2A($N-8m6+mN^LO=G<(;y0n9A64NPO*EIt@uieZEx2m#gD zw{z$HJlWeVGFDl$pZx3{mdk6=ph&c=iW(r%uv!GGeJfxg#I`DCMo_~vU>d*_RRvAa zpct{g|Al9fUmyF}20j?5U#VGiAOo+qbHK3PAJjGgt7<)XngU7)0Z=rgBuldk_)R_s ztOdt=T(HQlDnT4#h7(5!h8c(xLa>_o3b^WyUX7aOa|4oS~AC_{8Tcu6pfq(CCa>oM2|? znj#n~LRZ&jmKIl7Tv}z@1HF9zmFIFh2j4ox!1+-Mg+|h#ESHyXq^K&QLV~#H%`JP3 zBUh$! zOKQA*^aS5{WIToG%1l~+9;$!ADQ5f|2n}tM~?H?!E5Up5Mg3ufxn)2q#LU#gT)dqaad|xEsk)hr<t)@NK=i0 zNDZ7rR7n!&@ZNKJdX60(n`!fo``cSN)3gbz#3Zhvv4P#)F+?t_aeQCYEVjJlUOjO zre=9>b(Ii|naNoIu6$bhYyi{Gc0>fM-kBt5AkAp49tA~7E6Q^DCLs+mWz7==s{_1a zJrkYfIaOphX=-T5GJLQQK}ln7TzemiccNPyuzKUSUJB}*kZ8YpMRNP^?xCf%KnMX1 zDVi!F%PKY1EZfu^sCrq;9jM-?YO~U;Vrd2>^$fiF`T_n2Ef)TUs_Y9`00000NkvXX Hu0mjfrEy25 diff --git a/kratos.gid/apps/Solid/images/Black/notched_example.png b/kratos.gid/apps/Solid/images/Black/notched_example.png deleted file mode 100644 index f1237083bb1b4a07b89d10e01d917f7cdb0699df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760 zcmVlO^hB0UeF5%JsM-YnfON- z6Ac^;7Yqr}5KnrL7)Us13_<0Gl@?murO?uL7uxR5j)ygiP*lQ?ll`71vpb*fdvD&% zpodQfVBf^Rekw=L(RWL4t1H_>I<`jlIxpqt=L0~)dGP!FV-quzva(A$GSBMUzQ@Ux z<)ZRqg%!0Ax;s1`kM&159R41hdovNn z$jd&1=znZm78^v@(rcVuKn!cfK`AwtU>kp+u(ZkBdgq2u6h%c*L{WUyGq~RGlv1K= zl+rEf<~(N?%rw^X!5oV@YLK`*KluEK*XzA@^R~m`U>IgYzaKx-l3G>bQgAgMO(mn) z##@wa^#($mUEu7(rucr*OOKQR08~{2z~`~|N^Fs68YLRhH2^?adHls@>$7U<#JNUu z5Rqh6Nvg{~Ruj>L96}7jHl9I|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfBW4*PNnQgLg;b!>22U5q5R21SCvD_Curyl?0I&HC{DnX9g? zx;68<-r|j$3wU*O_^wVrE63r$9pioM+eMbM_3^=J~67 iCYCSWI)9Bpdj7Xpd1Y%Zgxm(Yox#)9&t;ucLK6U}*lkDv diff --git a/kratos.gid/apps/Solid/images/Black/rod_example.png b/kratos.gid/apps/Solid/images/Black/rod_example.png deleted file mode 100644 index aba87579fb1ae94abfac20ef05b06fa0d35c5c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmV;41a|w0P)lgj30kb2t{Lhy@CPK!!W0AvkSXh98X8tXY;Bnc-=S%2@LPQpYBp@C?*a`A2&n74y;Q)sN=Xst!IJVZyYH`l=_vzm555Haa zz3aaJm+)rQL7BURg1gAQDG$*rgDzK%FGfX?9`|iZ(;p@?eGWREj-jC;-ut31_?7>- z{}WuT4OG`QA`1dTUM~`mY>o)7+~MdTwQv>34}4BavK5cpO=EK_Mx&9~P*ZS^-DXSS zXGaHWt(Gp=4R+Mj@ze1dPCKtr`NB$Krc9x_t~KCtVZ6^Bjt)GRFCa@I-o74mA)$z) zUJ`RlsCs=J*L!=Z`K}F5zc29eKXUryVMg7(ASghV&_~?Qf$EPi8jZYNeI&T8HaBkx z`pBsW$mqi-la!v#>J3|PI-P7STSjcODY$(;JEstp@jf2UTTEs7N}kBirTpbrIrT#e zW%hh*=Ew=lmGcXWEB1b)@*!O2x@l-CeX2jF+>lH-59GE-*GqbXuuyf1b7>`Y45lrcCs z$hI|0h?_Q*Fxz9iSYFOo^-YxIWs_x@`u`u9e`C<+U{Y8Z27`g6IrFi^M@+o(aW38LDL)lsPhjaO+%@dLyzdgDf%F*NZ}LLLU}|>>uN$S6)K_ zCgt))P zsEHtpBL1-v*4lGen4Jm00>7VzDe;KI9=>&4q#z>=uh+}%n>PcSUNw`#QL5B@bN(^_ zeo11c#X_Rx5dd!Y576aw(%jlfZRgd%%HvYzp;W19uRlavTN|GKe$Jmehoj-}op9gp4o55X1oqp@ah$jvV+; zI3VR3q#P|-N`w*!!AXo!Ac=v1u?!}0)+B4=AL}0*&+g3YDh}Q6%{<1+My91!zwVjt zZ`HS|tE$D_xs%*aeee;hy*{JOaj-Iu%mLgz&mG+Iw|nk5;D+N^0x-<-+MYeTIP}nF zk)_pv|NQym+`XGYT_m4uhKuCG%rVbkqoVE5^f3HFf*_UONNuzk3Mq* zdEwL|E4A{)t;8g_}DW$A^s)(Q7yhE4>4d5s^A)v`K zyJjRpnSCC42^g_L|`zX4iX1UJwav8qC}%teW!LI{Ok@@QUfa$Fp7$6b+P?Ienb zW6AOk2hb70Gx+9BUFNpTUZ?kJ=y4m}$l^y^K-A)U5@yaz+ zmE;cQs49`5NEiZ#n(FKy+0opPWZ9d|ne0S<@}uvvL8aOE)}_mwc=0vNjIV#^5Z~MX zNb}pp^A|xB(R@2h0;-ZVuDccnG{#I%$UdMU_fEINb3ZuN0tI;I^j`>MZQgn9y_S9d zdgen^Km|}mRM4907Pz+8Bn$<4;>baEd|_(Lj`O?cQBeZU&b>Q^0$o}{M6v^mBAU;S zqJdDTZentAu6pdwcInK{Ff}p3k@<)2=|JB<@EEfjH{k9(xpTf*f8*ufA(C%HxdbGH zC_&Jm?W+X1IOfKlgS*%D+PZyn*L-V!a&d_pH|`FBRkQOd<6hlpE6!6-9^k;{joeSW zW6rOSzk!Gl0=T!ej;e~r*rYfqQS0y%`}p$QEce@f@zP0FdwoO&F&eGw9Xe)^2 zyDuWdFzVF~=Pz91oEui<#J=#QdH5W_zdZ3esU!}ylD$N-mMTb9#saRYN|?y0Q74oj zf{LjI0&_*l|qJ&JpdTq0-`C4|s)nFwr}o8{QPhv`mFb9;G( zSO54vOKSrFdgf!Gf4FizYg(eHln;p+Oh&@16eo_NLM-{%N@mzMzl~{ub01tnM3~vo z;myDOla=Kaj(%-_DZQpokvR6vgUO#8Hvjp2qJ7Pv3SdtP3(PiC(rEP z!(eT|pg&;a)MRtkzk7X7ymE^EYQLpvtEmpP9w95=;}~+HcL7zd_Xm7&Y8aPazxXk| zm0m7yO40D~>VOl!I^BSloHrC8`Dgk>{NL&ljQ1Bm;qt}@NakEwzQuo*u4M+c%>nTC z-NRF7jitM3t;O9`fC_^5m#fBbHei^aof~wKQ7y+iWlK_)wr4$jZZQ^dSJ?RRNMV1JC~WTl^R6xSq&^6Da-w0000-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0ARD5^By+fVLd4lcOX`a ze*w<})}Uo4Smr5rFFDI|PpKg`mBsm$(cz_nj7}f;HFX_W<&QoVR-O1*UxC4P!ku@G z8| zZM3rB&egBZDx6f!7W}!U=iQ=J@$u!SIuEY7)hMdYwxjFBhx0yi#l{~eR6Q=WQD8hf wul~{wNzMx?wzIZFVdQ&MBb@0R4t-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0@KX}$TpwJah7sn8b(|f0E6g;fJ<2sdRf@X$s z!}5Zej5iJi@A$;#^H9k+AcZxJ!Cb$$=6GSl+hZXLOU_@vZtwCg;s969-Z|;ZD=s~n z-=Wj6|I;UqC7V2w4+m~!v=R86k~*b9vZKhsmN8gNTI2$=Te97GO-CJplK-b9dR=FW zdDxn5Jb2;-n24c|;Wr+!pB5awd0tFS&tX9MHsz~8zH){3lmi;v!-yIEK1)5Rl^ zyx(-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0>?di3rK%qsRE{-7cjsN0{|_rN%P S^8ui189ZJ6T-G@yGywo>?qvi3 diff --git a/kratos.gid/apps/Solid/images/Black/setUnits.png b/kratos.gid/apps/Solid/images/Black/setUnits.png deleted file mode 100644 index f9d1915052b4ff4a2d89939e57ad3838e2265810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu<~?eOvJbpwMPd7sn8b(?=(7C=coIPEN^}(a(b*EO$YD#e{fAD7KW2wal|3A&H*^#9yXD}OMo+VuGO{?nJv0-ev`>FVdQ&MBb@0MS=%82|tP diff --git a/kratos.gid/apps/Solid/images/Black/sheets.png b/kratos.gid/apps/Solid/images/Black/sheets.png deleted file mode 100644 index d1d70413c8877e177e24e57789649cb6c5be2a48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq}YQL70(Y)*K0-AbW|YuPgf_W*H$)%jlqEjXe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Ey#L_t(I%Z-vTNL6tZ#(&@I zYN8e>5hetJgNq^lat`)s|5#3Lw*6AU(h)&;r_$?p=b|Uh6VSkL`x-&$icd$N3LPpY4yfx3iE+O4vJ+ zo|Zv?cfd7Z1h@c7Y}bK@z?kj+0?u7v9vA@rhBgznYrrHhDcc5Cfp*DM4}jZ119&g# zb!stlz)%7l0gLg&v7|q#ai*fdAaE7<(1C{k?Bz?EN0sH_CW1L^W zPf5*aG6TGbMz6AhUbp=%{CXyLE9F12y%i@=%iB!D_FnjJG6&f49|zz9q>?JA13SP; zgw8i8=_G1uz-)wlI|B3oC0oBLZ?FWePI9q002ovPDHLk FV1kGi=C}X= diff --git a/kratos.gid/apps/Solid/images/Black/solvers.png b/kratos.gid/apps/Solid/images/Black/solvers.png deleted file mode 100644 index 72773b5db5c6fc90648ff7ed7a583943b4071c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEUAkcb$ibPmq zqwXg`t@#UdwDh$;u%0UFl2Hsd&|O*6ed0dgVonl%6M{8|!y1*yv#-alvxO*V~nAV&&wwM@{|m@V%x| bTvp-!HqFZFZyv1AKmqCL>gTe~DWM4fCX$=^ diff --git a/kratos.gid/apps/Solid/images/Black/tank_example.png b/kratos.gid/apps/Solid/images/Black/tank_example.png deleted file mode 100644 index ae08e734a537fdf737bf94d28a4510b048a98477..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092 zcmV-K1iSl*P){1TvBX*L9s;Z(W z3I+*uZhXHxj;JwHD#X;r~fNT{AIcdELBf>BwNfNrRR=jN!)h zYh3yK6V_L{oZmP`QB?E5L7;HXO*T7t4%Z$fJVMNqa@J0)sj3QVEpZ%^Bne6>oOe8T zY7N&k^Q{&_P}a=^2pFpuV{V5ErQlHYBg&<0yWzd3EK7tCIOo_K7&h0}aL&&w_TJOX zFlslORwtNOyli+5sw_)ZS9^E9$BP3*YeiYrkDTB6%>@2G zftG=nW=N;gVYXSa1(L*3csMXlPPbez4?6Z(&IHUX0asV8VzDGL?Tp8>Di-Ty6QrI1phl$tzJ z1}z!dbKE$O^MH4_#^Rf1Y3KkH*#LlZCs!9o=1<>#!SxF-v)+ptn1zD-oVubo%J)k_x=a0#NiZh zpd?aCbRZ@~0tHG4#MtXdx8$NIq1WqDmL=QU+thVUo|oi##%EW4Xcb3s$oZGf^ZfP; zm@FqvGrsxiOMd+RJMuiIX&SODV>B}4dBz|sNKMWC%rMMLdP&6DjV`A*`)qD*((m`@ zyw+NywMGa}uh(f6FB%GK8>+I#dx!VFjXWU`<6&gHoG~IV=Dy|mpzS#T0000< KMNUMnLSTaDTJwqk diff --git a/kratos.gid/apps/Solid/images/Black/timeIntervals.png b/kratos.gid/apps/Solid/images/Black/timeIntervals.png deleted file mode 100644 index 5555fa5d7a2dc92475bb3e0405afd0c90652e641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu>}jqg=;J1_nk(PZ!4!i_=@DEc9b`6lmM8n9&py z-Kw!{)xkz9$DotaCJ#dcA|@?c>8N1X5gZ#W!{mEzV#2KIMtNiLZ+hEjD_NaP%P&{E z|7O2&b%D?1EfYj0Z#;1{ic#qAW;QJbdz!tv{p`VH53U2}ru%okzW03R%-ZRj z*ge-SNj+Bo^j|=eiDkp@c-z3>Rc^ryTjYdQYL{HK@_aOpz5D_*L-vEa+v6H$8*&_2 zo?cUuX~<}!QYbj1wEHq+%B`;~8(8Zab~7?O5c;82nqiUf#p;IJmhi=q|8khFq?JwE zJ^9q_nxKX&olkN!cei!veN>uwtIzhxCFU5W?FTG3u-`kAQ@Z8;G5y-zFL<;jF_eJ< N&(qb-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu>|??Mz@INV%trV~EA+ty6UUSR4gf_aEn+P~B|F zBI*5rAKyV3=tJ(t(7`W0Hb zcU4<**W0CU%_L9HS<9u6t7CpZv|&m2f45EF0$eW;$4#6sP^R8IoC3gj@*|ycT&YpU4 zhyLj=ElliMc>H4J)F}rPChuC%@53bysPYPZU4x9aNSS;FV#mHfq}r_>FVdQ&MBb@ E0NKNjt*v5{GByzl1?xb%bb<&r z3N|9aDpjh)B8XyRC0Gc$38aXEQBRsXFids@5B%KMocrH7b4N6Q?HQmN;g+P;de1#* zKz<8!OPZ221$0O5KPW@00>wy;OZpwPBCr$rGhk8DVfw~*wm;c!inwCCY`Y~+*>+#p z0o&UNHy3sicq8d1;&Wgq{D-MYn}Hfo$~MRY9k%lk7l9YRXGy0qRT&rt_JAL@-%I+a zC@x0v8}JKg3+2CO#2o-$0$+hO;B_uF+FxKdM4AIGZFglvzXV2sKfp8KRnlMrSdDjm z4m<@0fs0Io0#E^FflW#4Ioqv3JJ1td6I6kp;Xev;(qKck1?-8#1e1| z)Fh4At_69%-uA87zRsNE)b~HIy~16vyHTw(vuP3+H18PLd}70CB$0!A8^f6951J07*qoM6N<$g2lJV ARR910 diff --git a/kratos.gid/apps/Solid/images/Black/view.png b/kratos.gid/apps/Solid/images/Black/view.png deleted file mode 100644 index 84569e82d3cefb2d7fe1534d686e120de25649db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 zcmV-@27>vCP)>Oc7}`HbDs0$$rUTD&e=J; z=RY(5nb}=&ch;i&rRz7@y#Ih^a~v!`8)E=>Ph$tS^zNQI4!Ges76A;iB-_7#f}@WQ zi_CAf{6{}|i;ay0>LTgSX1GZDnK|YOtoby+V@zW++?{BSTf{Ab8)gPpV$pDt{9CUc zM}B^3%0KzwlTJ(BlLBTnP^E-9SZvFqc^9ymb%K{AV8j@c^|7Q_UtJ^ggc`63P6%l9 z*MDqq=ZE(Rc3Y0WQ%#ok{=|i8Nnd{>C zspt1|`h{os;EN?LoPD4B>syJ}io@vad3qP$`|dYc+}PyJpPpfDqlHDQd9Hdi$IDiZ zg9uil8kC~w?Au4S^ZMbha(RB4_ujcks}<2g2_exEihvf%?A0%L^VjDX{Zb#tUVjk< zG$pV<+9a?A{r0`mq4MCEUsElZw~`1+*!Jl+~bXEB`ICZr7MVL|9g+2okQ7` zmaAAQNUEB+6^N<`PEonKYQv8Y1F*WZN+?1q4lymZXvvK+fi=Nh1O!4ZuNo8=$J}a{ zn}cYIaup4P5NZyWZ!ISUb`96A3Pq@0+;nv<3yMMwAR;Ny1VU)=ElK7GDpjBaP2j5B zZbkM!xvTxt>U$ADyTSVhdYK#=WNmeg`hSvqQYlm^RdL-F)u9MXFD!FtY$v__{q1PZ zX;OhB?NoX88_%+4&W(T0w5`qaMdXoItE!?!f#g)uqTsWuHv#z0vBOz=?EtSVmJoRQ zg#(<}x0iq4UFX4rGRxZ_(nzgl*Q8M(WUf_}7$d)*nr6Jemp5K{k)g329pDw$&mVt| zQ_oETFgY~H(U*@Pcx`nJ?v4tO`F8|)dwRx~Z>_X9dcb2Ud5`UUjAPI2W4yPAxvdu0 z7H{M34EFUgIXuLG3J|y_*iQ45=)2bR(+*KS9(k39G;igBVPvawh`NKs%y}RD^Y4nNF zE}1@jx~%uW|FgY)<~%nxwmM{64~+rTEvHPh)GZYdqSeKuQp_KU-j1=S`J4A2@XopS z`DpPD*Vi{WH#5uM&i}pJLGRu8kFTuW%a@0oyD?&|TxF{Kjaj*}?8xOR&#f%eI2%${ z>zmap=W~paqHo)_e8SJA5`!|`dz$y5bSJV7>uZY4IxhkbH8%&z-pfI%hsQ@480^m$ zl~~p+Sz-C!WHnG#PHP3K`&7PPH7W4Y>yt@Miy5cCe}ex3g!j6BVzO*P00000NkvXX Hu0mjf&J-bp diff --git a/kratos.gid/apps/Solid/images/CircularTank2Da.png b/kratos.gid/apps/Solid/images/CircularTank2Da.png deleted file mode 100644 index ea5b4f190a6a32eb6d804001c72643cc662d8322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 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 U_)ZB2{whFNBMZ!5=sPk02UnE$0ssI2 diff --git a/kratos.gid/apps/Solid/images/CircularTank3D.png b/kratos.gid/apps/Solid/images/CircularTank3D.png deleted file mode 100644 index 6e90a4f8aff082942a128bedc0678e300e5f7a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4886 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 U&5f0?DAg+kU@-)Aom&X)Z)`2ClmGw# diff --git a/kratos.gid/apps/Solid/images/DynamicRod2D.png b/kratos.gid/apps/Solid/images/DynamicRod2D.png deleted file mode 100644 index e8959dabd06ee4e88fdf246feaf777df835057c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6963 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 F{{z1Y{`LR> diff --git a/kratos.gid/apps/Solid/images/EccentricColumn.png b/kratos.gid/apps/Solid/images/EccentricColumn.png deleted file mode 100644 index 2b03fdbe667a9892ba6e0d7aaea9e9fc23046364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2880 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 pzP)o{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*mfD!lo`@oOJHeqFoz;QYDUnj07Scvf7y z`k<_MdPZvR#Qrsgy2(!-zuL9)G*JDfYnK#&+67C3{DOg86u_Xmc4iV#GS${( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kD|KrE6KAsiVu0AL$p1yYVK||f-T{};oIDSo8 zKC-!SQB-*IlgF>@t@9@KubDr0TSjWHQ^l0sK<%ZTE{-7;w|Xvk^ED{&uv|DN!qT<> z_xv!eLx+yIm>pRBa!JRZ=&DDSGr!3$iCUY;E90MFS-j22ak|U?Bdp9!pL~6UGYW2f zkIrgVcoyp4Yq3S7K)UwY;e}hDnr(VgaN&w@^;Bma&NIamZYk_bt8RAKU;jubfuW+7 WDe)uMZgUgULs45r&UR_gCdatg&aezLAYG~^1 zr}ququdJ#@*4D$|$ZBL=L1A%ccOSG8PN8*!ib`th8W1(8S`@mWu?5|PAyd1WT5ug? z+WjFmq@qe9Q#3YX2k$fM(ap53-m>xvIHGoYdmG=@Ay=p?VF)6L3ahTEsjY9p;;EfI z?H!cTG6=S{Ex!Q7;R#XojrSnXIux40cR+6#sYcZH4>A-gO&gIs#Nx6z z{MosAtE?_N-Q$L*SCKrR9|=(+p#Xm6e^hYPG7=+OhFTkw~o74=a^wl}a-_I%b?Q zNu)9!U)a^tXR$0oDk{Zd$@=;_pD*O_1WY#9Xf$!S0=ZmiGMP;?W?)usPv3w*Ae^0h zR8(AwClI%`w;cxsLJ2S{=ix)MLZO;`FlD#f1wzrwmmBRw(&*R(iA*z_=Y&GBL@Jlb z6;xUm7K>LXRYI|p*41M)PDy1747Rng2{SS}ArMJsXXm&)fz56oqz|DRTa44D-u^+Q zO1rbOo0Xlrx%ryGWXlvPJfU5!)hm=53azWNyLWJq&SY`8JRylpO-s+@@%Y&}`5LWm zZEbCJ)vDI$usA%AFM4R6G(7{z=I}HcU20ke2GdGsFee@u zhnVak7RR!3<5Ji!z@6{K*6Hj^%6J z?z*ch3}%be9wc4zak?X9Odda-_3_bE2`3Pnn~)Sd>i&Mr48}FYlNjRC@WbS%3BIM& zN0`NVx9?Mu&zQ|6rIKEMm)`1c5Fi8Y^Uhax|5IMS&;eBpMngOa;Tc{9zgXkt7Z`hS zbmes#atnz>wzt2!wjMJ+5EqMJA1Fk6lBgBb`Y*zcy_j=C#`T3X|N2Cu&bu0Oyz%GA zX=EY%Fnqqz>-@VnPhydw*}mcF$pELXJ>$MQkfE`j2ocU-T=##QdeIHrfJPfSywvLJ ziRaHk&OrbcYv_{E^jq2F5@8{;SQ+&5hHX;G+|)yI>C| zVA_l5n>Uy87gz2+mpBt3#y{NAeK=?QH3Je8VY)oqLd`h!V=?M;);U>f+oNc-7xKt_ z?FWZ}S8h^9qw=1%W8F<1l_TD-2Gc{^;VBfOf zhB6=sn(qI?o07$hjT7O_~B0m$gcjQvZcNAtM$ap+Xq6E{SMW)kS>HK0uN2E;N3PYmcRa; zQojG=9ldU(E2#g^N}prpb+@q20kD? zJlKhh?>?MB^o6?pK1&)xICapx5fyZ>iFl}UV0`M>Ny=THgv@|by1)-Nz?W48Wg#&* yiFF_Caq;T&{l1?+^~?0by5egfcJPhW!tpD0!;@ diff --git a/kratos.gid/apps/Solid/images/column_example.png b/kratos.gid/apps/Solid/images/column_example.png deleted file mode 100644 index 7be554b56e6f01fbef17b662eef12a81fd9c74c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmV-Y1FigtP)-bO@0EyQ4@ zh}cRx{}f_yvn1I~?tN8)j|aN0zC7NvJ8+<&Y#`g9$xm=E7vB=rk8KqK*nVA{d?e_P<9mkIYJw1)*d7Pe}vazv2DwX2k z;DAgf!@|M>uIrM^<*3za_`V;h^&fJswPs*ofR&XME-o$rP)d=>WB_=2dcwAC#>U2& zn3%x#eQLE@WX_!^3J=2&DJ1|>N|aJv)k`U9x7!3k@MYCo#0+B$-wi7+u+|!_b#K9i z5C|dAT4Pxjwr%&e@(!<3N~DyrJMjN<9@WYIO4}XB=`H6%h^~EhIFCy~tje|4v|25+ z*5Bejw&32+d7NDy8~mTP{k`BE$N4v-)^mI9@ck1Hu;TD-+cw4+q?9BQiQaNCz3 z1S~Etvb(#>{QUfHxk{;@<6KI~=;$a)DZ()9Ua8mD*HkK%KeTasdrPy~j5Gz#XF^j- zvAn!Yu~_8!`I&OL%+=Ku)oQg1aC39R<>e)fMgyf3#+XRUMttQj^}WgXzK?C&D5VI3 cAl6aw3z;@p4KEIlB>(^b07*qoM6N<$f^L?WK>z>% diff --git a/kratos.gid/apps/Solid/images/conditions/arrow.msh b/kratos.gid/apps/Solid/images/conditions/arrow.msh deleted file mode 100644 index 1b1accda0..000000000 --- a/kratos.gid/apps/Solid/images/conditions/arrow.msh +++ /dev/null @@ -1,53 +0,0 @@ -MESH dimension 3 ElemType Triangle Nnode 3 -Coordinates - 1 1 0 0 - 2 0.625 -0.0999999958 3.47613295e-08 - 3 0.625 0.0999999958 3.47613296e-08 - 4 0.625 0.07071064 0.0707107146 - 5 0.625 -0.07071064 0.0707107146 - 6 0.625 -0.0707106906 -0.0707106655 - 7 0.625 0.0707106906 -0.0707106655 - 8 0.625 0 0.1 - 9 0.625 2.32452946e-16 -0.1 - 10 0.625 -0.2 2.34324128e-10 - 11 0.625 0.141421356 -0.141421356 - 12 0.625 0.141421357 0.141421356 - 13 0.625 -0.141421356 -0.141421356 - 14 0.625 -0.141421356 0.141421356 - 15 0.625 0 -0.2 - 16 0.625 0 0.2 - 17 0.625 0.2 -2.31773376e-10 - 18 0 0.0707106781 -0.0707106782 - 19 0 -0.0707106781 0.0707106782 - 20 0 -0.1 1.1713931e-10 - 21 0 -0.0707106781 -0.0707106782 - 22 0 4.38538095e-14 -0.1 - 23 0 0.0707106783 0.070710678 - 24 0 0.1 -1.15863951e-10 - 25 0 0 0.1 -End Coordinates - -Elements -1 1 15 13 -2 1 13 10 -3 1 10 14 -4 1 14 16 -5 1 16 12 -6 1 12 17 -7 1 17 11 -8 1 11 15 -End Elements -MESH dimension 3 ElemType Quadrilateral Nnode 4 -Coordinates -End Coordinates - -Elements -9 8 4 23 25 -10 4 3 24 23 -11 3 7 18 24 -12 7 9 22 18 -13 25 19 5 8 -14 19 20 2 5 -15 20 21 6 2 -16 21 22 9 6 -End Elements diff --git a/kratos.gid/apps/Solid/images/conditions/displacement.png b/kratos.gid/apps/Solid/images/conditions/displacement.png deleted file mode 100644 index 0760c9778d4869f0dcb4757df9eecfb4f6182887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~j01c^T>t<7|MBBjAJ2+wS09uW zPhY$GprLN^uAQe(9KWV4AKBcvC@Q@9$>Ue{)_D{A*UX>0EhDwpsbb1*pmxpzkH}&M z25w;xW@MN(M*=9wUgGKN%KnH;o?lMYvHS58pisG|i(`ny<u-H)-R&tW#gr}`7IS$L6naAC+yRTqH5aDGUnuf@^Orm8+{NFrG8YUPnBF<`luT${ zzOC2h48t^;!;gk8JwCQ(|+VEa`)~Y(cnDdkNzqfzM Y+O~vgO1FoPHqZ$Sp00i_>zopr09%}K0{{R3 diff --git a/kratos.gid/apps/Solid/images/conditions/selfweight.msh b/kratos.gid/apps/Solid/images/conditions/selfweight.msh deleted file mode 100644 index 7d29f3f3a..000000000 --- a/kratos.gid/apps/Solid/images/conditions/selfweight.msh +++ /dev/null @@ -1,38 +0,0 @@ -MESH dimension 3 ElemType Quadrilateral Nnode 4 -Coordinates - 1 1 -1 0 - 2 0.7 -0.7 1.8 - 3 1 1 0 - 4 -1 -1 0 - 5 0.0866025404 -0.05 1.8 - 6 -0 -0.1 1.8 - 7 0.0866025404 0.05 1.8 - 8 -0.0866025404 -0.05 1.8 - 9 0 0.1 1.8 - 10 -0.0866025404 0.05 1.8 - 11 0.0866025404 -0.05 2 - 12 -0 -0.1 2 - 13 0.0866025404 0.05 2 - 14 -0.0866025404 -0.05 2 - 15 0 0.1 2 - 16 -0.7 -0.7 1.8 - 17 0.7 0.7 1.8 - 18 -0.0866025404 0.05 2 - 19 -1 1 0 - 20 -0.7 0.7 1.8 -End Coordinates - -Elements -1 1 3 19 4 -2 2 17 20 16 -3 19 20 16 4 -4 3 17 20 19 -5 1 2 17 3 -6 4 16 2 1 -7 15 18 10 9 -8 18 14 8 10 -9 14 12 6 8 -10 12 11 5 6 -11 11 13 7 5 -12 13 15 9 7 -End Elements diff --git a/kratos.gid/apps/Solid/images/conditions/spring.msh b/kratos.gid/apps/Solid/images/conditions/spring.msh deleted file mode 100644 index c975aff16..000000000 --- a/kratos.gid/apps/Solid/images/conditions/spring.msh +++ /dev/null @@ -1,430 +0,0 @@ -MESH dimension 3 ElemType Quadrilateral Nnode 4 -Coordinates - 1 -0.473042225 0.0999999574 -0.000170817993 - 2 -0.451464987 0.0600173227 0.0355144756 - 3 -0.494619463 0.0599264309 -0.0357540131 - 4 -0.446077782 5.68310897e-05 0.044487789 - 5 -0.500006668 -5.67536713e-05 -0.0445743572 - 6 -0.451464987 -0.0599263528 0.0356674452 - 7 -0.494619463 -0.0600172453 -0.0356010438 - 8 -0.473042225 -0.09999988 8.42504496e-05 - 9 -0.412394709 -0.00113413693 -0.213688722 - 10 -0.409445417 -0.0592214763 -0.188921007 - 11 -0.433604215 0.0418324251 -0.252658609 - 12 -0.417370829 -0.116691352 -0.181507101 - 13 -0.455434501 -1.26195103e-05 -0.286058594 - 14 -0.463340162 -0.0573199773 -0.278729349 - 15 -0.460063768 -0.116378948 -0.255930246 - 16 -0.439268564 -0.158903572 -0.214478378 - 17 -0.0215911123 0.059917595 -0.0356329607 - 18 -0.0269718282 -5.67573843e-05 -0.0444817637 - 19 -7.38465577e-06 0.0999999537 -7.82245153e-05 - 20 -0.0606358858 -0.000948653155 0.213547484 - 21 -0.0636006475 -0.0591854703 0.189004673 - 22 -0.0215773059 -0.0600122514 -0.0355658013 - 23 -0.37337435 -0.171656331 -0.403069876 - 24 -0.373149861 -0.225228592 -0.363051339 - 25 0.021562222 0.0600288617 0.0356385962 - 26 -0.0556585388 -0.116653213 0.181606496 - 27 -0.039444155 0.0420875477 0.252545177 - 28 -0.393620517 -0.121087381 -0.453968101 - 29 0.0269570586 5.68273767e-05 0.0445803825 - 30 -0.3842853 -0.272577396 -0.340851864 - 31 7.38465577e-06 -0.0999999537 7.82245153e-05 - 32 0.0215771528 -0.0599314731 0.0357027744 - 33 -0.0176140688 0.000343668135 0.286029257 - 34 -0.0337644928 -0.15886067 0.214681884 - 35 -0.415740216 -0.164604661 -0.483835788 - 36 -0.42643651 -0.213064782 -0.462972731 - 37 -0.406366932 -0.317525081 -0.370950942 - 38 -0.00970907278 -0.0570286489 0.278847491 - 39 -0.425367901 -0.270085052 -0.426806687 - 40 -0.0129562193 -0.116110437 0.255986295 - 41 0.0394310248 0.0418312677 -0.252568382 - 42 0.0176001717 -1.30127824e-05 -0.285965809 - 43 0.0096946778 -0.057319981 -0.278636756 - 44 0.0606386744 -0.00112840734 -0.21359164 - 45 0.0129747094 -0.116385161 -0.255876988 - 46 0.0635894223 -0.0592214756 -0.188828406 - 47 0.0570944384 -0.119110851 -0.18777369 - 48 0.0337814184 -0.158905961 -0.214486298 - 49 -0.0996725106 -0.171754298 0.402851357 - 50 -0.0998904615 -0.22542601 0.362957017 - 51 -0.0887478591 -0.272799308 0.340840483 - 52 -0.0794294675 -0.121067189 0.453710987 - 53 -0.0573211882 -0.164489981 0.483741677 - 54 -0.0666616739 -0.317669264 0.371015636 - 55 -0.0466153205 -0.212990249 0.462968146 - 56 -0.047681739 -0.270135826 0.426891665 - 57 -0.338488232 -0.457382298 -0.42603612 - 58 -0.334977314 -0.411203146 -0.481037789 - 59 -0.353427848 -0.487914552 -0.400412032 - 60 -0.352511307 -0.357214916 -0.559383112 - 61 0.0794150955 -0.121092142 -0.453878125 - 62 0.0996575196 -0.171638636 -0.402972733 - 63 0.0998849765 -0.22522858 -0.362958736 - 64 0.0465983302 -0.213064786 -0.462880138 - 65 0.0572948107 -0.164604909 -0.483743612 - 66 0.0476651991 -0.270064767 -0.42675719 - 67 0.0938215271 -0.281554921 -0.351420516 - 68 -0.374968338 -0.532141031 -0.433146924 - 69 0.0666831242 -0.317534634 -0.370954973 - 70 -0.138061265 -0.411292895 0.480774053 - 71 -0.374688258 -0.39880045 -0.589090912 - 72 -0.134541177 -0.457593352 0.425854272 - 73 -0.388592327 -0.432869969 -0.562490944 - 74 -0.390088361 -0.486209383 -0.513177315 - 75 -0.119595378 -0.488150825 0.400318117 - 76 -0.120542192 -0.357198975 0.559113819 - 77 -0.0980587022 -0.532299625 0.43316728 - 78 -0.0983814859 -0.398696685 0.589014167 - 79 -0.0844658746 -0.432802896 0.562494008 - 80 -0.0829618617 -0.486255616 0.513226926 - 81 -0.299887102 -0.650760846 -0.421597649 - 82 -0.308932953 -0.688635726 -0.35691224 - 83 -0.326572534 -0.709502552 -0.348795823 - 84 -0.31002423 -0.614104467 -0.537520165 - 85 -0.173174882 -0.651128332 0.421096386 - 86 0.412396525 -0.000949502319 0.213676024 - 87 0.409434193 -0.059185474 0.189097266 - 88 -0.164071947 -0.688820081 0.35665983 - 89 0.446063012 -5.67610974e-05 -0.0443891702 - 90 0.451441779 0.0599315362 -0.0355039438 - 91 0.134546605 -0.457382274 -0.425943527 - 92 0.138053521 -0.411171996 -0.480954632 - 93 0.417376267 -0.116652992 0.181699004 - 94 0.120524351 -0.357225216 -0.559286613 - 95 0.451457534 -0.0600122552 -0.0354732078 - 96 -0.146442431 -0.709764408 0.348643443 - 97 0.128630875 -0.498887238 -0.404784827 - 98 0.433575511 0.0420855371 0.252738563 - 99 -0.163030166 -0.614081539 0.537199725 - 100 0.473012668 0.10000001 0.000113108598 - 101 -0.344560295 -0.753486953 -0.397872419 - 102 0.0844425131 -0.432869973 -0.562398351 - 103 0.0980810985 -0.532156977 -0.433138183 - 104 0.0829462731 -0.486192169 -0.513126121 - 105 0.0983480298 -0.398802175 -0.588999427 - 106 -0.330985601 -0.653639058 -0.579177229 - 107 -0.348317953 -0.673801888 -0.561076895 - 108 0.473042225 -0.0999999574 0.000170817993 - 109 0.494596229 0.0600123027 0.0357646773 - 110 -0.352868828 -0.720611868 -0.5016491 - 111 0.439269952 -0.158862031 0.214776764 - 112 -0.274900805 -0.820446363 -0.248531483 - 113 0.373363863 -0.171734839 0.402989248 - 114 0.373144379 -0.225426014 0.36304961 - 115 0.455395836 0.000355312578 0.286191626 - 116 0.499991881 5.68139203e-05 0.0446730962 - 117 0.494611984 -0.0599314881 0.0357954135 - 118 0.463325751 -0.0570287037 0.278940183 - 119 0.459481525 -0.117946413 0.259850196 - 120 -0.19817499 -0.821240456 0.247007149 - 121 0.384286575 -0.272799195 0.340933614 - 122 -0.28870327 -0.865818588 -0.189273912 - 123 -0.128472371 -0.753644554 0.397883775 - 124 0.393589959 -0.121076401 0.453901555 - 125 -0.142097664 -0.653552425 0.579086719 - 126 -0.268756751 -0.81693285 -0.379841954 - 127 -0.124752422 -0.673742894 0.56108214 - 128 -0.120153443 -0.720430402 0.501746642 - 129 -0.184280607 -0.866033948 0.189059171 - 130 -0.204276682 -0.816838585 0.379430693 - 131 -0.241621748 -0.895542188 -0.132166509 - 132 -0.231335348 -0.89542053 0.131725534 - 133 -0.302836178 -0.899902838 -0.210551459 - 134 0.406372461 -0.317674347 0.371110275 - 135 -0.262206008 -0.920097307 -0.0263224918 - 136 0.415690374 -0.164499826 0.483877335 - 137 -0.210821413 -0.920697436 0.0250368073 - 138 0.426419504 -0.212990334 0.463060801 - 139 0.424443109 -0.275353464 0.429527343 - 140 -0.170196318 -0.900247296 0.210355413 - 141 0.334972742 -0.411280534 0.480912204 - 142 0.338493663 -0.457593356 0.425946866 - 143 0.164101884 -0.688635698 -0.356819666 - 144 0.17314504 -0.650727979 -0.42154059 - 145 -0.283417205 -0.8680931 -0.449027016 - 146 0.353438022 -0.488152288 0.400411104 - 147 0.138673136 -0.729419174 -0.357349791 - 148 -0.311192642 -0.946607623 -0.284209629 - 149 0.163010619 -0.614116175 -0.537409528 - 150 0.35247749 -0.357216518 0.559291629 - 151 -0.302840309 -0.889384979 -0.456454205 - 152 -0.189667257 -0.867892778 0.448916899 - 153 -0.266906185 -0.990705034 0.0208958101 - 154 -0.236140511 -0.964443951 0.222073821 - 155 -0.236924796 -0.964723405 -0.222342918 - 156 -0.31021076 -0.930036797 -0.396189325 - 157 0.128487815 -0.753503113 -0.397846833 - 158 -0.206131501 -0.991011297 -0.021034935 - 159 0.124716888 -0.673801891 -0.560984302 - 160 -0.161866047 -0.946765629 0.284229888 - 161 0.120167395 -0.72059883 -0.501590978 - 162 -0.170251488 -0.889310267 0.456419446 - 163 0.142052542 -0.653643493 -0.579082364 - 164 0.37497559 -0.532309247 0.433255289 - 165 -0.162722433 -0.92948335 0.396684989 - 166 0.374629196 -0.398730009 0.589125558 - 167 0.299856433 -0.651121872 0.421226097 - 168 -0.269557034 -1.04009122 -0.0177181561 - 169 0.388568951 -0.432802991 0.562586621 - 170 0.389355802 -0.492391604 0.509606991 - 171 0.198136704 -0.820421257 -0.248493613 - 172 0.308962894 -0.688820085 0.356752424 - 173 -0.25039504 -1.01710589 -0.257607059 - 174 -0.203426714 -1.04012434 0.0181121216 - 175 -0.222705459 -1.01690784 0.257489987 - 176 0.184331567 -0.865818563 -0.189181356 - 177 0.309990774 -0.614100004 0.537356532 - 178 0.326589871 -0.709767156 0.348732078 - 179 -0.257065464 -1.0609955 -0.207917643 - 180 0.204275823 -0.816938024 -0.379717709 - 181 -0.265516969 -1.07904774 -0.107450925 - 182 -0.215798893 -1.06064012 0.20881164 - 183 0.274855286 -0.821231407 0.247127018 - 184 -0.207593148 -1.07913758 0.10743992 - 185 0.167191199 -0.915681151 -0.221671401 - 186 0.231407908 -0.895542307 -0.132037047 - 187 0.210831929 -0.920062444 -0.0262869274 - 188 0.241692108 -0.895421096 0.131857788 - 189 0.268747136 -0.816847195 0.379569335 - 190 0.288754234 -0.866033951 0.189151765 - 191 0.330916882 -0.653572052 0.579166873 - 192 0.344562759 -0.753655117 0.397960279 - 193 0.189622237 -0.868095684 -0.448922696 - 194 0.161853775 -0.946618482 -0.284169106 - 195 0.262211399 -0.920681391 0.0251523726 - 196 0.348282404 -0.673742979 0.561174716 - 197 0.170194531 -0.889384982 -0.456361612 - 198 0.353466204 -0.722983512 0.490511355 - 199 0.16282617 -0.930025323 -0.396125314 - 200 0.302835637 -0.900246128 0.210435879 - 201 0.206128648 -0.990705017 0.020988352 - 202 0.236113216 -0.964714087 -0.222229423 - 203 0.236885241 -0.964411558 0.222105725 - 204 0.283349894 -0.867897879 0.44896634 - 205 0.266903339 -0.991011301 -0.0209423415 - 206 0.203083676 -1.04701111 -0.0298928952 - 207 0.302783337 -0.889310327 0.456511992 - 208 0.311170489 -0.946772698 0.284294692 - 209 0.2226398 -1.01710589 -0.257514466 - 210 0.314417853 -0.926780626 0.381055841 - 211 0.250329367 -1.01690785 0.257582518 - 212 0.269606095 -1.04012325 0.0181882818 - 213 0.207526808 -1.07905034 -0.107399913 - 214 0.215971109 -1.06098421 -0.207847507 - 215 0.271839979 -1.06232372 0.194937089 - 216 0.265446036 -1.07913868 0.107495949 -End Coordinates - -Elements -1 6 12 16 8 -2 4 10 12 6 -3 12 30 37 16 -4 10 24 30 12 -5 30 59 68 37 -6 24 57 59 30 -7 59 83 101 68 -8 57 82 83 59 -9 83 133 148 101 -10 82 122 133 83 -11 133 168 181 148 -12 122 153 168 133 -13 168 182 184 181 -14 153 175 182 168 -15 182 165 160 184 -16 175 162 165 182 -17 165 128 123 160 -18 162 127 128 165 -19 128 80 77 123 -20 127 79 80 128 -21 80 56 54 77 -22 79 55 56 80 -23 56 40 34 54 -24 55 38 40 56 -25 40 32 31 34 -26 38 29 32 40 -27 2 9 10 4 -28 1 11 9 2 -29 9 23 24 10 -30 11 28 23 9 -31 23 58 57 24 -32 28 60 58 23 -33 58 81 82 57 -34 60 84 81 58 -35 81 112 122 82 -36 84 126 112 81 -37 112 135 153 122 -38 126 131 135 112 -39 135 154 175 153 -40 131 132 154 135 -41 154 152 162 175 -42 132 130 152 154 -43 152 125 127 162 -44 130 99 125 152 -45 125 78 79 127 -46 99 76 78 125 -47 78 53 55 79 -48 76 52 53 78 -49 53 33 38 55 -50 52 27 33 53 -51 33 25 29 38 -52 27 19 25 33 -53 7 15 14 5 -54 8 16 15 7 -55 15 39 36 14 -56 16 37 39 15 -57 39 74 73 36 -58 37 68 74 39 -59 74 110 107 73 -60 68 101 110 74 -61 110 156 151 107 -62 101 148 156 110 -63 156 179 173 151 -64 148 181 179 156 -65 179 174 158 173 -66 181 184 174 179 -67 174 140 129 158 -68 184 160 140 174 -69 140 96 88 129 -70 160 123 96 140 -71 96 75 72 88 -72 123 77 75 96 -73 75 51 50 72 -74 77 54 51 75 -75 51 26 21 50 -76 54 34 26 51 -77 26 22 18 21 -78 34 31 22 26 -79 3 13 11 1 -80 5 14 13 3 -81 13 35 28 11 -82 14 36 35 13 -83 35 71 60 28 -84 36 73 71 35 -85 71 106 84 60 -86 73 107 106 71 -87 106 145 126 84 -88 107 151 145 106 -89 145 155 131 126 -90 151 173 155 145 -91 155 137 132 131 -92 173 158 137 155 -93 137 120 130 132 -94 158 129 120 137 -95 120 85 99 130 -96 129 88 85 120 -97 85 70 76 99 -98 88 72 70 85 -99 70 49 52 76 -100 72 50 49 70 -101 49 20 27 52 -102 50 21 20 49 -103 20 17 19 27 -104 21 18 17 20 -105 32 47 48 31 -106 29 46 47 32 -107 47 67 69 48 -108 46 63 67 47 -109 67 97 103 69 -110 63 91 97 67 -111 97 147 157 103 -112 91 143 147 97 -113 147 185 194 157 -114 143 176 185 147 -115 185 206 213 194 -116 176 201 206 185 -117 206 215 216 213 -118 201 211 215 206 -119 215 210 208 216 -120 211 207 210 215 -121 210 198 192 208 -122 207 196 198 210 -123 198 170 164 192 -124 196 169 170 198 -125 170 139 134 164 -126 169 138 139 170 -127 139 119 111 134 -128 138 118 119 139 -129 119 117 108 111 -130 118 116 117 119 -131 25 44 46 29 -132 19 41 44 25 -133 44 62 63 46 -134 41 61 62 44 -135 62 92 91 63 -136 61 94 92 62 -137 92 144 143 91 -138 94 149 144 92 -139 144 171 176 143 -140 149 180 171 144 -141 171 187 201 176 -142 180 186 187 171 -143 187 203 211 201 -144 186 188 203 187 -145 203 204 207 211 -146 188 189 204 203 -147 204 191 196 207 -148 189 177 191 204 -149 191 166 169 196 -150 177 150 166 191 -151 166 136 138 169 -152 150 124 136 166 -153 136 115 118 138 -154 124 98 115 136 -155 115 109 116 118 -156 98 100 109 115 -157 22 45 43 18 -158 31 48 45 22 -159 45 66 64 43 -160 48 69 66 45 -161 66 104 102 64 -162 69 103 104 66 -163 104 161 159 102 -164 103 157 161 104 -165 161 199 197 159 -166 157 194 199 161 -167 199 214 209 197 -168 194 213 214 199 -169 214 212 205 209 -170 213 216 212 214 -171 212 200 190 205 -172 216 208 200 212 -173 200 178 172 190 -174 208 192 178 200 -175 178 146 142 172 -176 192 164 146 178 -177 146 121 114 142 -178 164 134 121 146 -179 121 93 87 114 -180 134 111 93 121 -181 93 95 89 87 -182 111 108 95 93 -183 17 42 41 19 -184 18 43 42 17 -185 42 65 61 41 -186 43 64 65 42 -187 65 105 94 61 -188 64 102 105 65 -189 105 163 149 94 -190 102 159 163 105 -191 163 193 180 149 -192 159 197 193 163 -193 193 202 186 180 -194 197 209 202 193 -195 202 195 188 186 -196 209 205 195 202 -197 195 183 189 188 -198 205 190 183 195 -199 183 167 177 189 -200 190 172 167 183 -201 167 141 150 177 -202 172 142 141 167 -203 141 113 124 150 -204 142 114 113 141 -205 113 86 98 124 -206 114 87 86 113 -207 86 90 100 98 -208 87 89 90 86 -End Elements diff --git a/kratos.gid/apps/Solid/images/contactStrategy.png b/kratos.gid/apps/Solid/images/contactStrategy.png deleted file mode 100644 index 458ad983791c49707b347d788758d04b3a5a8ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kD|HVv58 zW*^UriT!Ju8yBrzeelHbYrA%yo4Qej%W2s;7%% zNX4y`eowvw3Ovl4H#`6Se_rfsfWleDAh(UFhk5_MyvyjLc1n(|Gwvpf?JCZO-~UcF z^-fxP*5JjLM+>?|Ru#M7?z9r(GCdFzrgBK}iVS)*Z=?jpE!PPV*i?`@aB&nzdm{V%HBHf+SLbT#nb28 z`+|&g^K@|xskqhC@5#lWz;k5R&OiT;Hmwa>CU?d#Wr6CigFh1VB8~>~DNZ~kYPU({ yn-XW1K_=58k;NiyM~^V^y?#|vSF?*nf+6h!!{x8SH`#$EGI+ZBxvX{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kD|HScYhPugR#nYALBcD8e6&2px+_-4|+-)B} ze)aLJxOVkHMr!ZG{xxe?AKbO`^p7iMAPX`)T^vIyZuLxX=R07)!Lm|s$CLm2d+&5i znf#qeN|&4IL6~JLSK3CI3!T-B!k&BuQ=Yh_&MbDmc+>TpP2c90t4ZzGIfgYVAs>J7uV-LpaFAep#QQ|j0%#|Lr>mdKI;Vst E09Ht8kN^Mx diff --git a/kratos.gid/apps/Solid/images/folder.png b/kratos.gid/apps/Solid/images/folder.png deleted file mode 100644 index 86b16d281bfa4759d2dde7f2243d6fe82046f03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kDUs*o#MXw)e+yrXO_jGX#skl`#!Bgmf0tbua0ao8n|DPXYU0ZP? zX2WeQE`?v*?Wfe2YaC)vf3$Ya;mx6w_N?)14e2s{H{( zJaZG%Q-e|yQz{EjrrH1%B?S0{xc>kDe`5cd_3MuX1-2OKCV%|+b=S_**RDQTyZT^r z<05kEJ2i$||!Ufq7? z#h*FP-`z`HX<7VkRZ_yM4Q(ogGej@smG0Kw-_gObis@C@!ekTW0I9}}?^g3B+<2I_ z;pmOeg4HaEC%6u0C53jz?vk2Yv$E0o%!ATj_c|t6cWjObNcyz2A?aNzkMFl73$j0~ s{@r@kd+(%NvDtfH);gx-{Si%IP+ZF{Ec#l>80dBePgg&ebxsLQ0A_pEa{vGU diff --git a/kratos.gid/apps/Solid/images/lattice_example.png b/kratos.gid/apps/Solid/images/lattice_example.png deleted file mode 100644 index 3ef6589e85eb956001b93ed1df2d179bb042b433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 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
s&tRBA>91Pv9x!p(Ci z8{ZU>Blcf18AAZV@#e%|5=ow;ggG*NlTqJ_57Ieqp;k`?QLFq#;8f9U>Ns2n5TM0V zKpm7Thnj$j!GKrNwFQCK?8`*sONT^ADCK=5#|B{L`W>seI8ZOfSk#O%60FfdH{-Bh znBHB+t!-^nJ4$5sB~_Qcj#$x!KgTR5P1#FHBfryMpLuryCaE@W%1(tL^)7dK3gx^R z%iP3$NA7;_VKEz@D;8102CQx=ed!@=Gp$A!)EFqpWV(o!nzbiL4io#a)w`%c~Y*uef ztyU*eV{Lv+9*b38yKItiNj#4Je?aI0c{b>&Y13s`H7!era)PX!va%allvSzf&O2*i zff{#!4LyB-b$@xdy4$uV{g~O_a!8%Y-5*vJrtGKXE$*r${`5;zdYD9bY9jc$Z0#n$ z3uBKEhvv(v9}sUGfnbQ==s4Nm{~0w~kr9Z+UcxL!w_er`_M+6}$EF1+eTfX{X~ z`U_i9?G80t;`rS@olQH-%|Xm-3MZ2S@)RWB9RNi|?;@~ar-Jh&SxxE0g)hEi;wOIKn}OHT5T{Q+%}(G%e3d9!V|?vEt17R-Dyd)yVSa#v!cnoj1x8*UbrF z!nfX^4`KYZ;VmHtNngxH&(3O#tbgq`H0Zg}s^eW|Jhz$45F{FScbu4cr09j0!O0wf z69PSRAhI}OMdlXBU!5_(y?uel;y*u+a(j0-H4se)BpH9v!vV5BnZ2TiFm{92(i%uI0t;6!Az(zKQO=K`*Rjj2>w3ZYC$mJXs0QbyVL zTk`Ud1&i~}FjyR3#sto~wjSjoSgxo}4Wyf%rVtqt1@ZI?wJA#s7*q8+dtyJV zYPLLy))t6-P0@CmTX^&I=26RzIt)J7#MjGDNnpun<;olR1S)Z>2E8Op)WyYIF)^4! z;GaR~$Y5FZ{@*$vrOdg4D}fi2%y(_9m$l7HX%r9m?LAW7hG8wc8lvlO8NLw3c4@F} zcH|D5>mS;7Qv`1nH1T^)W8!M1TP+u@iBp|gH&y z@L%HFEBpAqVZ7Ys85&JBEekW^TGV)NB1@0t&7>c0V{dKUxmVniRFNG?S*BGcTom zZ!9)S+Y_Rgwn+SJf~Wj07PPI@yLYMg_p3aBEh$rQ^4h*Ie-=Q2m-;9l$wvJ1xU(Go z+hGT4r-8*^vf5+!y-{2ModeNgeckviX&8{MPF}Lh^k==pmp_+bEak7zLHRCqTPC51OcDy;Ajef?HPHftUJi!wR zkZdA44)+@yJKqb%k-jwS%m*q^*ejxsmF%YbP@b@$JB}RvWU>u4_x4Z zNbB+hfwm;kyb05Y9(p#ZQUoLA8<)zJfFv@*ii0ANRCtqbFUx85U=vYAAxNL)W6B5s z_-!+}l~mYh12fVjGAGKGld7t|so3bX4y#HX#;pQ)vYOAKL^ydTb^bh}LTL_v)ooet ze777Huyhag0D+fk3!xD(maWLdhrp+Bx;wJOn3LRM)_=qn4_+G zFt=?!ZeuE?h-FU@wSSK2LX1he6B4n@#E%f28D}Eqa-*{<;II37zcw z0iwrKEBEFwS~cA;4}Bf_!gQ;#Kv6!rnG(6g#o-@QEBKwDNB}IRXbUXV9?zb7U5fOw zy;xRC7>BKdQL(qUnRyHwSU1u2gowDk(4TDiCv+&KAxgky99~=|-ub>3WUl$iO>&RP z3yq~mD1$i~P-V6M<;5{TmDV?|d*@6E?*Y9ND@^C=bg3dS=Z}md#IVq-kiq+gV## z7uS`HSDVHwb4!a+CHyHzAYHoIST#eKZe^a%WMSTVMFyn)j*S3aH9xz!xDEG8)q5cI zC|;Hh$6I`r?fi8s=@pjA!JvbVr@ejumPKTH$hrXhb(Bfv^8!m&lm^y*;Pl{!?u>$f zg&&t9IpMzJ?mb%>-K*`l+t3SgNML>g+K3xQ7qeFex}-i0-Vspmz|8nK_eGU~`=SZ! zVf@|#btS`!SfUxf3`CkqGv_JD^J+3jwm?l@t3@B7auY;3;`X(^h;?8|np99?M6V)x zXO`QFn{1IZlkkM{m9+iw{mDO73jsPSEZ^Vf{WU&V_s?QiuoH5RMyd+;KzE)!ipA1> z(eYyqo$N3&SM~9?j#?R4?-QR$Ubc8#_LmlAhTI(Oubny)@wZkkI%`Y?&Lf*;`rYs} z)9Hfiq7Gq0mlWFCJhcN{p5bcSVaH{i;Fxb(SR#-TQt$ZV6ki@944|kY%fdh$V3ChpO0xZ9I*Xk zC9#*=$j_K>qi3`}E1f4(Pp`jO{v58uwpBPARv~;s{M7#=I49vf*=!>!3a*)yp(!hy z5}LRSdCY_K9yk{xE$^{V`1%G3s%&NL>(vk_>DZWCVad* zQl@GX$@tfi8Li(yH5aP^<2R$ci=iD4M+xfea~C-Q9ST4Lna}n8=e|HkJhs7-oTL|rNzX{ zq@$Fc)HnZPYb673DTMX;ylL4HBW%@?ck<9fwmWp0JVfcX66zWggeDBmG=1E9Ah@du zeAz1y3cQbu-e5PY->q-#%pE$=;;|`F(s0t;wm5vV&Rh%X_=f_kBrP0A1U29|g2;4xArPj~S;h*7I`Hq>en~g}oM<;2;*0}~XHH$Pnl zVL7BRHtcA~KM(xGekBGS`;aQiV-+7^0_bPvD=KXg2=)I1FPCTk1ZZ4(h>5#;sdz9> z5{S_*n}Y}glf{`Z+ETsj#4t0!LB_vE^+Xe&uIKQbx71u0b%lHyb69R^EV$pW(ja63 z0Kc4eS&Ai7e+*w@!m(ddoU;R-h7XNJg925SAXz6!%B%%J zWdizBF~6l(inT!3V#tt<8lk%;Zd&1{2LQ1 zej3VIim_gzP6G$l^n2Vt^-M&ad%{M#6ghb;xV^yxq71A#0Y9SCr}f@cdjGC^+mR?& zaKG5dtuyJH6}_5)bVf0uLioo}kxwpH>;Z$$l1Q3c_rw z(|EN``BBwDbr_Yni$?i*$h(D`SH8Sw2;QyY6&zDx)WKfkVARL^z`dTY?=G{Q+Xl|> z^n3{(t1NpBnr5?k)V4~r2{|bt#5losP4#S|k`JvPah@kcjGoJ&7YCFtj1(cmgDNBQ zZ$+fdKGb#sMdhl}AvH$6=zLh%qtxCPbU)iw-YRv@Sovz5jhnBxUYuD}-K7#Zh1H$i z4#E`ZbuRZDe^do^o78ePFM|qdPMw|(xYr-=&goyHHY)<23NGXDg~2pOorNM%*dLLf zP6^$eKS^sj|1#Z6jUZQDMMP$@HaVycC5lUdBP!I$EcC&B!G0F1W-_~8JeGHEkFpWl zb%51S1|jO2TqQj=Y!_>#nc(0KDM+%SR;D4Wtm~Rf9Ikvt{z^S?ar+nqpzdQz$5Ju8 z_MlC^Bc)O<9&Oz0RE^g_1$`YY%qspafu?m&TC(h2f7 z%!RTCkUlQtxG4#5g{(PVXZ^{Z9J`cKd&WhtGly){&m&G~K-tg;RS2u8ODWd-**1Rk zV4sPq{2M8t=?eIT9XxjpOV8{{3!YPFUSYE-mNI%~e}~czBgJ zZ>}+3_n$qRMACGN;D7UeeXFNUeJ;AO9exKI^2ZF0*t`Kh29=u(rKIU=Hy|vECt&~U zBkBKX{`8x?ytEK3yz%I}v6|FD3!=Muc1qfEt1rZo^b5HM|b(f)_!#a-{cWeg@4X;9`K7A=@Q@b_ldMU9J`a zmhmtic4QhBCP`B@!(Y{whbwh7u&jc<$GUUNmrUp`xZw4ET=#N!^K$JGQ#}bnKU>7h z#nvC_;sOb!^h3F$pVf6chmT|%m27Qo#qzq1?o%UP0+`$MFvbbytWt^1EgEwNY(gUHnimrEfXK@)jYPTeEQFsaG(-tEVC|BC(<#`cdF z9fGk2Lfi6=u97vC$ixP*;WkG$$Qw{}lqaHPP|+5zTIx zjeRS_VtrFd9w_5{P1yF#(cAqhE6VYN(E(Of#3YICUumm%hMokoZw-%_O#6szBY*ok zQu>4Ohmec)dFCfbLt=0k?I2zdM;f9n@)};6JIqvc=PvP(i#VjEPNYQTG9SUSVgOXrrO{fB9ggXqTU6!aZ`ZNIgTTPM%EWtE|P2 z;~?^x?}uK^CmKGCGn$i(JyN~B!mG~cLay(eN9F8_5^_nKhZjrfkT&vVbJyKBs|AWn zBKqcZTQXa#TmDno3VbvV9o z_W87;_CC^mXZ}FXYw+b1$-5p?nj`$HuX+>glX-U6lNQKN6Yxwb|8d&)zAW>~ruV^~;_@OY>m7^M z#{l(Jyt3O;lo^cso{wZBAO-U<&w#!#SN&NQW;pSe=Mzi;n?co8xqKxYjEfHpFJE6v zdkci1P&%`8OkB(5$c|z;hc1?w-o}gK@Qhln zcAY=ht$pnSC0Z+lzi0A$Lu?(9qOuPJ;~606VXCu)z+R=ezh3wp|k_ghv3 z(`yW|!b`e(9!nrz$~YdV6=Q1pp!WgCxch_MkZmC&>A9x286;x&-m_j`8!^C^hK$L- zMf>|3Es?cJ2H!Q!%U)Q7C0}sHp3kOoGNZ{w{HKxg=e5LHJFNVq5Sv4!Q^ZUurspuH zA~~SII7?3)N=3@DsYIv6tN0I|P;{*S2CM5YYz+>M)aZXMfSdO0I|_t1A#G1CKPz4h z9>Tw!!V4;T7<_KErxow_))%{^*wU|G2)94&%X{;{iynl$#K7&BCh>-sfJCJVP1V!% zfsWdcwqWASeM$A5kr4g0*+JhW+G1GU7D zO7Q|l{DY_sdeZVuR)rn_FC$?Im61( zR!8-bV}pOdbDD;%((n9BcL_u$;=i-bi&|A1Q*AaMY&owABX|%h_^ASCaM=Oa>3ALsumvL&S-kcbv>f!p_pjoGnq~G$&@X!?v zEDCf`yp>b;Mp?w^*7>3u{g_MH|JQqL{6HJ1fCHZ+
%)|;-$J!rq(bE} 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 Q{mBBLpwKIVzz6960gDBsi2wiq diff --git a/kratos.gid/apps/Solid/images/notched_example.png b/kratos.gid/apps/Solid/images/notched_example.png deleted file mode 100644 index ac4cab58cc3ef5e7cc98ca4c1559d797943f2c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmV+z1LypSP)C{p|jE_H3~ zMk;8rXe*{eXQr4m>D)ywBe%V`)Q@g1o>fRPPtN=1%n5WH2aGKc7-#&@f9Rj2V~ovU zd3jk%8HVAv&rIPEq z>2!L2e*WO#Ad|^NJL>iN{r!ElTJ<~+Ap{}(7@aY8etsV1sFc!Lr&6hnjg7s%y;v+3 z9rOJBT&YxyR;~3&^msgec6Qe1fKo~+6$HWLw{6?DZL|6G^ptZx zXd2$x*1H}i}!qazYz-0Ssv&1UoX_&Ar#?e6X-5($LRyYKOMJd??EI-N$N(Qdar&!d!n ztnwgaj4{Ug@*`#~olawnmzI_$CMGT}E?TXYsY|8QUv&&Qrk`#?Ypu1GQf9MR2%+n` zuIu`~&pB_m+b=IK5WPRt3#@LBzj*+DLLni zv6YpT&CN~Mb)TM|YPDLk*$jf9)oMi-KIj`6F$*Dt5Q1|K0GOJZiW-p+;`a9T>goz( z9Q}QNbb>FoSxPA(L~9*}VP88TUvJ`4N-1UZLVPnlD!KpcU8NL{kv_r;^CkKi@xK7| WYG*C`)7`)T0000O~`$cQimh1i3|Kx`IL16^816pS%k5FOD17hJlchV(!@ zdEy!aHp4&w_kXOJ!TuKCaFCobTs~jURL#+qW0pxlC hl$`@8$<6=)1^^*r;Rxj2lk@-p002ovPDHLkV1kmreaQd- diff --git a/kratos.gid/apps/Solid/images/rod_example.png b/kratos.gid/apps/Solid/images/rod_example.png deleted file mode 100644 index 8288474ffa0b1574fd9ebd7bdc54a0bdab29459f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmV-61j+k}P)9zm>1H(x~ zK~zY`<(FSfQ&$|vKbQ6n3ar?U$XrQqME*3EK$@%wnes0{=(VuoL~+0nqFIq-bBobO zwipujpy^B?zR3PP_$N^VGLh&CBO)U{5cl8^fsw#6{*`Q`{7dQC!x$L}W(sXwvhUkH z_vC)gIrp6J?|Y=i#zw(QQV=gu|6jQJpATc>;}j_hmbA3Bwx*`0z{8s_USyk2$Lz$! zI(VGX$l&A0fm`<8zCPYPc#sa43rlJ$-sNSwySo8+Jt``&|9p?d!qDI#03*Z0d~xm^ zr%#^b!uj)>G`}VQo^D#R;O@vm4(cj;X!{H!)_wFsjRf?k2J?o{>Wa9R%TcnuHWbWNd zh)zet*|W$h6@@k%TD_i;p`pOQ0d~d5Q(sp{PF@~wr==ljG+e)SjbBGc*>AIvU^Md6 zqep?W*CUmce01Uj(=#)amy}>FE~e+3#6r-kzr@6kDy#&CO9=Rz_BS zK7@r)R8Ro0sR6uDVJWSwq^hC<0n}7i6B`#tbYdd5f&!il4B&7$h)qZcTvf}+%_T1* zgB2n8xTc1f*jN(GW=idLe(3BZKRbI}ZFpgm`8TZyL2p+V-(I-_z-J8&bhWjyI6qHD zP7eDOg*OZawBh0CqoP0vzPo#u(Wg(hUe8sMgx+A_9jle8i3w6oCKeYKP^;B+-Mhz! zwY8i+bqZh5>gOd1Yi=&P5)-#R^S|}W_&E3P+`;ShBFi#D2!d8E*(U@lm5Q&gUS(%Y z%!c`3OG##@!9ZL}3L1?DAp}AQCf#m=Lqpl7)3M_9aTTa`7cIU%w~c^L-BdN zBqb+v!Rh46<;xs7c8rj)FgzX)oi5i}f0NPZ-wfyT`B++BrmDJ{Tt(rv9Xm)*Pbbn~ zK$c~G?CJTdqY%tYPWl)AYD5HTS*G{FgSECdqoa8%B?W-lnHfe02f6QZ@qK5ff8ps_ zS;%TNEjMp6Fz_<~qr=18Zfyl%VSb)3o11YuozG6Mn^mYRqt)yA-R2><{9 diff --git a/kratos.gid/apps/Solid/images/runSimulation.png b/kratos.gid/apps/Solid/images/runSimulation.png deleted file mode 100644 index 32ca7ce81a24f244b18449968c113dbb0c7ad6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 zcmd^9`BT#e9*uxV5g2r}O1CO?TB`_Jz_pdOOho7cDvO95T3WCia+45*ByuGrKsW;g z0)!g_gd{+YZ%%S@g(Hv>+^3*^H0n{ zAdsb(r@Nnl&;A87W5c%C{HfGHHZYGM*!{#vSZWwF0(3Jx@o|K$SA1AhgkMBhI2@vg z_znaz+V;KU@A2WohZ1~6MkcDLq%1GLu&ko0oIorr#^cK?F}XNgVM$dr=~;SKacMd7 zStd5GAitovwyv?Fvbu)Ukb}*yB-Uo5Fodca6dFscsVglbU~_R<**Vp<_2``3H2AZp zsR(HD)4GP{+`NMN#+HJjQdmk_9}o||8ojm9QHl2vLAslI7oP>~Ev)$8@b zUJ0AS&%xx;yP542T51|HJ|RgU6hojXD=Tj~T*1P^Vo7OvVNt29Zy+%Vs-1n&*whMe z_*|YaIwp?G7fNOFZU%dQfB)d%psj=2&0zH~*(`w9KQJVd^-<|P5^0}EER#rOF|i4K z{eu{6{?^tzdEbCqGc__g#$W+O#rQNh^6l!{xJtdgzCoeV8B9Q-7?nunOcs#x6#nas zwyLVSuWx`@O_CUN3@Kvc5=A1(n>Q;R9TdgzNUun$RE|^W-CJ8*dwP9*0z@R1h$S)( zmrtX2PfgG8_=33j#HH8&-PqXF>2yM&h)_w?YPFf!IV$yJOlV%LZxQ0fbE?f<%Eh#>q<>S zyj@*ob9jp3Q8vJfjEWu|Q{u}BJihQrbgWn+g{7puVXzr2&febM$e40*@ug}~L+@tH%*+mtj2SFesnnaBI!Y&fZhoPI zLR(u~FU42PXlJ$B7XZKoxO{S3hjLuSV6yl2^l|Y?^9ze2v2=cZVRd!Q5P0jd^Ay9A z{14{mbKh|OT?eE=3}zU5;CC&$f4gaicq_NMB$6ZsY8*5#_C*RLjH@A=+``4r6Kd&6AhA04tyx)*iNlrmvr z7ph*GtURKq9Sn$Sh)f$();Cjz`@d*Z%Em99|1zwtY1xGEAt1fJ34O|pSgn1qQxuYA zem<4?8AX8M1A=zhf(e*3tw^+i)-Uv7FA-DBa=47R;u;&0^Fhyd`1%rkbeF160vL&L+~-cYnZ=&rSk zRfVS~$m>7fkjbZqUS2jck%7OMTXLiRL!Py?_PYl(TVn~wOr&8;?Ck8ky`|ujbIqtk z@T^mi{{HFHo9|cp+b=nhoSmH1j{kaa@A!#I3!_Iai^S!N#`3!ku5e6&1%%H(d-gi` zX;aIlGJJ^M;Ygm?%0nHNq2F9C&TwYafrtr z0f6b?>JA-sHB{Xk_o-ri;Qwqoc*N#9a@>Mr2?wY%5UX3Rp1a?3tdIQSJOK@~x!{Tg za0!=lf3_gp4X}!&fwgNcb8ghaQCp7I@rI+x)USfTkH0c`{^k+lOk`-#=4Yc0R%HQI z(B8e@7}++;`rFVy>@xePQ!Mz{Mhsc&1UJEE4JV2 z6=XX2SaE90cMcY?B7aoG&9lZ>yS~N4<+Nmb=QHV}2}qBBB39bXyp7P9Q>X1E->7O1 bTZe*nc89JAvX6Hd$^hi$;p0ws3q}12Cx(06 diff --git a/kratos.gid/apps/Solid/images/seeResults.png b/kratos.gid/apps/Solid/images/seeResults.png deleted file mode 100644 index 85f3442098fbcd7f1817d46cfb6ff8452023438c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*o#Ws{Eh#_&>R!y_tRg|6l3{7+mX^944iGJq)y$ N!PC{xWt~$(69CF`Z>9hM diff --git a/kratos.gid/apps/Solid/images/select.png b/kratos.gid/apps/Solid/images/select.png deleted file mode 100644 index e1cb04841578dd1b4031d1a4afd1b3636ed75b57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP)4>OVVfT33Vd z@%4j&qR7YApPjZNA6c!d!AwbbXl0FdbC^ z2t$GJZ=3f1ryZhXs%*+CSdRS!z}K`Z+rBHNnQX#A(m?6{?=D<#B;zF@A;8VzAUKsc z;SoOSZ_o6l4pTte2z0{e>>L niSW*eeIRV(+1uw`egX^t#GeBI23e@V00000NkvXXu0mjfwZM5T diff --git a/kratos.gid/apps/Solid/images/setLoad.png b/kratos.gid/apps/Solid/images/setLoad.png deleted file mode 100644 index fbb12ba2a43030e0644567e2b3af8af892d1a992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kDKPtTW#PMs&@{tq!*F1Ur>e|%@^XG1BZd_!j zo4jl1X&=vuwW|->Tj!M(PyhJwYes4>P|LI8-TFWigi3<^f`MFA!0>4Qej%W2tfz}( zNX4x={df5q6gb=*16_1q|BW|$k-ziiH7oJ^M;|8hL_AdYzTzQfDbIFS)J1=p*TsEP z7z7Px6v{C+&DUA-c4-RpCf#QrbHB)z$n9LXG4Xps*yIh1>wZ=XCor%XGp?Q%`f?i3 OA_h-aKbLh*2~7Zu(0soD diff --git a/kratos.gid/apps/Solid/images/setUnits.png b/kratos.gid/apps/Solid/images/setUnits.png deleted file mode 100644 index 95f68e36218081e291016b8bde67b00d1f78232c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kD-^a7!tK!JnVfyvSJ_P_r--)>wW zQ*Pwr@Wf&rD@RIFu=kUSnCJ6F=I&TCp;IKQdGUoeYgQJX))EoCt(T|zz+lG`q1A@5 kpO;4Hh1u_aCYr!-ON=q^{2h@+KpPl5UHx3vIVCg!0GY{QoB#j- diff --git a/kratos.gid/apps/Solid/images/sheets.png b/kratos.gid/apps/Solid/images/sheets.png deleted file mode 100644 index 3b0d51a8ca1f13310706bf797d97a5a936e780f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmV+z0q6dSP)f0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh5YEo1TV^^uRPT33U} z$JXTI>OVVfy1C0}WsP=om#wS8Oi6gw)!>7HqMx0%9}^Kx0001cNklS6uPqDeByuGn{B6g4E;N{ ej<+{_1Q-BWTLNZ_w>zT%00006Em^uDK4AH#LU9QEiip*Ap-*g z6G1&sp1vuqnEL(OXI@_63B4I?tSnG%-MwpX-g=5lPi_6&uU|jDef!+XQiqF+10v3t zl-hmv%+6IS7eI_b23M~?Ub=Mix9?vB1;u~;`k|$zp{pbR7F|92un-#t1_lleHbVnt1_p)? zAHH0^`jCa0>HGJezkmNUH`5IdwPj#n;Ns%oMFf3ZKZ|m0GOw26)ey)gAa_8=IAOGC9 zZ$BlacEbfPUwHswEM0yeB&<9vvU=m@6Mz5yLj*%@-Sn?tKmPmokC&I9fq~)g-@mV4 zf7H^HV_;xdx8c~vO}m+xS)!wSeZ0&N@s^s=tD&jE%EHRP!0_Y84+aK?pFe*~NC+`7 zFl^a&YW14!3=9l`0qzhz3=9k`3=9m>arKcA-e#t1*RNk^Vq$vn{2n9#7#JA#?7OgZ z*=7a?22T%1NXS9sO;6wP%a;%CUa8DXjFn}f5)wi=1v9>X`^?WT`2PLdj~`yLb8y?+ zS!Sepp+t_1jQY)6PwwA;@!{iF;M1%4Rw>F!kc|OE3RFA z@bTl<6UVP9%SUFU_C9(1YX0196Z_Zf+If2I>Vx*yd1b}Zn;RGDPU3k7)XrJp5n0T@ zz%2~Ij105pNB{-dOFVsD*&i{9a9hY-R(tycDAeZZ;us=vx!2!YjKz@U3%5|_%ir_2 zm4145R_AzAkOsq_%%--#>Yoc1DCAkcw+Pen*>ycpElgl)k=pLo#eqV49a}{&RTX$W z6F40d#-t!Jv8GY%Ak!4r1>$;(tY5X7HWe>=Z)&OVY6CahTUGHoy*JD9Gu~u|nmsG! nI(t0jspR+XJN-(&JYYP0kom$I&Ae+s7cqFc`njxgN@xNA*pza` diff --git a/kratos.gid/apps/Solid/images/tank_example.png b/kratos.gid/apps/Solid/images/tank_example.png deleted file mode 100644 index 5e6d01ae5b1ca374f9f41e40e27714e72ddd3827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 918 zcmV;H18Mw;P)YP($adUH{Sb<4aWS`(q@c(A|>_F4B z^j!#nQqxMCeUIaKx^gM!#{UT{rR2+(8fRyxGazsr7ss)&ZHr#7&tTB!?d^?zzfZ5% zF9~YL!;2MYUSRwrzahM+mW8v1uA}AB2E%c>{nj3@H|e*tU)kf*=SO z4u`zHzS8M*=yW=CyIow@P5qCKjyOI(rdq8M1i^1nN%wd(8ZQma#7`ilOjSrJF-?;~ zp+Kor!Zgiv{@vXjS65fmYTFzh9_A;PQc-sHNr4ccX_M!og<(h#1bCi@@B0}Gj@aGZ z%LivUB}oP%oi4;wb)sAdF_)OLHW>7&*X#MpXFs zs+(0kjY_s93AY%L6zq9k9yWz91LeVO+s^!+f{VrC616g&It!mwod@^*AXBlPbfQ1) z@v^O4w$C3Q@A-J>+8RRCtW4mQPcEafXO1FC?bwy zlv0FYNF2vYd$na*0POAU&CSyR3WWmSzyHJO=^2}wn>dbx@B55KBf@af?tI^;R4UPI zHrd+RqS0t@aB#rO%L`9WPdq+8VwxtsUXSs3+65iQ0ie~|<^KLYjaJ&L+wEssttOY3 zmzS(I*XN3Q^kw6wzh`j zIB8Zc_UOeLj-m*qRQjw`D%5H@^*J&=wOxg z0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBiw(em)Bp$zuB%K%r7k7sn8e>&XcYY;8?! z0n-u|FiZ*EyPM(AjA>G{%ovY6xRQ{NaFJ!>4JiqUcfQOU&qzpAOnu&5vijcM>X%Qh zFgr}!{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtT0P&aw)>Vvy>o}Sph#@;%wta$qTx!bN? zeQ@IVHD&q8=Eg-IKYqF{TS${}9Q}R!Hg8L} z>2yu0hNvkO5ol;3b|HI+g7P7I$gn1e5Iv0^1VyY~e9(u&$tGfms9~EncUO zu&H^=ZQnlJzFpjO`~B-dk?L?ba5(4XaA-ur>?ZI4Am?TVg-8H^-_<$O-quGU66d~m ze02G|LJEjvabeSLb0QKzB+ZS(9=9Kn@K%;~V&kF*`saP#0Hvun0zg<8pJm;ENWPoa zC&rc$35`e;Nx6~XiY`OjyXxwn7CQIF(;1V2LL{%A*JS5hO}!|;mYECy2Hjj=?+9P3 zHd<|K7IVD5OD7P7>wD@pH<;EhRe(tL_dOfywkFLWA{iN6+}?B?9R&fAAQF$;U;6S> zbK~%_MI_+n4wOZ;g#{IE?qGe*T3ApqIkAFBpy=5L*5TgSb{OuLFHP?kQVg+lS6Uj)Bl zc5ceL=NcH&_Zigyz?(7kq-UIKXnGSXky8{kIimvr0HBVJf_9tB<@A|X_e`^EC1v?y ziBKdGp8Rl%X6>-U!4;R>1%M{aP<*`Th4Rkd1qzX9)ken7DNFNXM3HM2E1#wX0vZ5< zL1bCCR2pNmI@?=E>lxkPqW%oosq063MYeW`9Yod5s;07*qoM6N<$f*`zSegFUf diff --git a/kratos.gid/apps/Solid/images/view.png b/kratos.gid/apps/Solid/images/view.png deleted file mode 100644 index fcc38761746e0598aa9ac443dfe0a5c8ef55edcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1950 zcmd^9`!^d18cnyh52rJGYFMVzQPb7wvF&zBTQ$>mW^`k;JE~fJshW{pp&lVf2@xbj zNQfZB`w>Cn5%PY&CEn4rh*0Kuiy4}tZHUpe=gfbx_nhy$=l*o>58wUr0{neHvOQ)C z002I^c>{QNkDdQFhxYI7BWphq_vllY&m&l1TsSNllmG^JhsFIH>~a$ViU8jQgThkc z`@mNLfIs~n;CIjG!-o&)8R*LDy4w22lG5@tWG02$LawOJ!xKzHhCRfhQ&9D6Wt7&CrYkT{(+05ba z==9d*WfQfD#%6O22BTD_?C50n^!7(Qjnek^J=ee7+}wPYl%iCsmrbUb*;!S$R<9pv zZD%yM&^Ih1zUQDI@RPN$bE zlorbti^K0=bjf52dTYn}`o_TE(7=#RE>}iHLxyz2ZS4%PL@E#nA+hmXo`BNWJTdvo zXq>QGtuIH$lqz)$Bu@8Szq-06k;riQ1f6cUlgSo~r6nZt;LxyKp^A=)eHs}p6p9o| z_1@)Q3U;}**Om{kyZ(WD^8Xls@Eu$b0I>h;O`!KZ_=H~(_{n3CJ+|;k>47_kYYyQ) z#+N-fYL8f{p1Ke|C|vtEWcjXP>JPk`M08raJ{Xp+4d*%TUX1XsB-QSQXViUbSnHHs zN*l!XlwfyK6W-1LRuFu92i5d2|A)3qkC*Q&H>e`>q?bE#{YkKu_xaDiH>MlDEWhn- zDspkBIPNZ^vPh;e+oj0Sxs`_sh$n*dcxWcT&hW-w(ksD zVCEuuxRI82@H9I42Eq!6eesk-bxq|x+A(kR&m078`Yr^Zli#kIH;D4=kx}*-|7s0M}O$xukzm;d(c-47?*sXQ~Q!ic%b9VxPh^x-H zNFrb<`k0$mK!Z|_+rCXj_D&y*D7v!f4fQy?#Dkrlja>aQ>U=0wo2q1FKUXRp{sKerr;KdU}dK|Fu-!M`kqTLZcH z>q9e9yGb?wn09#`;r4RnQ%b227 zjcM$2bXZ|MpIrx+9ZGZeQ=h7eguzD3q(85EYRFFWOxEX?pjXV$eFH^{J!|EtUEsE< c6R;nkE??yM{5Unb_d)!IlX0)X7SUH||9 diff --git a/kratos.gid/apps/Solid/python/RunSolid.py b/kratos.gid/apps/Solid/python/RunSolid.py deleted file mode 100644 index 3075b069e..000000000 --- a/kratos.gid/apps/Solid/python/RunSolid.py +++ /dev/null @@ -1,8 +0,0 @@ -import KratosMultiphysics -import KratosMultiphysics.LinearSolversApplication -import KratosMultiphysics.SolidMechanicsApplication -import KratosMultiphysics.ConstitutiveModelsApplication -import KratosMultiphysics.SolidMechanicsApplication.MainSolid as MainSolid - -MainSolid.Solution(KratosMultiphysics.Model()).Run() - diff --git a/kratos.gid/apps/Solid/start.tcl b/kratos.gid/apps/Solid/start.tcl deleted file mode 100644 index 44f387284..000000000 --- a/kratos.gid/apps/Solid/start.tcl +++ /dev/null @@ -1,84 +0,0 @@ -namespace eval ::Solid { - # Variable declaration - variable dir - variable attributes - variable kratos_name -} - -proc ::Solid::Init { } { - # Variable initialization - variable dir - variable attributes - variable kratos_name - set kratos_name SolidMechanicsApplication - - set dir [apps::getMyDir "Solid"] - set ::Model::ValidSpatialDimensions [list 2D 2Da 3D] - set attributes [dict create] - - # Intervals - dict set attributes UseIntervals 1 - - # Restart available - dict set attributes UseRestart 1 - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - LoadMyFiles - #::spdAux::CreateDimensionWindow -} - -proc ::Solid::LoadMyFiles { } { - variable dir - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write validation.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir symbols symbols.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] -} - -proc ::Solid::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} - -proc ::Solid::CustomToolbarItems { } { - variable dir - # Reset the left toolbar - set Kratos::kratos_private(MenuItems) [dict create] - set img_dir [file join $dir images] - if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { - set img_dir [file join $img_dir Black] - } - Kratos::ToolbarAddItem "Model" [file join $img_dir "modelProperties.png"] [list -np- gid_groups_conds::open_conditions menu] [= "Define the model properties"] - Kratos::ToolbarAddItem "Spacer" "" "" "" - Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] - Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] - Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] - Kratos::ToolbarAddItem "Spacer" "" "" "" - # Add examples - if { $::Model::SpatialDimension eq "2Da" } { - Kratos::ToolbarAddItem "Example" [file join $img_dir "tank_example.png"] [list -np- ::Solid::examples::CircularTank] [= "Example\nCircular water tank"] - } - if { $::Model::SpatialDimension eq "2D" } { - Kratos::ToolbarAddItem "Example" [file join $img_dir "notched_example.png"] [list -np- ::Solid::examples::NotchedBeam] [= "Example\nNotched beam damage"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "rod_example.png"] [list -np- ::Solid::examples::DynamicRod] [= "Example\nDynamic rod pendulus"] - } - if { $::Model::SpatialDimension eq "3D" } { - Kratos::ToolbarAddItem "Example" [file join $img_dir "beam_example.png"] [list -np- ::Solid::examples::DynamicBeam] [= "Example\nDynamic beam rotating"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "tank_example.png"] [list -np- ::Solid::examples::CircularTank] [= "Example\nCircular water tank"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "column_example.png"] [list -np- ::Solid::examples::EccentricColumn] [= "Example\nEccentric column"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "rod_example.png"] [list -np- ::Solid::examples::DynamicRod] [= "Example\nDynamic rod pendulus"] - Kratos::ToolbarAddItem "Example" [file join $img_dir "lattice_example.png"] [list -np- ::Solid::examples::StaticBeamLattice] [= "Example\nStatic beam lattice"] - } - Kratos::ToolbarAddItem "Spacer" "" "" "" - -} - -proc ::Solid::CustomMenus { } { - Solid::examples::UpdateMenus$::Model::SpatialDimension -} - -::Solid::Init diff --git a/kratos.gid/apps/Solid/symbols/symbols.tcl b/kratos.gid/apps/Solid/symbols/symbols.tcl deleted file mode 100644 index 160590c70..000000000 --- a/kratos.gid/apps/Solid/symbols/symbols.tcl +++ /dev/null @@ -1,393 +0,0 @@ -package require gid_draw_opengl - -namespace eval Solid::symbols { -} - -#to be used directly as symbol proc (to draw a condition as a 3D shape without take into account any direction to be oriented) -#valuesList is unused, but necessary because it is automatically added when invokind the symbol proc -#e.g -proc Solid::symbols::draw_file_mesh { filename color_lines color_surfaces valuesList } { - set full_filename [file join $Solid::dir $filename] - if { [info procs gid_draw_opengl::create_opengl_list_from_file_mesh] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces ""] - } else { - set list_id [Solid::symbols::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces ""] - } - return $list_id -} - -#valuesList will be like: {ByFunction No {}} {modulus 9.81 m/s^2} {direction 0.0,-1.0,0.0 {}} {compound_assignment direct {}} {Interval Total {}} -proc Solid::symbols::draw_selfweight { valuesList } { - set full_filename [file join $Solid::dir images conditions selfweight.msh] - set color_lines black - set color_surfaces blue - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(modulus) - if { $modulus == 0 } { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set modulus 1.0 - } - set direction [split $data(direction) ,] - if { [llength $direction] == 2 } { - lappend direction 0.0 - } - set opposite_direction [math::linearalgebra::scale_vect -1.0 $direction] - if { [info procs gid_draw_opengl::create_opengl_list_from_file_mesh_oriented_z_direction] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_from_file_mesh_oriented_z_direction $full_filename $color_lines $color_surfaces $opposite_direction] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_from_file_mesh_oriented_z_direction $full_filename $color_lines $color_surfaces $opposite_direction] - } - return $list_id -} - -#valuesList will be like: {ByFunction No {}} {modulus 2.0 N} {direction 1.0,0.0,0.0 {}} {compound_assignment direct {}} {Interval Total {}} -proc Solid::symbols::draw_load { valuesList } { - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(modulus) - if { $modulus == 0 } { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set modulus 1.0 - } - set direction [split $data(direction) ,] - if { [llength $direction] == 2 } { - lappend direction 0.0 - } - set force [MathUtils::ScalarByVectorProd $modulus $direction] - set x_axis [math::linearalgebra::unitLengthVector $force] - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_drawing] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_drawing gid_draw_opengl::draw_point_load $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_drawing Solid::symbols::draw_point_load $transform_matrix] - } - return $list_id -} - -proc Solid::symbols::draw_arrow { valuesList } { - set full_filename [file join $Solid::dir images conditions arrow.msh] - set color_lines black - set color_surfaces blue - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(modulus) - if { $modulus == 0 } { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set modulus 1.0 - } - set direction [split $data(direction) ,] - if { [llength $direction] == 2 } { - lappend direction 0.0 - } - set force [math::linearalgebra::scale_vect $modulus $direction] - set x_axis [math::linearalgebra::unitLengthVector $force] - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_from_file_mesh] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } - return $list_id -} - -#valuesList will be like: {{ByFunction No {}} {value 4 Pa} {compound_assignment direct {}} {Interval Total {}}} -proc Solid::symbols::draw_surface_pressure { valuesList } { - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(value) - if { $modulus > 0 } { - set load_local_direction [list 0 0 -1] ;#considered positive pointing oposite to local normal - } elseif { $modulus < 0 } { - set load_local_direction [list 0 0 1] ;#considered positive pointing oposite to local normal - } else { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set load_local_direction [list 0 0 -1] - } - set x_axis $load_local_direction - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_drawing] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_drawing gid_draw_opengl::draw_point_load $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_drawing Solid::symbols::draw_point_load $transform_matrix] - } - return $list_id -} - -#draw_loads mean that is returning a dictionary but real draw is made native inside GiD based on this dict -#in this case the XML declare orientation="loads", a special value to say GiD how to draw -#valuesList will be like: {{ByFunction No {}} {value 4 Pa} {compound_assignment direct {}} {Interval Total {}}} -#but to work well by now it is necessary to assign to surfaces the surface_Local_axes, else is drawn with wrong direction (eulerangles==NULL) -proc Solid::symbols::draw_loads_surface_pressure { valuesList } { - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(value) - if { $modulus > 0 } { - set load_local_direction [list 0 0 -1] ;#considered positive pointing oposite to local normal - } elseif { $modulus < 0 } { - set load_local_direction [list 0 0 1] ;#considered positive pointing oposite to local normal - } else { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set load_local_direction [list 0 0 -1] - } - set dictionary [dict create load_type local load_vector $load_local_direction] - return $dictionary -} - -proc Solid::symbols::draw_moment { valuesList } { - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(modulus) - if { $modulus == 0 } { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set modulus 1.0 - } - set direction [split $data(direction) ,] - if { [llength $direction] == 2 } { - lappend direction 0.0 - } - set force [MathUtils::ScalarByVectorProd $modulus $direction] - set x_axis [math::linearalgebra::unitLengthVector $force] - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_drawing] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_drawing gid_draw_opengl::draw_point_momentum $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_drawing Solid::symbols::draw_point_momentum $transform_matrix] - } - return $list_id -} - -proc Solid::symbols::draw_spring { valuesList } { - set full_filename [file join $Solid::dir images conditions spring.msh] - set color_lines black - set color_surfaces blue - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(modulus) - if { $modulus == 0 } { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set modulus 1.0 - } - set direction [split $data(direction) ,] - if { [llength $direction] == 2 } { - lappend direction 0.0 - } - set momentum [math::linearalgebra::scale_vect $modulus $direction] - set x_axis [math::linearalgebra::unitLengthVector $momentum] - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_from_file_mesh] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } - return $list_id -} - -proc Solid::symbols::draw_surface_ballast { valuesList } { - set full_filename [file join $Solid::dir images conditions spring.msh] - set color_lines black - set color_surfaces blue - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set modulus $data(value) - if { $modulus > 0 } { - set load_local_direction [list 0 0 1] - } elseif { $modulus < 0 } { - set load_local_direction [list 0 0 -1] - } else { - #the value could be set by other function field, intead as modulus, consider like positive modulus - set load_local_direction [list 0 0 1] - } - set x_axis $load_local_direction - lassign [MathUtils::CalculateLocalAxisFromXAxis $x_axis] y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - if { [info procs gid_draw_opengl::create_opengl_list_from_file_mesh] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] - } - return $list_id -} - -#cannot be used because now parts are for all types: shells, beams and solids, -#and cannot set at design time orientation='shell_thickness', 'section' and the appropriated proc for each case -#orientation='[some_proc]' cannot be used because the xml_node provided to some_proc is the one of -#that does not contain the element type -proc Solid::symbols::draw_parts_shell { valuesList } { - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set thickness $data(THICKNESS) - return [dict create thickness $thickness] -} - -proc Solid::symbols::draw_thickness { thickness } { - set z_max [expr $thickness*0.5] - set z_min [expr -1.0*$z_max] - GiD_OpenGL draw -color $::gid_draw_opengl::rgb(black) - GiD_OpenGL draw -polygonmode frontandback line - GiD_OpenGL draw -begin quads -vertex [list 0 -0.5 $z_min] -vertex [list 0 0.5 $z_min] -vertex [list 1 0.5 $z_min] -vertex [list 1 -0.5 $z_min] -end - GiD_OpenGL draw -begin quads -vertex [list 0 -0.5 $z_max] -vertex [list 0 0.5 $z_max] -vertex [list 1 0.5 $z_max] -vertex [list 1 -0.5 $z_max] -end - GiD_OpenGL draw -color $::gid_draw_opengl::rgb(green) - GiD_OpenGL draw -polygonmode frontandback fill - GiD_OpenGL draw -begin quads -vertex [list 0 -0.5 $z_min] -vertex [list 0 0.5 $z_min] -vertex [list 1 0.5 $z_min] -vertex [list 1 -0.5 $z_min] -end - GiD_OpenGL draw -begin quads -vertex [list 0 -0.5 $z_max] -vertex [list 0 0.5 $z_max] -vertex [list 1 0.5 $z_max] -vertex [list 1 -0.5 $z_max] -end -} - -proc Solid::symbols::draw_parts { valuesList } { - set list_id "" - foreach item $valuesList { - lassign $item key value unit - set data($key) $value - #set unit($key) $unit - } - set beam_elements { LargeDisplacementBeamElement3D LargeDisplacementBeamEMCElement3D } - set shell_elemenst { ShellThinElement ShellThickElement ShellThinCorotationalElement ShellThickCorotationalElement } - if { [lsearch $shell_elemenst $data(Element)] != -1 } { - set thickness $data(THICKNESS) - set drawing_procedure [list Solid::symbols::draw_thickness $thickness] - } elseif { [lsearch $beam_elements $data(Element)] != -1 } { - - #the kind of data depends on $data(ConstitutiveLaw) that is storing the kind of profile: UserDefined3D, RectangularSection3D, ... - set profile $data(ConstitutiveLaw) - set rotate_90 1 - if { $profile== "UserDefined3D" } { - #set area $data(AREA) - if { $data(INERTIA_Y) > $data(INERTIA_X) } { - set rotate_90 0 - } - } elseif { $profile== "RectangularSection3D" } { - if { $data(SECTION_WIDTH) > $data(SECTION_HEIGHT) } { - set rotate_90 0 - } - } else { - set rotate_90 1 - } - #draw a double t profile - set drawing_procedure [list gid_draw_opengl::draw_symbol_section_properties {0.0 0.0 0.0} {1.0 0.0 0.0} $rotate_90 1.0 1.0] - } else { - #assumed solid - return "" - } - set transform_matrix "" - if { [info procs gid_draw_opengl::create_opengl_list_drawing] != "" } { - set list_id [gid_draw_opengl::create_opengl_list_drawing $drawing_procedure $transform_matrix] - } else { - #to allow use it before the proc is available in next GiD 14.1.1d - set list_id [Solid::symbols::create_opengl_list_drawing $drawing_procedure $transform_matrix] - } - return $list_id -} - -#only to show how is called, without drawing nothing -proc Solid::symbols::draw_parts_free { valuesList geom_mesh ov num pnts points ent_type center scale } { - W "valuesList=$valuesList geom_mesh=$geom_mesh ov=$ov num=$num pnts=$pnts points=$points ent_type=$ent_type center=$center scale=$scale" - return "" -} - -######## START procs temporary defined copied from gid_draw_opengl package -#to allow use it before the proc is available in next GiD 14.1.1d -#to be deleted when this problemtype require this version or higher (and off course this version is available) - -#transform_matrix could be "" for identity -proc Solid::symbols::create_opengl_list_drawing { drawing_procedure transform_matrix } { - set list_id [GiD_OpenGL draw -genlists 1] - GiD_OpenGL draw -newlist $list_id compile - if { [llength $transform_matrix] } { - GiD_OpenGL draw -pushmatrix -multmatrix $transform_matrix - } - {*}$drawing_procedure - if { [llength $transform_matrix] } { - GiD_OpenGL draw -popmatrix - } - GiD_OpenGL draw -endlist - return $list_id -} - -#e.g. to draw a condition as a 3D shape defined in a GiD ASCII mesh file -#transform_matrix could be "" for the identity or a list with 16 values (representing a 4x4 opengl_matrix) -proc Solid::symbols::create_opengl_list_from_file_mesh { full_filename color_lines color_surfaces transform_matrix } { - package require customLib - set drawing_procedure [list gid_groups_conds::import_gid_mesh_as_openGL $full_filename $color_lines $color_surfaces] - return [Solid::symbols::create_opengl_list_drawing $drawing_procedure $transform_matrix] -} - -proc Solid::symbols::create_opengl_list_from_file_mesh_oriented_z_direction { full_filename color_lines color_surfaces z_direction } { - package require customLib - lassign [gid_groups_conds::calc_xy_shell $z_direction] x_axis y_axis z_axis - set transform_matrix [concat $x_axis 0 $y_axis 0 $z_axis 0 0 0 0 1] - return [Solid::symbols::create_opengl_list_from_file_mesh $full_filename $color_lines $color_surfaces $transform_matrix] -} - -#arrow size 1 pointing to +x (arrow cone height 0.3, radius 0.05) -proc Solid::symbols::draw_point_load { } { - #GiD_OpenGL draw -linewidth 2.0 - GiD_OpenGL draw -begin lines -vertex [list 0 0 0] -vertex [list 1 0 0] -end - GiD_OpenGL draw -begin trianglefan -vertex [list 1 0 0] - foreach angle [GidUtils::GetRange 0.0 $MathUtils::2PI 9] { - GiD_OpenGL draw -vertex [list 0.7 [expr {0.05*cos($angle)}] [expr {0.05*sin($angle)}]] - } - GiD_OpenGL draw -end - #GiD_OpenGL draw -linewidth 1.0 -} - -#arc and double-arrow size 1 pointing to +x (arrow cone height 0.1, radius 0.05) -proc Solid::symbols::draw_point_momentum { } { - GiD_OpenGL draw -begin lines -vertex [list 0 0 0] -vertex [list 1 0 0] -end - foreach x_cone_start {0.9 0.7} x_cone_end {1 0.8} { - GiD_OpenGL draw -begin trianglefan -vertex [list $x_cone_end 0 0] - foreach angle [GidUtils::GetRange 0.0 [expr {2.0*$MathUtils::Pi}] 9] { - GiD_OpenGL draw -vertex [list $x_cone_start [expr {0.05*cos($angle)}] [expr {0.05*sin($angle)}]] - } - GiD_OpenGL draw -end - } - GiD_OpenGL draw -begin linestrip - foreach angle [GidUtils::GetRange 0.0 [expr {1.5*$MathUtils::Pi}] 13] { - GiD_OpenGL draw -vertex [list 0 [expr {0.5*cos($angle)}] [expr {0.5*sin($angle)}]] - } - GiD_OpenGL draw -end - GiD_OpenGL draw -begin trianglefan -vertex [list 0 0 -0.5] - foreach angle [GidUtils::GetRange 0.0 [expr {2.0*$MathUtils::Pi}] 9] { - GiD_OpenGL draw -vertex [list [expr {0.05*sin($angle)}] -0.1 [expr {-0.5+0.05*cos($angle)}] ] - } - GiD_OpenGL draw -end -} -######## END procs temporary defined copied from gid_draw_opengl package diff --git a/kratos.gid/apps/Solid/write/validation.tcl b/kratos.gid/apps/Solid/write/validation.tcl deleted file mode 100644 index c2d1004b3..000000000 --- a/kratos.gid/apps/Solid/write/validation.tcl +++ /dev/null @@ -1,137 +0,0 @@ - -# return 0 means ok; return [list 1 "Error message to be displayed"] -proc Solid::write::writeValidateEvent { } { - set problem_message [list ] - - # Entities assigned to parts validation - lappend problem_message {*}[Solid::write::validatePartsMesh] - - # Entities assigned to parts validation - lappend problem_message {*}[Solid::write::validateNodalConditionsMesh] - - # Entities assigned to parts validation - #lappend problem_message {*}[Solid::write::validateLoadsMesh] - - # Add more tests here - - return [list [llength $problem_message] $problem_message] -} - -proc Solid::write::validatePartsMesh {} { - set problem_messages [list ] - # Get the Parts node - set parts_un "SLParts" - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute $parts_un]/group" - # Foreach group assigned - foreach gNode [$root selectNodes $xp1] { - # Get group name - set group_name [$gNode @n] - # Get the assigned element - set element [write::getValueByNode [$gNode selectNodes "./value\[@n = 'Element'\]"]] - # Get the element available topologies - set topologies [Solid::write::GetTopologies [::Model::getElement $element]] - # Validate if the group has any of the valid topologies assigned - set has_any [Solid::write::ValidateGroupNotEmpty $group_name $topologies] - if {$has_any == 0} { - # Get the topologies to show the message - set valid_topologies [list ] - foreach topology $topologies { - lappend valid_topologies [$topology getGeometry] - } - # Add the message to the list of problems - lappend problem_messages "Parts > group: $group_name must have one of this elements assigned: $valid_topologies. Assign something in geometry and remesh" - } - } - return $problem_messages -} -proc Solid::write::validateNodalConditionsMesh {} { - set problem_messages [list ] - # Get the Nodal conditions node - set nodal_conditions_un "SLNodalConditions" - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute $nodal_conditions_un]/condition/group" - # Foreach group assigned - foreach gNode [$root selectNodes $xp1] { - # Get group name - set group_name [write::GetWriteGroupName [$gNode @n]] - # Get the assigned nodal condition - set nodal_condition [[$gNode parent] @n] - # Get the nodal condition available topologies - set topologies [list [::Model::Topology new "Point" 1 ""]] - # TODO: validate ov - # Validate if the group has any of the valid topologies assigned - set has_any [Solid::write::ValidateGroupNotEmpty $group_name $topologies] - if {$has_any == 0} { - # Get the topologies to show the message - set valid_topologies [list ] - foreach topology $topologies { - lappend valid_topologies [$topology getGeometry] - } - # Add the message to the list of problems - lappend problem_messages "Conditions > group: $group_name must have one of this elements assigned: $valid_topologies. Assign something in geometry and remesh" - } - } - return $problem_messages -} - -proc Solid::write::validateLoadsMesh {} { - set problem_messages [list ] - # Get the Conditions node - set conditions_un "SLLoads" - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute $conditions_un]/condition/group" - # Foreach group assigned - foreach gNode [$root selectNodes $xp1] { - # Get group name - set group_name [write::GetWriteGroupName [$gNode @n]] - # Get the assigned nodal condition - set condition [[$gNode parent] @n] - # Get the entity selected condition - if {[$gNode hasAttribute ov]} {set ov [$gNode getAttribute ov]} {set ov [[$gNode parent ] getAttribute ov]} - # Get the nodal condition available topologies - set topologies [Solid::write::GetTopologies [Model::getCondition $condition] ] - if {$topologies eq ""} {set topologies [list [::Model::Topology new "Point" 1 ""]]; set ov ""} - # Validate if the group has any of the valid topologies assigned - set has_any [Solid::write::ValidateGroupNotEmpty $group_name $topologies $ov] - if {$has_any == 0} { - # Get the topologies to show the message - set valid_topologies [list ] - foreach topology $topologies { - lappend valid_topologies [$topology getGeometry] - } - # Add the message to the list of problems - lappend problem_messages "Loads > group: $group_name must have one of this elements assigned: $valid_topologies. Assign something in geometry and remesh" - } - } - return $problem_messages -} - -proc Solid::write::GetTopologies { entity } { - if {$entity eq ""} {return [list ]} - return [$entity getTopologyFeatures] -} -proc Solid::write::ValidateGroupNotEmpty { group_name topologies {ov ""} } { - set any 0 - set isquadratic [write::isquadratic] - # W "$group_name ov: $ov topo: [llength $topologies] $topologies" - foreach topology $topologies { - set geo [$topology getGeometry] - if {$ov ne "" && [string tolower $geo] ne $ov} {continue} - if {$geo == "Point"} { - # W "Checking $group_name nodes: [GiD_EntitiesGroups get $group_name nodes -count]" - if {[GiD_EntitiesGroups get $group_name nodes -count] > 0} { - # TODO: check number of nodes if quadratic - set any 1 - break - } - } else { - if {[GiD_EntitiesGroups get $group_name elements -count -element_type $geo] > 0} { - # TODO: check number of nodes if quadratic - set any 1 - break - } - } - } - return $any -} \ No newline at end of file diff --git a/kratos.gid/apps/Solid/write/write.tcl b/kratos.gid/apps/Solid/write/write.tcl deleted file mode 100644 index 0aace95ea..000000000 --- a/kratos.gid/apps/Solid/write/write.tcl +++ /dev/null @@ -1,376 +0,0 @@ -namespace eval Solid::write { - variable mat_dict - variable validApps - variable ConditionsDictGroupIterators - variable NodalConditionsGroup - variable writeCoordinatesByGroups -} - -proc Solid::write::Init { } { - # Namespace variables inicialization - variable mat_dict - set mat_dict "" - variable ConditionsDictGroupIterators - variable NodalConditionsGroup - set ConditionsDictGroupIterators [dict create] - set NodalConditionsGroup [list ] - - variable validApps - set validApps [list "Solid"] - - variable writeCoordinatesByGroups - set writeCoordinatesByGroups 0 -} - -proc Solid::write::AddValidApps {appList} { - variable validApps - - lappend validApps $appList -} - -proc Solid::write::writeCustomFilesEvent { } { - WriteMaterialsFile - - write::CopyFileIntoModel "python/RunSolid.py" - set paralleltype [write::getValue ParallelType] - set orig_name "RunSolid.py" - - write::RenameFileInModel $orig_name "MainKratos.py" -} - -proc Solid::write::SetCoordinatesByGroups {value} { - variable writeCoordinatesByGroups - set writeCoordinatesByGroups $value -} - -# MDPA Blocks - -proc Solid::write::writeModelPartEvent { } { - variable writeCoordinatesByGroups - variable validApps - variable ConditionsDictGroupIterators - write::initWriteData "SLParts" "SLMaterials" - - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::writeMaterials $validApps - #write::writeTables - if {$writeCoordinatesByGroups} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} - write::writeElementConnectivities - writeConditions - set basicConds [write::writeBasicSubmodelParts [getLastConditionId]] - set ConditionsDictGroupIterators [dict merge $ConditionsDictGroupIterators $basicConds] - writeMeshes - # W $ConditionsDictGroupIterators - #writeCustomBlock -} - - -proc Solid::write::writeConditions { } { - variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [write::writeConditions "SLLoads"] -} - -proc Solid::write::writeMeshes { } { - - write::writePartSubModelPart - - # Solo Malla , no en conditions - write::writeNodalConditions "SLNodalConditions" - - # A Condition y a meshes-> salvo lo que no tenga topologia - writeLoads -} - -proc Solid::write::writeLoads { } { - variable ConditionsDictGroupIterators - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "SLLoads"]/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" - } - } -} - - -proc Solid::write::writeCustomBlock { } { - write::WriteString "Begin Custom" - write::WriteString "Custom write for Solid, any app can call me, so be careful!" - write::WriteString "End Custom" - write::WriteString "" -} - -proc Solid::write::getLastConditionId { } { - variable ConditionsDictGroupIterators - set top 1 - if {$ConditionsDictGroupIterators ne ""} { - foreach {group iters} $ConditionsDictGroupIterators { - set top [expr max($top,[lindex $iters 1])] - } - } - return $top -} - -# Custom files -proc Solid::write::WriteMaterialsFile { } { - variable validApps - - set filename "Materials.json" - set mats_json [Solid::write::getPropertiesList SLParts] - - write::OpenFile $filename - write::WriteJSON $mats_json - write::CloseFile -} - -proc Solid::write::WriteMaterialsFileOld { } { - variable validApps - - set filename "Materials.json" - set mats_json [Solid::write::getPropertiesList SLParts] - - write::OpenFile $filename - write::WriteJSON $mats_json - write::CloseFile - - write::OpenFile "materials.py" - - set str " -# Importing the Kratos Library -from KratosMultiphysics import * -from KratosMultiphysics.SolidMechanicsApplication import * -from beam_sections_python_utility import SetProperties -from beam_sections_python_utility import SetMaterialProperties - -def AssignMaterial(Properties): - # material for solid material" - foreach {part mat} [write::getMatDict] { - if {[dict get $mat APPID] in $validApps} { - set law_name [dict get $mat ConstitutiveLaw] - set law_type [[Model::getConstitutiveLaw $law_name] getAttribute "Type"] - set public_name [[Model::getConstitutiveLaw $law_name] getAttribute "pn"] - if {$law_type eq "1D_UR"} { - append str " - prop_id = [dict get $mat MID]; - prop = Properties\[prop_id\] -" - if {$public_name eq "Circular"} { - append str " - section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat DIAMETER]) - prop = SetProperties(section_type,prop_list,prop) -" - } elseif {$public_name eq "Tubular"} { - append str " - section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat DIAMETER]) - prop_list.append([dict get $mat THICKNESS]) - prop = SetProperties(section_type,prop_list,prop) -" - } elseif {$public_name eq "Rectangular"} { - append str " - section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat HEIGHT]) - prop_list.append([dict get $mat WIDTH]) - prop = SetProperties(section_type,prop_list,prop) -" - } elseif {$public_name eq "UserDefined"} { - append str " - section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat AREA]) - prop_list.append([dict get $mat INERTIA_X]) - prop_list.append([dict get $mat INERTIA_Y]) - prop = SetProperties(section_type,prop_list,prop) -" - } elseif {$public_name eq "UserParameters"} { - append str " - section_type = \"UserDefined\" - prop_list = \[\] - prop_list.append([dict get $mat YOUNGxAREA]) - prop_list.append([dict get $mat SHEARxREDUCED_AREA]) - prop_list.append([dict get $mat YOUNGxINERTIA_X]) - prop_list.append([dict get $mat YOUNGxINERTIA_Y]) - prop_list.append([dict get $mat SHEARxPOLAR_INERTIA]) - prop = SetMaterialProperties(section_type,prop_list,prop) -" - } else { - append str " - section_type = \"$public_name\" - prop_list = \[\] - prop_list.append([dict get $mat SIZE]) - prop = SetProperties(section_type,prop_list,prop) -" - } - } { - append str " - prop_id = [dict get $mat MID]; - prop = Properties\[prop_id\] - mat = [dict get $mat ConstitutiveLaw]() - prop.SetValue(CONSTITUTIVE_LAW, mat.Clone()) -" - - } - } - } - -if 0 { - foreach {part mat} [write::getMatDict] { - if {[dict get $mat APPID] in $validApps} { - append str " - prop_id = [dict get $mat MID]; - prop = Properties\[prop_id\] - mat = [dict get $mat ConstitutiveLaw]() - prop.SetValue(CONSTITUTIVE_LAW, mat.Clone()) - " - } - } -} - write::WriteString $str - write::CloseFile - -} - - -proc Solid::write::ProcessVectorFunctionComponents { groupNode condition process} { - set processDict [write::GetProcessHeader $groupNode $process $condition] - set val [write::GetInputValue $groupNode [$process getInputPn component]] - foreach i $val { - if {$i == "null"} { - lappend value null - } { - lappend value $i - } - } - - dict set processDict Parameters compound_assignment [write::GetInputValue $groupNode [$process getInputPn compound_assignment]] - dict set processDict Parameters value $value - - - return $processDict -} - -proc Solid::write::getPropertiesList {parts_un} { - set mat_dict [write::getMatDict] - set props_dict [dict create] - set props [list ] - set sections [list ] - - set python_module "assign_materials_process" - set process_name "AssignMaterialsProcess" - set help "This process creates a material and assigns its properties" - - #set doc $gid_groups_conds::doc - #set root [$doc documentElement] - set root [customlib::GetBaseRoot] - - set xp1 "[spdAux::getRoute $parts_un]/group" - foreach gNode [$root selectNodes $xp1] { - set group [get_domnode_attribute $gNode n] - set sub_model_part [write::getSubModelPartId Parts $group] - if { [dict exists $mat_dict $group] } { - set law_id [dict get $mat_dict $group MID] - set law_name [dict get $mat_dict $group ConstitutiveLaw] - set law_type [[Model::getConstitutiveLaw $law_name] getAttribute "Type"] - set mat_name [dict get $mat_dict $group Material] - - if {$law_type eq "1D_UR"} { - set python_module "assign_sections_process" - set process_name "AssignSectionsProcess" - set help "This process creates a section and assigns its properties" - } - - set prop_dict [dict create] - set kratos_module [[Model::getConstitutiveLaw $law_name] getAttribute "kratos_module"] - dict set prop_dict "python_module" $python_module - dict set prop_dict "kratos_module" $kratos_module - dict set prop_dict "help" $help - dict set prop_dict "process_name" $process_name - - set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set variables_dict [dict create] - foreach prop [dict keys [dict get $mat_dict $group] ] { - if {$prop ni $exclusionList} { - dict set variables_list $prop [write::getFormattedValue [dict get $mat_dict $group $prop]] - } - } - - set material_dict [dict create] - dict set material_dict "model_part_name" $sub_model_part - dict set material_dict "properties_id" $law_id - dict set material_dict "material_name" $mat_name - - if {$law_type eq "1D_UR"} { - set public_name [[Model::getConstitutiveLaw $law_name] getAttribute "pn"] - dict set material_dict "section_type" $public_name - } else { - set law_full_name [join [list "KratosMultiphysics" $kratos_module $law_name] "."] - dict set material_dict constitutive_law [dict create name $law_full_name] - } - dict set material_dict variables $variables_list - dict set material_dict tables dictnull - dict set prop_dict Parameters $material_dict - - lappend props $prop_dict - } - - } - - dict set props_dict material_models_list $props - - return $props_dict -} - -proc Solid::write::GetUsedElements { {get "Objects"} } { - set xp1 "[spdAux::getRoute SLParts]/group" - set lista [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set elem_name [get_domnode_attribute [$gNode selectNodes ".//value\[@n='Element']"] v] - set e [Model::getElement $elem_name] - if {$get eq "Name"} { set e [$e getName] } - lappend lista $e - } - return $lista -} - -proc Solid::write::GetDefaultOutputDict { {appid ""} } { - set outputDict [dict create] - set resultDict [dict create] - - if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} - set GiDPostDict [dict create] - dict set GiDPostDict GiDPostMode [write::getValue $results_UN GiDPostMode] - dict set GiDPostDict WriteDeformedMeshFlag [write::getValue $results_UN GiDWriteMeshFlag] - dict set GiDPostDict WriteConditionsFlag [write::getValue $results_UN GiDWriteConditionsFlag] - dict set GiDPostDict MultiFileFlag [write::getValue $results_UN GiDMultiFileFlag] - dict set resultDict gidpost_flags $GiDPostDict - - dict set resultDict file_label [write::getValue $results_UN FileLabel] - set outputCT [write::getValue $results_UN OutputControlType] - dict set resultDict output_control_type $outputCT - if {$outputCT eq "time"} {set frequency [write::getValue $results_UN OutputDeltaTime]} {set frequency [write::getValue $results_UN OutputDeltaStep]} - dict set resultDict output_interval $frequency - - dict set resultDict node_output [write::getValue $results_UN NodeOutput] - - #dict set resultDict plane_output [write::GetCutPlanesList $results_UN] - - dict set resultDict nodal_results [write::GetResultsList $results_UN OnNodes] - dict set resultDict gauss_point_results [write::GetResultsList $results_UN OnElement] - - dict set outputDict "result_file_configuration" $resultDict - #dict set outputDict "point_data_configuration" [write::GetEmptyList] - return $outputDict -} - -Solid::write::Init diff --git a/kratos.gid/apps/Solid/write/writeProjectParameters.tcl b/kratos.gid/apps/Solid/write/writeProjectParameters.tcl deleted file mode 100644 index d1f6b228b..000000000 --- a/kratos.gid/apps/Solid/write/writeProjectParameters.tcl +++ /dev/null @@ -1,177 +0,0 @@ -# Project Parameters - -proc Solid::write::getParametersDict { } { - set model_name "Solid_Domain" - set projectParametersDict [dict create] - - # Problem data - set problemDataDict [dict create] - - # Add items - set model_name [Kratos::GetModelName] - dict set problemDataDict problem_name $model_name - - # Parallelization - set paralleltype [write::getValue ParallelType] - #dict set problemDataDict "parallel_type" $paralleltype - if {$paralleltype eq "OpenMP"} { - #set nthreads [write::getValue Parallelization OpenMPNumberOfThreads] - #dict set problemDataDict NumberofThreads $nthreads - } else { - #set nthreads [write::getValue Parallelization MPINumberOfProcessors] - #dict set problemDataDict NumberofProcessors $nthreads - } - - set echo_level [write::getValue Results EchoLevel] - dict set problemDataDict echo_level $echo_level - - # Add ProblemData to Parameters - dict set projectParametersDict problem_data $problemDataDict - - # Time settings - set timeDataDict [dict create] - dict set timeDataDict time_step [write::getValue SLTimeParameters DeltaTime] - dict set timeDataDict start_time [write::getValue SLTimeParameters StartTime] - dict set timeDataDict end_time [write::getValue SLTimeParameters EndTime] - - dict set projectParametersDict time_settings $timeDataDict - - # Model data - # Create section - set modelDataDict [dict create] - - # Add items - dict set modelDataDict model_name $model_name - set nDim [expr [string range [write::getValue nDim] 0 0] ] - dict set modelDataDict dimension $nDim - - dict set modelDataDict domain_parts_list [write::getSubModelPartNames "SLParts"] - dict set modelDataDict processes_parts_list [write::getSubModelPartNames "SLNodalConditions" "SLLoads"] - - # Add model import settings - set importDataDict [dict create] - #dict set importDataDict type "mdpa" - dict set importDataDict name $model_name - #dict set importDataDict label 0 - dict set modelDataDict input_file_settings $importDataDict - - # Add ModelData to Parameters - dict set projectParametersDict model_settings $modelDataDict - - # Solver settings - set solverDataDict [dict create] - - set currentStrategyId [write::getValue SLSolStrat] - set strategy_write_name [[::Model::GetSolutionStrategy $currentStrategyId] getAttribute "python_module"] - dict set solverDataDict solver_type $strategy_write_name - - # Solver parameters - set solverParametersDict [dict create] - - # Time integration settings - set integrationDataDict [dict create] - - dict set integrationDataDict solution_type [write::getValue SLSoluType] - - set solutiontype [write::getValue SLSoluType] - if {$solutiontype ne "Dynamic"} { - dict set integrationDataDict integration_method [write::getValue SLScheme] - dict set integrationDataDict analysis_type [write::getValue SLAnalysisType] - } else { - dict set integrationDataDict time_integration [write::getValue SLSolStrat] - dict set integrationDataDict integration_method [write::getValue SLScheme] - } - - # Solving strategy settings - set strategyDataDict [dict create] - - # Solution strategy parameters and Solvers - set strategyDataDict [dict merge $strategyDataDict [write::getSolutionStrategyParametersDict] ] - - # Get integration order as term for the integration settings - set exist_time_integration [dict exists $strategyDataDict time_integration_order] - if {$exist_time_integration eq 1} { - dict set integrationDataDict time_integration_order [dict get $strategyDataDict time_integration_order] - dict unset strategyDataDict time_integration_order - } - - dict set solverParametersDict time_integration_settings $integrationDataDict - - # Get convergence criterion settings - set convergenceDataDict [dict create] - set exist_convergence_criterion [dict exists $strategyDataDict convergence_criterion] - if {$exist_convergence_criterion eq 1} { - dict set convergenceDataDict convergence_criterion [dict get $strategyDataDict convergence_criterion] - dict unset strategyDataDict convergence_criterion - set exist_variable_tolerances [dict exists $strategyDataDict variable_relative_tolerance] - if {$exist_variable_tolerances eq 1} { - dict set convergenceDataDict variable_relative_tolerance [dict get $strategyDataDict variable_relative_tolerance] - dict set convergenceDataDict variable_absolute_tolerance [dict get $strategyDataDict variable_absolute_tolerance] - dict unset strategyDataDict variable_relative_tolerance - dict unset strategyDataDict variable_absolute_tolerance - } - set exist_residual_tolerances [dict exists $strategyDataDict residual_relative_tolerance] - if {$exist_residual_tolerances eq 1} { - dict set convergenceDataDict residual_relative_tolerance [dict get $strategyDataDict residual_relative_tolerance] - dict set convergenceDataDict residual_absolute_tolerance [dict get $strategyDataDict residual_absolute_tolerance] - dict unset strategyDataDict residual_relative_tolerance - dict unset strategyDataDict residual_absolute_tolerance - } - } - - dict set solverParametersDict convergence_criterion_settings $convergenceDataDict - - set strategy_data_size [dict size $strategyDataDict] - if { $strategy_data_size ne 0 } { - dict set solverParametersDict solving_strategy_settings $strategyDataDict - } - - # Linear solver settings - set solverParametersDict [dict merge $solverParametersDict [write::getSolversParametersDict Solid] ] - - # Add Dofs - dict set solverParametersDict dofs [list {*}[DofsInElements] ] - - dict set solverDataDict Parameters $solverParametersDict - - dict set projectParametersDict solver_settings $solverDataDict - - # Lists of processes - set nodal_conditions_dict [write::getConditionsParametersDict SLNodalConditions "Nodal"] - dict set projectParametersDict constraints_process_list $nodal_conditions_dict - - dict set projectParametersDict loads_process_list [write::getConditionsParametersDict SLLoads] - - # GiD output configuration - dict set projectParametersDict output_configuration [Solid::write::GetDefaultOutputDict] - - # restart options - set restartDict [dict create ] - dict set restartDict SaveRestart false - dict set restartDict RestartFrequency 0 - dict set restartDict LoadRestart false - dict set restartDict Restart_Step 0 - #dict set projectParametersDict restart_options $restartDict - - return $projectParametersDict -} - -proc Solid::write::DofsInElements { } { - set dofs [list ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute SLParts]/group/value\[@n='Element'\]" - set elements [$root selectNodes $xp1] - foreach element_node $elements { - set elemid [$element_node @v] - set elem [Model::getElement $elemid] - foreach dof [split [$elem getAttribute "Dofs"] ","] { - if {$dof ni $dofs} {lappend dofs $dof} - } - } - return {*}$dofs -} - -proc Solid::write::writeParametersEvent { } { - write::WriteJSON [getParametersDict] - write::SetParallelismConfiguration -} diff --git a/kratos.gid/apps/Solid/xml/BoundaryConditions.spd b/kratos.gid/apps/Solid/xml/BoundaryConditions.spd deleted file mode 100644 index fc68d449e..000000000 --- a/kratos.gid/apps/Solid/xml/BoundaryConditions.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/Solid/xml/Conditions.xml b/kratos.gid/apps/Solid/xml/Conditions.xml deleted file mode 100644 index 43c9a5463..000000000 --- a/kratos.gid/apps/Solid/xml/Conditions.xml +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/ConstitutiveLaws.xml b/kratos.gid/apps/Solid/xml/ConstitutiveLaws.xml deleted file mode 100644 index ea6ea7cc6..000000000 --- a/kratos.gid/apps/Solid/xml/ConstitutiveLaws.xml +++ /dev/null @@ -1,694 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/DeprecatedProcesses.xml b/kratos.gid/apps/Solid/xml/DeprecatedProcesses.xml deleted file mode 100644 index 5de58ec3f..000000000 --- a/kratos.gid/apps/Solid/xml/DeprecatedProcesses.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Elements.xml b/kratos.gid/apps/Solid/xml/Elements.xml deleted file mode 100644 index 21a6ec0f1..000000000 --- a/kratos.gid/apps/Solid/xml/Elements.xml +++ /dev/null @@ -1,958 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Fields.spd b/kratos.gid/apps/Solid/xml/Fields.spd deleted file mode 100644 index 4d781b83e..000000000 --- a/kratos.gid/apps/Solid/xml/Fields.spd +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Functions.spd b/kratos.gid/apps/Solid/xml/Functions.spd deleted file mode 100644 index e2a9567a6..000000000 --- a/kratos.gid/apps/Solid/xml/Functions.spd +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kratos.gid/apps/Solid/xml/Loads.spd b/kratos.gid/apps/Solid/xml/Loads.spd deleted file mode 100644 index f9fc3166e..000000000 --- a/kratos.gid/apps/Solid/xml/Loads.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/Solid/xml/Main.spd b/kratos.gid/apps/Solid/xml/Main.spd deleted file mode 100644 index 14b4000ec..000000000 --- a/kratos.gid/apps/Solid/xml/Main.spd +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Materials.spd b/kratos.gid/apps/Solid/xml/Materials.spd deleted file mode 100644 index 51f040cd2..000000000 --- a/kratos.gid/apps/Solid/xml/Materials.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/Solid/xml/Materials.xml b/kratos.gid/apps/Solid/xml/Materials.xml deleted file mode 100644 index 5c769b544..000000000 --- a/kratos.gid/apps/Solid/xml/Materials.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/NodalConditions.xml b/kratos.gid/apps/Solid/xml/NodalConditions.xml deleted file mode 100644 index 1a409ff4e..000000000 --- a/kratos.gid/apps/Solid/xml/NodalConditions.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Parts.spd b/kratos.gid/apps/Solid/xml/Parts.spd deleted file mode 100644 index 2ba7cf0f1..000000000 --- a/kratos.gid/apps/Solid/xml/Parts.spd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Processes.xml b/kratos.gid/apps/Solid/xml/Processes.xml deleted file mode 100644 index 386f279ef..000000000 --- a/kratos.gid/apps/Solid/xml/Processes.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Procs.spd b/kratos.gid/apps/Solid/xml/Procs.spd deleted file mode 100644 index 172497ac8..000000000 --- a/kratos.gid/apps/Solid/xml/Procs.spd +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kratos.gid/apps/Solid/xml/Results.spd b/kratos.gid/apps/Solid/xml/Results.spd deleted file mode 100644 index 9e10fab2a..000000000 --- a/kratos.gid/apps/Solid/xml/Results.spd +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/SolutionStrategy.spd b/kratos.gid/apps/Solid/xml/SolutionStrategy.spd deleted file mode 100644 index 63761ecdb..000000000 --- a/kratos.gid/apps/Solid/xml/SolutionStrategy.spd +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/StageInfo.spd b/kratos.gid/apps/Solid/xml/StageInfo.spd deleted file mode 100644 index cbb7c6d35..000000000 --- a/kratos.gid/apps/Solid/xml/StageInfo.spd +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/Strategies.xml b/kratos.gid/apps/Solid/xml/Strategies.xml deleted file mode 100644 index 23b66efb9..000000000 --- a/kratos.gid/apps/Solid/xml/Strategies.xml +++ /dev/null @@ -1,261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Solid/xml/XmlController.tcl b/kratos.gid/apps/Solid/xml/XmlController.tcl deleted file mode 100644 index b4c76bdc7..000000000 --- a/kratos.gid/apps/Solid/xml/XmlController.tcl +++ /dev/null @@ -1,152 +0,0 @@ -namespace eval Solid::xml { - variable dir -} - -proc Solid::xml::Init { } { - variable dir - Model::InitVariables dir $Solid::dir - - Model::getSolutionStrategies Strategies.xml - Model::getElements Elements.xml - Model::getMaterials Materials.xml - Model::getNodalConditions NodalConditions.xml - Model::getConstitutiveLaws ConstitutiveLaws.xml - Model::getProcesses DeprecatedProcesses.xml - Model::getProcesses Processes.xml - Model::getConditions Conditions.xml - Model::getSolvers "../../Common/xml/Solvers.xml" - - # Model::ForgetElement SmallDisplacementBbarElement2D - # Model::ForgetElement SmallDisplacementBbarElement3D - - # This solver is not working in kratos June 01 2018 - Model::ForgetSolver GMRESSolver -} - -proc Solid::xml::getUniqueName {name} { - return SL$name -} - -proc Solid::xml::CustomTree { args } { - - set root [customlib::GetBaseRoot] - - #set icon data as default - foreach node [$root getElementsByTagName value ] { $node setAttribute icon data } - - #intervals - spdAux::SetValueOnTreeItem icon timeIntervals Intervals - foreach node [$root selectNodes "[spdAux::getRoute Intervals]/blockdata"] { - $node setAttribute icon select - } - - #conditions - foreach node [$root selectNodes "[spdAux::getRoute SLNodalConditions]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated - } - - #loads - foreach node [$root selectNodes "[spdAux::getRoute SLLoads]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated - } - - #materials - foreach node [$root selectNodes "[spdAux::getRoute SLMaterials]/blockdata" ] { - $node setAttribute icon select - } - - #solver settings - foreach node [$root selectNodes "[spdAux::getRoute SLStratSection]/container\[@n = 'linear_solver_settings'\]" ] { - $node setAttribute icon solvers - } - - #linear solver parameters - spdAux::SetValueOnTreeItem v 2000 SLImplicitlinear_solver_settings max_iteration - spdAux::SetValueOnTreeItem v 1e-6 SLImplicitlinear_solver_settings tolerance - spdAux::SetValueOnTreeItem v cg SLImplicitlinear_solver_settings krylov_type - - #results - foreach result [list SPRING_2D BALLAST_2D AXIAL_TURN_2D AXIAL_VELOCITY_TURN_2D AXIAL_ACCELERATION_TURN_2D SPRING_3D BALLAST_3D AXIAL_TURN_3D AXIAL_VELOCITY_TURN_3D AXIAL_ACCELERATION_TURN_3D] { - set result_node [$root selectNodes "[spdAux::getRoute NodalResults]/value\[@n = '$result'\]"] - if { $result_node ne "" } {$result_node delete} - } - - #units - [$root selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits - - # Initial state for Strategy Parameters - # set solutionType [get_domnode_attribute [$root selectNodes [spdAux::getRoute SLSoluType]] v] - # if {$solutionType ne "Dynamic"} { - # [$root selectNodes [spdAux::getRoute SLStratParams]] setAttribute state hidden - # } -} - - -proc Solid::xml::ProcGetSolutionStrategiesSolid { domNode args } { - set names [list ] - set pnames [list ] - set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute SLSoluType]] v] - set Sols [::Model::GetSolutionStrategies [list "SolutionType" $solutionType] ] - set ids [list ] - foreach ss $Sols { - lappend names [$ss getName] - lappend pnames [$ss getName] - lappend pnames [$ss getPublicName] - } - $domNode setAttribute values [join $names ","] - set dv [lindex $names 0] - if {[$domNode getAttribute v] eq ""} {$domNode setAttribute v $dv; spdAux::RequestRefresh} - if {[$domNode getAttribute v] ni $names} {$domNode setAttribute v $dv; spdAux::RequestRefresh} - - return [join $pnames ","] -} - -proc Solid::xml::ProcCheckNodalConditionStateSolid {domNode args} { - # Overwritten the base function to add Solution Type restrictions - set parts_un SLParts - if {[spdAux::getRoute $parts_un] ne ""} { - set conditionId [$domNode @n] - set elems [$domNode selectNodes "[spdAux::getRoute $parts_un]/group/value\[@n='Element'\]"] - set elemnames [list ] - foreach elem $elems { lappend elemnames [$elem @v]} - set elemnames [lsort -unique $elemnames] - - set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute SLSoluType]] v] - set params [list analysis_type $solutionType] - if {[::Model::CheckElementsNodalCondition $conditionId $elemnames $params]} {return "normal"} else {return "hidden"} - } {return "normal"} -} - -proc Solid::xml::ProcCheckGeometrySolid {domNode args} { - set ret "surface" - if {$::Model::SpatialDimension eq "3D"} { - set ret "line,surface,volume" - } elseif {$::Model::SpatialDimension eq "2D"} { - set ret "line,surface" - } elseif {$::Model::SpatialDimension eq "1D"} { - set ret "line" - } - return $ret -} - -proc Solid::xml::ProcCheckStratParamsState {domNode args} { - set ret "normal" - - set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute SLSoluType]] v] - set analysisType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute SLAnalysisType]] v] - - if {$solutionType ne "Dynamic"} { - # If Static or Quasi-static - if {$analysisType eq "Linear"} { - # If linear -> hide - set ret "hidden" - } - } - - return $ret -} - - -Solid::xml::Init From 73a3ed0b6db3bac34b4bc2bf7e1441623a4d568f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 11:28:00 +0200 Subject: [PATCH 343/556] remove old apps --- kratos.gid/kratos_default.spd | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 6e125ff68..e77990122 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -9,7 +9,6 @@ - From e9268a1802fa774a1332b22fbe51ecceb5b37cb5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 11:56:47 +0200 Subject: [PATCH 344/556] Thermic launcher --- kratos.gid/apps/FluidLauncher/start.tcl | 2 -- kratos.gid/apps/ThermicLauncher/app.json | 18 ++++++++++++++++++ kratos.gid/apps/ThermicLauncher/start.tcl | 7 ++----- 3 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 kratos.gid/apps/ThermicLauncher/app.json diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index 896daf11f..194856220 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -7,8 +7,6 @@ proc ::FluidLauncher::Init { app } { # TODO: Get apps from json set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM] - # Allow to open the tree - set ::spdAux::TreeVisibility 0 ::FluidLauncher::FluidAppSelectorWindow } diff --git a/kratos.gid/apps/ThermicLauncher/app.json b/kratos.gid/apps/ThermicLauncher/app.json new file mode 100644 index 000000000..85a7fc72b --- /dev/null +++ b/kratos.gid/apps/ThermicLauncher/app.json @@ -0,0 +1,18 @@ +{ + "id": "Thermic Launcher", + "name": "Thermic", + "script_files": [ + "start.tcl" + ], + "start_script":"::ThermicLauncher::Init", + "requeriments":{ + "apps":["ConvectionDiffusion", "Buoyancy", "ConjugateHeatTransfer"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": true, + "intervals": false, + "wizard": false + } +} diff --git a/kratos.gid/apps/ThermicLauncher/start.tcl b/kratos.gid/apps/ThermicLauncher/start.tcl index 28c8e955d..4ac929ddd 100644 --- a/kratos.gid/apps/ThermicLauncher/start.tcl +++ b/kratos.gid/apps/ThermicLauncher/start.tcl @@ -2,12 +2,11 @@ namespace eval ::ThermicLauncher { variable available_apps } -proc ::ThermicLauncher::Init { } { +proc ::ThermicLauncher::Init { app } { variable available_apps + # TODO: Get apps from json set available_apps [list ConvectionDiffusion Buoyancy ConjugateHeatTransfer] - # Allow to open the tree - set ::spdAux::TreeVisibility 0 ::ThermicLauncher::AppSelectorWindow } @@ -67,5 +66,3 @@ proc ::ThermicLauncher::ChangeAppTo {appid} { spdAux::SetSpatialDimmension undefined apps::setActiveApp $appid } - -::ThermicLauncher::Init From 9106a0f71f7e09cd3b4bd7076d39c70e8f29b381 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 12:26:17 +0200 Subject: [PATCH 345/556] Convection diffusion --- kratos.gid/apps/ConvectionDiffusion/app.json | 45 +++++++++++++++ .../examples/HeatedSquare.tcl | 19 ++++--- .../ConvectionDiffusion/examples/examples.tcl | 8 +-- .../ConvectionDiffusion/examples/examples.xml | 2 +- kratos.gid/apps/ConvectionDiffusion/start.tcl | 55 ++++--------------- .../apps/ConvectionDiffusion/write/write.tcl | 40 +++++++------- .../write/writeProjectParameters.tcl | 8 +-- .../ConvectionDiffusion/xml/XmlController.tcl | 16 ++---- 8 files changed, 98 insertions(+), 95 deletions(-) create mode 100644 kratos.gid/apps/ConvectionDiffusion/app.json diff --git a/kratos.gid/apps/ConvectionDiffusion/app.json b/kratos.gid/apps/ConvectionDiffusion/app.json new file mode 100644 index 000000000..ab6b13cdd --- /dev/null +++ b/kratos.gid/apps/ConvectionDiffusion/app.json @@ -0,0 +1,45 @@ +{ + "id": "ConvectionDiffusion", + "name": "Convection Diffusion", + "prefix": "CNVDFF", + "themed": false, + "kratos_name": "ConvectionDiffusionApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/HeatedSquare.tcl", + "xml/xmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::ConvectionDiffusion::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "CNVDFFParts", + "nodal_conditions": "CNVDFFNodalConditions", + "conditions": "CNVDFFBC", + "materials": "CNVDFFMaterials" + }, + "write": { + "coordinates": "all", + "materials_file": "ConvectionDiffusionMaterials.json", + "properties_location": "json", + "model_part_name": "ThermalModelPart", + "output_model_part_name": "thermal_computing_domain" + }, + "main_launch_file": "KratosConvectionDiffusion.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl index b480a6918..84c22e34d 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl @@ -1,11 +1,14 @@ +namespace eval ::ConvectionDiffusion::examples::HeatedSquare { -proc ::ConvectionDiffusion::examples::HeatedSquare {args} { +} + +proc ::ConvectionDiffusion::examples::HeatedSquare::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawSquareGeometry$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension AssignGroups$::Model::SpatialDimension TreeAssignation$::Model::SpatialDimension @@ -17,7 +20,7 @@ proc ::ConvectionDiffusion::examples::HeatedSquare {args} { # Draw Geometry -proc ConvectionDiffusion::examples::DrawSquareGeometry3D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::DrawGeometry3D {args} { # DrawSquareGeometry2D # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 @@ -25,7 +28,7 @@ proc ConvectionDiffusion::examples::DrawSquareGeometry3D {args} { # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc ConvectionDiffusion::examples::DrawSquareGeometry2D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -54,7 +57,7 @@ proc ConvectionDiffusion::examples::DrawSquareGeometry2D {args} { # Group assign -proc ConvectionDiffusion::examples::AssignGroups2D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::AssignGroups2D {args} { # Create the groups GiD_Groups create Body GiD_Groups edit color Body "#26d1a8ff" @@ -77,7 +80,7 @@ proc ConvectionDiffusion::examples::AssignGroups2D {args} { GiD_EntitiesGroups assign Bottom_Wall lines 4 } -proc ConvectionDiffusion::examples::AssignGroups3D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::AssignGroups3D {args} { # Create the groups # GiD_Groups create Fluid # GiD_Groups edit color Fluid "#26d1a8ff" @@ -101,11 +104,11 @@ proc ConvectionDiffusion::examples::AssignGroups3D {args} { } # Tree assign -proc ConvectionDiffusion::examples::TreeAssignation3D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::TreeAssignation3D {args} { # TreeAssignationCylinderInFlow2D # AddCuts } -proc ConvectionDiffusion::examples::TreeAssignation2D {args} { +proc ::ConvectionDiffusion::examples::HeatedSquare::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl index d56503911..6f4df8a4e 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl @@ -1,9 +1,3 @@ -namespace eval ConvectionDiffusion::examples { +namespace eval ::ConvectionDiffusion::examples { } - -proc ConvectionDiffusion::examples::Init { } { - uplevel #0 [list source [file join $::ConvectionDiffusion::dir examples HeatedSquare.tcl]] -} - -ConvectionDiffusion::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml index 240b3a735..eb6f7b2ef 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/start.tcl b/kratos.gid/apps/ConvectionDiffusion/start.tcl index 9801fa4eb..bc236b737 100644 --- a/kratos.gid/apps/ConvectionDiffusion/start.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/start.tcl @@ -1,55 +1,22 @@ namespace eval ::ConvectionDiffusion { # Variable declaration - variable id variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::ConvectionDiffusion::Init { } { +proc ::ConvectionDiffusion::Init { app } { # Variable initialization - variable id + variable _app variable dir - variable prefix - variable attributes - variable kratos_name - set id ConvectionDiffusion - set kratos_name "ConvectionDiffusionApplication" + set _app $app set dir [apps::getMyDir "ConvectionDiffusion"] - set attributes [dict create] - - set prefix CNVDFF - set ::Model::ValidSpatialDimensions [list 2D 3D] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - dict set attributes UseIntervals 1 - - LoadMyFiles - #::spdAux::CreateDimensionWindow -} - -proc ::ConvectionDiffusion::LoadMyFiles { } { - variable id - variable dir - - #uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - if {[apps::getActiveAppId] eq $id} { - uplevel #0 [list source [file join $dir examples examples.tcl]] - } -} - -proc ::ConvectionDiffusion::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + + # XML init event + ::ConvectionDiffusion::xml::Init + ::ConvectionDiffusion::write::Init } -::ConvectionDiffusion::Init +proc ::ConvectionDiffusion::GetAttribute {name} {return [$::ConvectionDiffusion::_app getProperty $name]} +proc ::ConvectionDiffusion::GetUniqueName {name} {return [$::ConvectionDiffusion::_app getUniqueName $name]} +proc ::ConvectionDiffusion::GetWriteProperty {name} {return [$::ConvectionDiffusion::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 4c2cff0b4..2c33714f9 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -1,11 +1,11 @@ -namespace eval ConvectionDiffusion::write { +namespace eval ::ConvectionDiffusion::write { # Namespace variables declaration variable ConvectionDiffusionConditions variable writeCoordinatesByGroups variable writeAttributes } -proc ConvectionDiffusion::write::Init { } { +proc ::ConvectionDiffusion::write::Init { } { # Namespace variables inicialization variable ConvectionDiffusionConditions set ConvectionDiffusionConditions(temp) 0 @@ -25,7 +25,7 @@ proc ConvectionDiffusion::write::Init { } { } # Events -proc ConvectionDiffusion::write::writeModelPartEvent { } { +proc ::ConvectionDiffusion::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -57,7 +57,7 @@ proc ConvectionDiffusion::write::writeModelPartEvent { } { } -proc ConvectionDiffusion::write::writeCustomFilesEvent { } { +proc ::ConvectionDiffusion::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile False @@ -67,14 +67,14 @@ proc ConvectionDiffusion::write::writeCustomFilesEvent { } { write::RenameFileInModel $orig_name "MainKratos.py" } -proc ConvectionDiffusion::write::Validate {} { +proc ::ConvectionDiffusion::write::Validate {} { set err "" set root [customlib::GetBaseRoot] return $err } -proc ConvectionDiffusion::write::getLastConditionId { } { +proc ::ConvectionDiffusion::write::getLastConditionId { } { variable ConvectionDiffusionConditions set top 1 # Kratos::PrintArray ConvectionDiffusionConditions @@ -86,25 +86,25 @@ proc ConvectionDiffusion::write::getLastConditionId { } { return $top } -proc ConvectionDiffusion::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { +proc ::ConvectionDiffusion::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } # MDPA Blocks -proc ConvectionDiffusion::write::writeProperties { } { +proc ::ConvectionDiffusion::write::writeProperties { } { # Begin Properties write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc ConvectionDiffusion::write::writeConditions { } { +proc ::ConvectionDiffusion::write::writeConditions { } { writeBoundaryConditions } -proc ConvectionDiffusion::write::writeBoundaryConditions { } { +proc ::ConvectionDiffusion::write::writeBoundaryConditions { } { variable ConvectionDiffusionConditions set BCUN [GetAttribute conditions_un] @@ -133,13 +133,13 @@ proc ConvectionDiffusion::write::writeBoundaryConditions { } { } } -proc ConvectionDiffusion::write::writeMeshes { } { +proc ::ConvectionDiffusion::write::writeMeshes { } { write::writePartSubModelPart write::writeNodalConditions [GetAttribute nodal_conditions_un] writeConditionsMesh } -proc ConvectionDiffusion::write::writeConditionsMesh { } { +proc ::ConvectionDiffusion::write::writeConditionsMesh { } { variable ConvectionDiffusionConditions set root [customlib::GetBaseRoot] @@ -181,37 +181,35 @@ proc ConvectionDiffusion::write::writeConditionsMesh { } { } } -proc ConvectionDiffusion::write::GetAttribute {att} { +proc ::ConvectionDiffusion::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc ConvectionDiffusion::write::GetAttributes {} { +proc ::ConvectionDiffusion::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc ConvectionDiffusion::write::SetAttribute {att val} { +proc ::ConvectionDiffusion::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc ConvectionDiffusion::write::AddAttribute {att val} { +proc ::ConvectionDiffusion::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc ConvectionDiffusion::write::AddAttributes {configuration} { +proc ::ConvectionDiffusion::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc ConvectionDiffusion::write::AddValidApps {appid} { +proc ::ConvectionDiffusion::write::AddValidApps {appid} { AddAttribute validApps $appid } -proc ConvectionDiffusion::write::SetCoordinatesByGroups {value} { +proc ::ConvectionDiffusion::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } - -ConvectionDiffusion::write::Init diff --git a/kratos.gid/apps/ConvectionDiffusion/write/writeProjectParameters.tcl b/kratos.gid/apps/ConvectionDiffusion/write/writeProjectParameters.tcl index 378c7a8ed..f124100f9 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/writeProjectParameters.tcl @@ -32,7 +32,7 @@ proc ::ConvectionDiffusion::write::getParametersDict { } { return $projectParametersDict } -proc ConvectionDiffusion::write::GetProblemDataDict { } { +proc ::ConvectionDiffusion::write::GetProblemDataDict { } { # First section -> Problem data set problem_data_dict [dict create] @@ -67,14 +67,14 @@ proc ConvectionDiffusion::write::GetProblemDataDict { } { return $problem_data_dict } -proc ConvectionDiffusion::write::writeParametersEvent { } { +proc ::ConvectionDiffusion::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } # Body force SubModelParts and Process collection -proc ConvectionDiffusion::write::getBodyForceProcessDictList {} { +proc ::ConvectionDiffusion::write::getBodyForceProcessDictList {} { set ret [list ] set model_part_name [GetAttribute model_part_name] @@ -97,7 +97,7 @@ proc ConvectionDiffusion::write::getBodyForceProcessDictList {} { return $ret } -proc ConvectionDiffusion::write::GetSolverSettingsDict {} { +proc ::ConvectionDiffusion::write::GetSolverSettingsDict {} { set solverSettingsDict [dict create] set currentStrategyId [write::getValue CNVDFFSolStrat] set currentAnalysisTypeId [write::getValue CNVDFFAnalysisType] diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl index e253fd60f..5d0bfe57f 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl @@ -1,12 +1,10 @@ -namespace eval ConvectionDiffusion::xml { +namespace eval ::ConvectionDiffusion::xml { # Namespace variables declaration - variable dir } -proc ConvectionDiffusion::xml::Init { } { +proc ::ConvectionDiffusion::xml::Init { } { # Namespace variables inicialization - variable dir - Model::InitVariables dir $ConvectionDiffusion::dir + Model::InitVariables dir $::ConvectionDiffusion::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -19,11 +17,11 @@ proc ConvectionDiffusion::xml::Init { } { Model::getSolvers "../../Common/xml/Solvers.xml" } -proc ConvectionDiffusion::xml::getUniqueName {name} { - return ${::ConvectionDiffusion::prefix}${name} +proc ::ConvectionDiffusion::xml::getUniqueName {name} { + return [::ConvectionDiffusion::GetAttribute prefix]${name} } -proc ConvectionDiffusion::xml::CustomTree { args } { +proc ::ConvectionDiffusion::xml::CustomTree { args } { set root [customlib::GetBaseRoot] # Output control in output settings @@ -42,5 +40,3 @@ proc ConvectionDiffusion::xml::CustomTree { args } { # Make line_search appear only with non-linear strategy [$root selectNodes "[spdAux::getRoute CNVDFFStratParams]/value\[@n='line_search'\]"] setAttribute state "\[checkStateByUniqueName CNVDFFAnalysisType non_linear\]" } - -ConvectionDiffusion::xml::Init From cfd881163ae29ac0341436fb601f9b9c974d4f47 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 12:31:48 +0200 Subject: [PATCH 346/556] write properties --- .../apps/ConvectionDiffusion/write/write.tcl | 23 ++++++++++--------- kratos.gid/apps/Fluid/write/write.tcl | 1 + 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 2c33714f9..3ad7bee06 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -11,17 +11,18 @@ proc ::ConvectionDiffusion::write::Init { } { set ConvectionDiffusionConditions(temp) 0 unset ConvectionDiffusionConditions(temp) - SetAttribute parts_un CNVDFFParts - SetAttribute nodal_conditions_un CNVDFFNodalConditions - SetAttribute conditions_un CNVDFFBC - SetAttribute materials_un FLMaterials - SetAttribute writeCoordinatesByGroups 0 + SetAttribute parts_un [::ConvectionDiffusion::GetUniqueName parts] + SetAttribute nodal_conditions_un [::ConvectionDiffusion::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::ConvectionDiffusion::GetUniqueName conditions] + SetAttribute materials_un [::ConvectionDiffusion::GetUniqueName materials] + + SetAttribute writeCoordinatesByGroups [::ConvectionDiffusion::GetWriteProperty coordinates] SetAttribute validApps [list "ConvectionDiffusion"] - SetAttribute main_script_file "KratosConvectionDiffusion.py" - SetAttribute materials_file "ConvectionDiffusionMaterials.json" - SetAttribute properties_location json - SetAttribute model_part_name ThermalModelPart - SetAttribute output_model_part_name "thermal_computing_domain" + SetAttribute main_script_file [::ConvectionDiffusion::GetAttribute main_launch_file] + SetAttribute materials_file [::ConvectionDiffusion::GetWriteProperty materials_file] + SetAttribute properties_location [::ConvectionDiffusion::GetWriteProperty properties_location] + SetAttribute model_part_name [::ConvectionDiffusion::GetWriteProperty model_part_name] + SetAttribute output_model_part_name [::ConvectionDiffusion::GetWriteProperty output_model_part_name] } # Events @@ -41,7 +42,7 @@ proc ::ConvectionDiffusion::write::writeModelPartEvent { } { # write::writeMaterials [GetAttribute validApps] # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) - if {[GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} + if {[GetAttribute writeCoordinatesByGroups] ne "all"} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} # Element connectivities (Groups on CNVDFFParts) write::writeElementConnectivities diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index 00a5eb7fa..2d00a5e04 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -17,6 +17,7 @@ proc ::Fluid::write::Init { } { SetAttribute results_un [::Fluid::GetUniqueName results] SetAttribute drag_un [::Fluid::GetUniqueName drag] SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] From bb4c546e67373f0768c29d56f1b7be21a56ee865 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 1 Sep 2021 14:39:00 +0200 Subject: [PATCH 347/556] linux typo --- kratos.gid/apps/ConvectionDiffusion/app.json | 2 +- kratos.gid/apps/Fluid/app.json | 2 +- kratos.gid/apps/Structural/app.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/app.json b/kratos.gid/apps/ConvectionDiffusion/app.json index ab6b13cdd..da860b2a3 100644 --- a/kratos.gid/apps/ConvectionDiffusion/app.json +++ b/kratos.gid/apps/ConvectionDiffusion/app.json @@ -12,7 +12,7 @@ "start.tcl", "examples/examples.tcl", "examples/HeatedSquare.tcl", - "xml/xmlController.tcl", + "xml/XmlController.tcl", "write/write.tcl", "write/writeProjectParameters.tcl" ], diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index 6f6c0f2e2..a6d190399 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -13,7 +13,7 @@ "examples/examples.tcl", "examples/CylinderInFlow.tcl", "examples/HighRiseBuilding.tcl", - "xml/xmlController.tcl", + "xml/XmlController.tcl", "write/write.tcl", "write/writeProjectParameters.tcl" ], diff --git a/kratos.gid/apps/Structural/app.json b/kratos.gid/apps/Structural/app.json index 11f606787..3b098f661 100644 --- a/kratos.gid/apps/Structural/app.json +++ b/kratos.gid/apps/Structural/app.json @@ -15,7 +15,7 @@ "examples/TrussCantilever.tcl", "examples/HighRiseBuilding.tcl", "examples/IncompressibleCookMembrane.tcl", - "xml/xmlController.tcl", + "xml/XmlController.tcl", "write/write.tcl", "write/writeProjectParameters.tcl", "postprocess/formfinding.tcl" From 00f829c14e93c1a4de0a8771912779fa4176ec13 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 16:57:51 +0200 Subject: [PATCH 348/556] FSI --- kratos.gid/apps/FSI/app.json | 50 +++++++++++++++++++ .../apps/FSI/examples/HighRiseBuilding.tcl | 33 ++++++------ .../examples/MokChannelWithFlexibleWall.tcl | 19 ++++--- .../apps/FSI/examples/TurekBenchmark.tcl | 23 +++++---- kratos.gid/apps/FSI/examples/examples.tcl | 8 --- kratos.gid/apps/FSI/examples/examples.xml | 24 ++++----- kratos.gid/apps/FSI/start.tcl | 49 ++++-------------- kratos.gid/apps/FSI/write/write.tcl | 9 ++-- .../apps/FSI/write/writeProjectParameters.tcl | 18 +++---- kratos.gid/apps/FSI/xml/XmlController.tcl | 15 +++--- kratos.gid/scripts/Applications.tcl | 4 +- 11 files changed, 133 insertions(+), 119 deletions(-) create mode 100644 kratos.gid/apps/FSI/app.json diff --git a/kratos.gid/apps/FSI/app.json b/kratos.gid/apps/FSI/app.json new file mode 100644 index 000000000..23eafe7e3 --- /dev/null +++ b/kratos.gid/apps/FSI/app.json @@ -0,0 +1,50 @@ +{ + "id": "FSI", + "name": "Fluid Strucure Interaction", + "prefix": "FSI", + "themed": false, + "kratos_name": "FSIapplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/MokChannelWithFlexibleWall.tcl", + "examples/TurekBenchmark.tcl", + "examples/HighRiseBuilding.tcl", + "xml/xmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::FSI::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "STParts", + "initial_conditions": "STInitialConditions", + "nodal_conditions": "STNodalConditions", + "conditions": "STLoads", + "time_parameters": "STTimeParameters", + "results": "STResults", + "materials": "STMaterials" + + }, + "write": { + "coordinates": "all", + "materials_file": "StructuralMaterials.json", + "properties_location": "json", + "model_part_name": "Structure" + }, + "main_launch_file": "KratosStructural.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl index d249f0fa2..89942da9e 100644 --- a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl @@ -1,16 +1,19 @@ +namespace eval ::FSI::examples::HighRiseBuilding { -proc FSI::examples::HighRiseBuilding {args} { +} + +proc ::FSI::examples::HighRiseBuilding::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - Kratos::ResetModel - DrawHighRiseBuildingGeometry - AssignGroupsHighRiseBuilding$::Model::SpatialDimension - AssignHighRiseBuildingMeshSizes - TreeAssignationHighRiseBuilding + + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -18,12 +21,12 @@ proc FSI::examples::HighRiseBuilding {args} { GiD_Process 'Zoom Frame } -proc FSI::examples::DrawHighRiseBuildingGeometry {args} { - Fluid::examples::DrawHighRiseBuildingGeometry$::Model::SpatialDimension - Structural::examples::DrawHighRiseBuildingGeometry$::Model::SpatialDimension +proc ::FSI::examples::HighRiseBuilding::DrawGeometry {args} { + Fluid::examples::HighRiseBuilding::DrawGeometry$::Model::SpatialDimension + Structural::examples::HighRiseBuilding::DrawGeometry$::Model::SpatialDimension } -proc FSI::examples::AssignGroupsHighRiseBuilding2D {args} { +proc ::FSI::examples::HighRiseBuilding::AssignGroups2D {args} { # Fluid group creation GiD_Groups create Fluid GiD_EntitiesGroups assign Fluid surfaces 1 @@ -56,16 +59,16 @@ proc FSI::examples::AssignGroupsHighRiseBuilding2D {args} { GiD_EntitiesGroups assign InterfaceStructure lines {9 10 11} } -proc FSI::examples::AssignGroupsHighRiseBuilding3D {args} { +proc ::FSI::examples::HighRiseBuilding::AssignGroups3D {args} { # To be implemented } -proc FSI::examples::AssignHighRiseBuildingMeshSizes {args} { - Fluid::examples::AssignHighRiseBuildingMeshSizes$::Model::SpatialDimension - Structural::examples::AssignHighRiseBuildingMeshSizes$::Model::SpatialDimension +proc ::FSI::examples::HighRiseBuilding::AssignMeshSizes {args} { + Fluid::examples::AssignMeshSizes$::Model::SpatialDimension + Structural::examples::AssignMeshSizes$::Model::SpatialDimension } -proc FSI::examples::TreeAssignationHighRiseBuilding {args} { +proc ::FSI::examples::HighRiseBuilding::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index d712bbd32..bdeeccc77 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -1,16 +1,19 @@ +namespace eval ::FSI::examples::MokChannelFlexibleWall { -proc ::FSI::examples::MokChannelFlexibleWall {args} { +} + +proc ::FSI::examples::MokChannelFlexibleWall::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawMokChannelFlexibleWallGeometry - AssignMokChannelFlexibleWallMeshSizes$::Model::SpatialDimension - TreeAssignationMokChannelFlexibleWall + DrawGeometry + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation } -proc FSI::examples::DrawMokChannelFlexibleWallGeometry {args} { +proc ::FSI::examples::MokChannelFlexibleWall::DrawGeometry {args} { Kratos::ResetModel GiD_Process Mescape 'Layers ChangeName Layer0 Fluid escape @@ -137,7 +140,7 @@ proc FSI::examples::DrawMokChannelFlexibleWallGeometry {args} { GidUtils::UpdateWindow GROUPS } -proc FSI::examples::AssignMokChannelFlexibleWallMeshSizes2D {args} { +proc ::FSI::examples::MokChannelFlexibleWall::AssignMeshSizes2D {args} { set long_side_divisions 100 set short_side_divisions 4 set outlet_element_size 0.01 @@ -154,7 +157,7 @@ proc FSI::examples::AssignMokChannelFlexibleWallMeshSizes2D {args} { GiD_Process Mescape Meshing ElemType Triangle [GiD_EntitiesGroups get Fluid surfaces] escape escape } -proc FSI::examples::AssignMokChannelFlexibleWallMeshSizes3D {args} { +proc ::FSI::examples::MokChannelFlexibleWall::AssignMeshSizes3D {args} { set long_side_divisions 100 set short_side_divisions 4 set outlet_element_size 0.01 @@ -175,7 +178,7 @@ proc FSI::examples::AssignMokChannelFlexibleWallMeshSizes3D {args} { GiD_Process Mescape Meshing AssignSizes Volumes $fluid_element_size [GiD_EntitiesGroups get Fluid volumes] escape escape } -proc FSI::examples::TreeAssignationMokChannelFlexibleWall {args} { +proc ::FSI::examples::MokChannelFlexibleWall::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl index bce479c4c..abd254154 100644 --- a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl +++ b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl @@ -1,5 +1,8 @@ +namespace eval ::FSI::examples::TurekBenchmark { -proc ::FSI::examples::TurekBenchmark {args} { +} + +proc ::FSI::examples::TurekBenchmark::Init {args} { # At this moment we do only support 2D for this test if {$::Model::SpatialDimension eq "2D"} { if {![Kratos::IsModelEmpty]} { @@ -8,21 +11,21 @@ proc ::FSI::examples::TurekBenchmark {args} { if { $retval == "cancel" } { return } } # Set up geometry and groups - DrawTurekBenchmarkFluidGeometry - DrawTurekBenchmarkStructureGeometry + DrawGeometryFluid + DrawGeometryStructure # Generated geometry frame zoom GiD_Process 'Layers On Fluid escape GiD_Process 'Layers On Structure escape GiD_Process 'Zoom Frame GiD_Process 'Render Flat escape # Assign mesh sizes - AssignTurekBenchmarkMeshSizes$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension # Assign tree values - TreeAssignationTurekBenchmark + TreeAssignation } } -proc FSI::examples::DrawTurekBenchmarkFluidGeometry {args} { +proc ::FSI::examples::TurekBenchmark::DrawGeometryFluid {args} { Kratos::ResetModel # Set fluid domain geometry @@ -74,7 +77,7 @@ proc FSI::examples::DrawTurekBenchmarkFluidGeometry {args} { GidUtils::UpdateWindow GROUPS } -proc FSI::examples::DrawTurekBenchmarkStructureGeometry {args} { +proc ::FSI::examples::TurekBenchmark::DrawGeometryStructure {args} { # Set structure domain geometry if {$::Model::SpatialDimension eq "2D"} { @@ -115,7 +118,7 @@ proc FSI::examples::DrawTurekBenchmarkStructureGeometry {args} { GidUtils::UpdateWindow GROUPS } -proc FSI::examples::AssignTurekBenchmarkMeshSizes2D {args} { +proc ::FSI::examples::TurekBenchmark::AssignMeshSizes2D {args} { # Structure and fluid mesh settings set str_flag_tail_divisions 15 set str_flag_long_sides_divisions 175 @@ -141,7 +144,7 @@ proc FSI::examples::AssignTurekBenchmarkMeshSizes2D {args} { GiD_Process Mescape Meshing AssignSizes Surfaces $fluid_domain_element_size 1 escape escape } -# proc FSI::examples::AssignTurekBenchmarkMeshSizes3D {args} { +# proc ::FSI::examples::TurekBenchmark::AssignTurekBenchmarkMeshSizes3D {args} { # set long_side_divisions 100 # set short_side_divisions 4 # set outlet_element_size 0.01 @@ -161,7 +164,7 @@ proc FSI::examples::AssignTurekBenchmarkMeshSizes2D {args} { # GiD_Process Mescape Meshing AssignSizes Volumes $fluid_element_size [GiD_EntitiesGroups get Fluid volumes] escape escape # } -proc FSI::examples::TreeAssignationTurekBenchmark {args} { +proc ::FSI::examples::TurekBenchmark::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/FSI/examples/examples.tcl b/kratos.gid/apps/FSI/examples/examples.tcl index 2ba94c582..e82c69fd7 100644 --- a/kratos.gid/apps/FSI/examples/examples.tcl +++ b/kratos.gid/apps/FSI/examples/examples.tcl @@ -1,11 +1,3 @@ namespace eval FSI::examples { } - -proc FSI::examples::Init { } { - uplevel #0 [list source [file join $::FSI::dir examples MokChannelWithFlexibleWall.tcl]] - uplevel #0 [list source [file join $::FSI::dir examples TurekBenchmark.tcl]] - uplevel #0 [list source [file join $::FSI::dir examples HighRiseBuilding.tcl]] -} - -FSI::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/FSI/examples/examples.xml b/kratos.gid/apps/FSI/examples/examples.xml index bd8ddc007..5166d81c6 100644 --- a/kratos.gid/apps/FSI/examples/examples.xml +++ b/kratos.gid/apps/FSI/examples/examples.xml @@ -1,21 +1,21 @@ - - - - + + + + - - - - + + + + - - - - + + + + \ No newline at end of file diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index 1c1bf1944..e947ba8e3 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -1,55 +1,24 @@ namespace eval ::FSI { # Variable declaration variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::FSI::Init { } { +proc ::FSI::Init { app } { # Variable initialization variable dir - variable prefix - variable kratos_name - variable attributes - - set kratos_name FSIapplication + variable _app - #W "Sourced FSI" + set _app $app set dir [apps::getMyDir "FSI"] - set prefix FSI - apps::LoadAppById "Structural" apps::LoadAppById "Fluid" - # Intervals - dict set attributes UseIntervals 1 - # dict set ::Fluid::attributes UseIntervals 0 - # dict set ::Structural::attributes UseIntervals 0 - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - set ::Model::ValidSpatialDimensions [list 2D 3D] - LoadMyFiles - #::spdAux::CreateDimensionWindow -} - -proc ::FSI::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $FSI::dir examples examples.tcl]] -} - -proc ::FSI::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + ::FSI::xml::Init + ::FSI::write::Init } -::FSI::Init +proc ::FSI::GetAttribute {name} {return [$::FSI::_app getProperty $name]} +proc ::FSI::GetUniqueName {name} {return [$::FSI::_app getUniqueName $name]} +proc ::FSI::GetWriteProperty {name} {return [$::FSI::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/FSI/write/write.tcl b/kratos.gid/apps/FSI/write/write.tcl index fcdf28744..1a40593fb 100644 --- a/kratos.gid/apps/FSI/write/write.tcl +++ b/kratos.gid/apps/FSI/write/write.tcl @@ -4,7 +4,7 @@ namespace eval FSI::write { variable mdpa_names } -proc FSI::write::Init { } { +proc ::FSI::write::Init { } { variable fluid_project_parameters variable structure_project_parameters set fluid_project_parameters [dict create ] @@ -15,7 +15,7 @@ proc FSI::write::Init { } { } # Events -proc FSI::write::writeModelPartEvent { } { +proc ::FSI::write::writeModelPartEvent { } { variable mdpa_names set filename [Kratos::GetModelName] @@ -33,13 +33,10 @@ proc FSI::write::writeModelPartEvent { } { write::RenameFileInModel "$filename.mdpa" "[dict get $mdpa_names Structural].mdpa" } -proc FSI::write::writeCustomFilesEvent { } { +proc ::FSI::write::writeCustomFilesEvent { } { Fluid::write::WriteMaterialsFile Structural::write::WriteMaterialsFile write::CopyFileIntoModel "python/KratosFSI.py" write::RenameFileInModel "KratosFSI.py" "MainKratos.py" } - - -FSI::write::Init diff --git a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl index af46a4466..7d638eff0 100644 --- a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl @@ -1,5 +1,5 @@ # Project Parameters -proc FSI::write::getParametersDict { } { +proc ::FSI::write::getParametersDict { } { # Init the Fluid and Structural dicts InitExternalProjectParameters @@ -24,19 +24,19 @@ proc FSI::write::getParametersDict { } { return $projectParametersDict } -proc FSI::write::writeParametersEvent { } { +proc ::FSI::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc FSI::write::GetProblemDataDict { } { +proc ::FSI::write::GetProblemDataDict { } { # Copy the section from the Fluid, who owns the time parameters of the model set problem_data_dict [dict get $FSI::write::fluid_project_parameters problem_data] return $problem_data_dict } -proc FSI::write::GetSolverSettingsDict { } { +proc ::FSI::write::GetSolverSettingsDict { } { variable mdpa_names set solver_settings_dict [dict create] @@ -99,7 +99,7 @@ proc FSI::write::GetSolverSettingsDict { } { } -proc FSI::write::GetProcessesDict { } { +proc ::FSI::write::GetProcessesDict { } { set processes_dict [dict create] # Fluid @@ -115,7 +115,7 @@ proc FSI::write::GetProcessesDict { } { return $processes_dict } -proc FSI::write::GetOutputProcessesDict { } { +proc ::FSI::write::GetOutputProcessesDict { } { set output_processes_dict [dict create] set gid_output_list [list ] @@ -133,7 +133,7 @@ proc FSI::write::GetOutputProcessesDict { } { return $output_processes_dict } -proc FSI::write::UpdateUniqueNames { appid } { +proc ::FSI::write::UpdateUniqueNames { appid } { set unList [list "Results"] foreach un $unList { set current_un [apps::getAppUniqueName $appid $un] @@ -141,7 +141,7 @@ proc FSI::write::UpdateUniqueNames { appid } { } } -proc FSI::write::GetMappingSettingsList { } { +proc ::FSI::write::GetMappingSettingsList { } { set mappingsList [list ] set fluid_interface_name FluidNoSlipInterface$::Model::SpatialDimension @@ -159,7 +159,7 @@ proc FSI::write::GetMappingSettingsList { } { return $mappingsList } -proc FSI::write::InitExternalProjectParameters { } { +proc ::FSI::write::InitExternalProjectParameters { } { # Fluid section UpdateUniqueNames Fluid apps::setActiveAppSoft Fluid diff --git a/kratos.gid/apps/FSI/xml/XmlController.tcl b/kratos.gid/apps/FSI/xml/XmlController.tcl index 2df645e57..3ea50acd5 100644 --- a/kratos.gid/apps/FSI/xml/XmlController.tcl +++ b/kratos.gid/apps/FSI/xml/XmlController.tcl @@ -3,10 +3,10 @@ namespace eval FSI::xml { variable dir } -proc FSI::xml::Init { } { +proc ::FSI::xml::Init { } { # Namespace variables initialization variable dir - Model::InitVariables dir $FSI::dir + Model::InitVariables dir $::FSI::dir Model::ForgetSolutionStrategies Model::getSolutionStrategies "../../Fluid/xml/Strategies.xml" @@ -21,18 +21,18 @@ proc FSI::xml::Init { } { Model::getSolvers Coupling_solvers.xml } -proc FSI::xml::getUniqueName {name} { - return ${::FSI::prefix}${name} +proc ::FSI::xml::getUniqueName {name} { + return [::FSI::GetAttribute prefix]${name} } proc ::FSI::xml::MultiAppEvent {args} { if {$args eq "init"} { - ::Structural::xml::MultiAppEvent init + catch {::Structural::xml::MultiAppEvent init} } } -proc FSI::xml::CustomTree { args } { +proc ::FSI::xml::CustomTree { args } { FSI::write::UpdateUniqueNames Fluid apps::setActiveAppSoft Fluid Fluid::xml::CustomTree @@ -51,7 +51,6 @@ proc FSI::xml::CustomTree { args } { # Remove Eigen #spdAux::SetValueOnTreeItem values "Static,Quasi-static,Dynamic,formfinding" STSoluType - # Disable MPI parallelism until it is fully tested #spdAux::SetValueOnTreeItem values "OpenMP" ParallelType @@ -83,5 +82,3 @@ proc spdAux::injectElementOutputs {basenode args} { } return [spdAux::injectElementOutputs_do $basenode $args] } - -FSI::xml::Init diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 9b06b6e41..38e7d2844 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -285,7 +285,7 @@ oo::class create App { method setIsTool {v} {variable is_tool; set is_tool $v} method isTool { } {variable is_tool; return $is_tool} - method getKratosApplicationName { } {return [set ::${name}::kratos_name]} + method getKratosApplicationName { } {return [::${name}::GetAttribute kratos_name]} method setProperties {props} {variable properties; set properties $props} method getProperty {n} {variable properties; if {[dict exists $properties $n]} {return [dict get $properties $n]}} @@ -330,6 +330,6 @@ proc apps::ApplyAppPreferences {app} { if {[write::isBooleanTrue [$app getPermission open_tree]]} {set spdAux::TreeVisibility 1} } -proc apps::loadAppFile {fileName} {uplevel 2 [list source $fileName]} +proc apps::loadAppFile {fileName} {uplevel #0 [list source $fileName]} apps::Init From 9005f970775739237e6da951a38e30e702d7191a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 1 Sep 2021 18:00:49 +0200 Subject: [PATCH 349/556] Ethan Hunt --- kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl index 89942da9e..8ef6713e8 100644 --- a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl @@ -11,7 +11,7 @@ proc ::FSI::examples::HighRiseBuilding::Init {args} { Kratos::ResetModel DrawGeometry - AssignGroups + AssignGroups$::Model::SpatialDimension AssignMeshSizes TreeAssignation @@ -64,8 +64,8 @@ proc ::FSI::examples::HighRiseBuilding::AssignGroups3D {args} { } proc ::FSI::examples::HighRiseBuilding::AssignMeshSizes {args} { - Fluid::examples::AssignMeshSizes$::Model::SpatialDimension - Structural::examples::AssignMeshSizes$::Model::SpatialDimension + ::Fluid::examples::HighRiseBuilding::AssignMeshSizes$::Model::SpatialDimension + ::Structural::examples::HighRiseBuilding::AssignMeshSizes$::Model::SpatialDimension } proc ::FSI::examples::HighRiseBuilding::TreeAssignation {args} { From 9f65592ca039aa0d85e42f41f61e03b7ba7ed146 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 2 Sep 2021 16:39:00 +0200 Subject: [PATCH 350/556] Buoyancy to app.json --- kratos.gid/apps/Buoyancy/app.json | 48 +++++++++++++++++ .../apps/Buoyancy/examples/HeatedSquare.tcl | 40 +++++---------- .../apps/Buoyancy/examples/examples.tcl | 16 ++++-- .../apps/Buoyancy/examples/examples.xml | 2 +- kratos.gid/apps/Buoyancy/start.tcl | 51 ++++--------------- kratos.gid/apps/Buoyancy/write/write.tcl | 46 +++++++++-------- .../Buoyancy/write/writeProjectParameters.tcl | 12 ++--- .../apps/Buoyancy/xml/XmlController.tcl | 15 +++--- kratos.gid/apps/FSI/app.json | 2 +- 9 files changed, 122 insertions(+), 110 deletions(-) create mode 100644 kratos.gid/apps/Buoyancy/app.json diff --git a/kratos.gid/apps/Buoyancy/app.json b/kratos.gid/apps/Buoyancy/app.json new file mode 100644 index 000000000..6a26d1a17 --- /dev/null +++ b/kratos.gid/apps/Buoyancy/app.json @@ -0,0 +1,48 @@ +{ + "id": "Buoyancy", + "name": "Buoyancy", + "prefix": "Buoyancy_", + "themed": false, + "kratos_name": "Buoyancyapplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/HeatedSquare.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::Buoyancy::Init", + "requeriments":{ + "apps":["Fluid", "ConvectionDiffusion"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "STParts", + "initial_conditions": "STInitialConditions", + "nodal_conditions": "STNodalConditions", + "conditions": "STLoads", + "time_parameters": "STTimeParameters", + "results": "STResults", + "materials": "STMaterials" + + }, + "write": { + "coordinates": "all", + "materials_file": "BuoyancyMaterials.json", + "properties_location": "json", + "model_part_name": "ThermalModelPart" + }, + "main_launch_file": "KratosStructural.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index 2d17f788c..c0fe9cd1d 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -1,12 +1,15 @@ +namespace eval Buoyancy::examples::HeatedSquare { -proc ::Buoyancy::examples::HeatedSquare {args} { +} + +proc ::Buoyancy::examples::HeatedSquare::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawSquareGeometry$::Model::SpatialDimension - AssignSquareGeometryMeshSizes$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension AssignGroups$::Model::SpatialDimension TreeAssignation$::Model::SpatialDimension @@ -18,14 +21,14 @@ proc ::Buoyancy::examples::HeatedSquare {args} { # Draw Geometry -proc Buoyancy::examples::DrawSquareGeometry3D {args} { +proc ::Buoyancy::examples::HeatedSquare::DrawGeometry3D {args} { # DrawSquareGeometry2D # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc Buoyancy::examples::DrawSquareGeometry2D {args} { +proc ::Buoyancy::examples::HeatedSquare::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -53,18 +56,18 @@ proc Buoyancy::examples::DrawSquareGeometry2D {args} { } # Mesh sizes assign -proc Buoyancy::examples::AssignSquareGeometryMeshSizes2D {args} { +proc ::Buoyancy::examples::HeatedSquare::AssignMeshSizes2D {args} { set default_mesh_size 0.0125 GiD_Process Mescape Meshing AssignSizes Surfaces $default_mesh_size 1 escape escape GiD_Process Mescape Meshing AssignSizes Lines $default_mesh_size 1 2 3 4 escape escape } -proc Buoyancy::examples::AssignSquareGeometryMeshSizes3D {args} { +proc ::Buoyancy::examples::HeatedSquare::AssignMeshSizes3D {args} { # To be implemented } # Group assign -proc Buoyancy::examples::AssignGroups2D {args} { +proc ::Buoyancy::examples::HeatedSquare::AssignGroups2D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -91,7 +94,7 @@ proc Buoyancy::examples::AssignGroups2D {args} { GiD_EntitiesGroups assign Pressure point 1 } -proc Buoyancy::examples::AssignGroups3D {args} { +proc ::Buoyancy::examples::HeatedSquare::AssignGroups3D {args} { # Create the groups # GiD_Groups create Fluid # GiD_Groups edit color Fluid "#26d1a8ff" @@ -115,11 +118,11 @@ proc Buoyancy::examples::AssignGroups3D {args} { } # Tree assign -proc Buoyancy::examples::TreeAssignation3D {args} { +proc ::Buoyancy::examples::HeatedSquare::TreeAssignation3D {args} { # TreeAssignationCylinderInFlow2D # AddCuts } -proc Buoyancy::examples::TreeAssignation2D {args} { +proc ::Buoyancy::examples::HeatedSquare::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -189,18 +192,3 @@ proc Buoyancy::examples::TreeAssignation2D {args} { spdAux::RequestRefresh } - -proc Buoyancy::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} - -proc Buoyancy::examples::AddCuts { } { - # Cuts - set results "[spdAux::getRoute Results]/container\[@n='GiDOutput'\]" - set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] - [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" -} \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index e2f1b5ef9..b37349468 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -2,9 +2,17 @@ namespace eval Buoyancy::examples { } -proc Buoyancy::examples::Init { } { - uplevel #0 [list source [file join $::Buoyancy::dir examples HeatedSquare.tcl]] +proc ::Buoyancy::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } - -Buoyancy::examples::Init \ No newline at end of file +proc ::Buoyancy::examples::AddCuts { } { + # Cuts + set results "[spdAux::getRoute Results]/container\[@n='GiDOutput'\]" + set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] + [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" +} \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/examples/examples.xml b/kratos.gid/apps/Buoyancy/examples/examples.xml index e4c6047ac..da2c4ef50 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.xml +++ b/kratos.gid/apps/Buoyancy/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index 01d5166ac..82bb29924 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -1,59 +1,26 @@ namespace eval ::Buoyancy { # Variable declaration - variable id variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::Buoyancy::Init { } { +proc ::Buoyancy::Init { app } { # Variable initialization - variable id variable dir - variable prefix - variable kratos_name - variable attributes - - set id "Buoyancy" - - set kratos_name Buoyancyapplication + variable _app #W "Sourced FSI" set dir [apps::getMyDir "Buoyancy"] - set prefix Buoyancy_ + set _app $app apps::LoadAppById "Fluid" apps::LoadAppById "ConvectionDiffusion" - - # Intervals - dict set attributes UseIntervals 1 - # Allow to open the tree - set ::spdAux::TreeVisibility 1 + ::Buoyancy::xml::Init + ::Buoyancy::write::Init - set ::Model::ValidSpatialDimensions [list 2D 3D] - LoadMyFiles - #::spdAux::CreateDimensionWindow -} - -proc ::Buoyancy::LoadMyFiles { } { - variable id - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - if {[apps::getActiveAppId] eq $id} { - uplevel #0 [list source [file join $dir examples examples.tcl]] - } -} - -proc ::Buoyancy::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value } -::Buoyancy::Init +proc ::Buoyancy::GetAttribute {name} {return [$::Buoyancy::_app getProperty $name]} +proc ::Buoyancy::GetUniqueName {name} {return [$::Buoyancy::_app getUniqueName $name]} +proc ::Buoyancy::GetWriteProperty {name} {return [$::Buoyancy::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index b17320f16..80cac89f2 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -1,20 +1,23 @@ -namespace eval Buoyancy::write { +namespace eval ::Buoyancy::write { variable writeAttributes } -proc Buoyancy::write::Init { } { - Fluid::write::Init - Fluid::write::SetAttribute thermal_bc_un "CNVDFFBC" +proc ::Buoyancy::write::Init { } { + # Start Fluid write variables + # Add thermal unique names to Fluid write variables + Fluid::write::SetAttribute thermal_bc_un [ConvectionDiffusion::write::GetAttribute conditions_un] Fluid::write::SetAttribute thermal_initial_cnd_un [ConvectionDiffusion::write::GetAttribute nodal_conditions_un] } # Events -proc Buoyancy::write::writeModelPartEvent { } { +proc ::Buoyancy::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} + # Start Fluid write variables Fluid::write::Init + # Start Fluid write conditions map from scratch Fluid::write::InitConditionsMap # Init data @@ -25,7 +28,7 @@ proc Buoyancy::write::writeModelPartEvent { } { Fluid::write::writeProperties # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) - if {[Fluid::write::GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} + if {[Fluid::write::GetAttribute writeCoordinatesByGroups] ne "all"} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} # Element connectivities (Groups on FLParts) write::writeElementConnectivities @@ -44,29 +47,32 @@ proc Buoyancy::write::writeModelPartEvent { } { # Custom SubmodelParts #write::writeBasicSubmodelParts [Fluid::write::getLastConditionId] } -proc Buoyancy::write::writeCustomFilesEvent { } { + +proc ::Buoyancy::write::writeCustomFilesEvent { } { # Materials Buoyancy::write::WriteMaterialsFile True # Main python script - set orig_name "MainKratos.py" - write::CopyFileIntoModel [file join "python" $orig_name ] + write::CopyFileIntoModel [file join "python" "MainKratos.py" ] } -proc Buoyancy::write::Validate {} { +proc ::Buoyancy::write::Validate {} { set err "" return $err } -proc Buoyancy::write::WriteMaterialsFile {{write_const_law True} {include_modelpart_name True} } { +proc ::Buoyancy::write::WriteMaterialsFile {{write_const_law True} {include_modelpart_name True} } { + # Write fluid material file Fluid::write::WriteMaterialsFile $write_const_law $include_modelpart_name + + # Write Buoyancy materials file set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetModelPartName]} write::writePropertiesJsonFile [GetAttribute parts_un] "BuoyancyMaterials.json" $write_const_law $model_part_name } -proc Buoyancy::write::writeSubModelParts { } { +proc ::Buoyancy::write::writeSubModelParts { } { set BCUN [GetAttribute thermal_bc_un] set root [customlib::GetBaseRoot] @@ -86,7 +92,7 @@ proc Buoyancy::write::writeSubModelParts { } { } } -proc Buoyancy::write::writeBoussinesqSubModelPart { } { +proc ::Buoyancy::write::writeBoussinesqSubModelPart { } { set groupid "_Boussinesq_hidden_" GiD_Groups create $groupid GiD_EntitiesGroups assign $groupid nodes [GiD_Mesh list node] @@ -94,25 +100,23 @@ proc Buoyancy::write::writeBoussinesqSubModelPart { } { GiD_Groups delete $groupid } -proc Buoyancy::write::GetModelPartName { } { - return ThermalModelPart +proc ::Buoyancy::write::GetModelPartName { } { + return [Fluid::GetWriteProperty model_part_name] } -proc Buoyancy::write::GetAttribute {att} { +proc ::Buoyancy::write::GetAttribute {att} { return [Fluid::write::GetAttribute $att] } -proc Buoyancy::write::GetAttributes {} { +proc ::Buoyancy::write::GetAttributes {} { return [Fluid::write::GetAttributes] } -proc Buoyancy::write::AddAttributes {configuration} { +proc ::Buoyancy::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc Buoyancy::write::AddValidApps {appid} { +proc ::Buoyancy::write::AddValidApps {appid} { AddAttribute validApps $appid } - -Buoyancy::write::Init \ No newline at end of file diff --git a/kratos.gid/apps/Buoyancy/write/writeProjectParameters.tcl b/kratos.gid/apps/Buoyancy/write/writeProjectParameters.tcl index d19840b77..78cb85f98 100644 --- a/kratos.gid/apps/Buoyancy/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Buoyancy/write/writeProjectParameters.tcl @@ -20,13 +20,13 @@ proc ::Buoyancy::write::getParametersDict { } { return $projectParametersDict } -proc Buoyancy::write::writeParametersEvent { } { +proc ::Buoyancy::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc Buoyancy::write::GetProblemData_Dict { } { +proc ::Buoyancy::write::GetProblemData_Dict { } { set problemDataDict [dict create ] # problem name @@ -52,7 +52,7 @@ proc Buoyancy::write::GetProblemData_Dict { } { # dict set problemDataDict model_part_name "ThermalModelPart" } -proc Buoyancy::write::GetRestart_Dict { } { +proc ::Buoyancy::write::GetRestart_Dict { } { set restartDict [dict create] dict set restartDict SaveRestart False @@ -61,7 +61,7 @@ proc Buoyancy::write::GetRestart_Dict { } { dict set restartDict Restart_Step 0 } -proc Buoyancy::write::GetSolverSettings_Dict { } { +proc ::Buoyancy::write::GetSolverSettings_Dict { } { set settings [dict create] dict set settings solver_type "ThermallyCoupled" @@ -93,7 +93,7 @@ proc Buoyancy::write::GetSolverSettings_Dict { } { return $settings } -proc Buoyancy::write::GetProcesses_Dict { } { +proc ::Buoyancy::write::GetProcesses_Dict { } { set constraints_process_list [list ] write::SetConfigurationAttributes [Fluid::write::GetAttributes] lappend constraints_process_list {*}[write::getConditionsParametersDict [Fluid::write::GetAttribute conditions_un] ] @@ -105,7 +105,7 @@ proc Buoyancy::write::GetProcesses_Dict { } { return [dict create "constraints_process_list" $constraints_process_list] } -proc Buoyancy::write::GetBoussinesqProcess { } { +proc ::Buoyancy::write::GetBoussinesqProcess { } { set process [dict create] dict set process python_module apply_boussinesq_force_process dict set process kratos_module KratosMultiphysics.FluidDynamicsApplication diff --git a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl index 5721d63c5..e848c6126 100644 --- a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl +++ b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl @@ -1,12 +1,12 @@ -namespace eval Buoyancy::xml { +namespace eval ::Buoyancy::xml { # Namespace variables declaration variable dir } -proc Buoyancy::xml::Init { } { +proc ::Buoyancy::xml::Init { } { # Namespace variables initialization variable dir - Model::InitVariables dir $Buoyancy::dir + Model::InitVariables dir $::Buoyancy::dir Model::ForgetSolutionStrategy stationary @@ -31,11 +31,11 @@ proc Buoyancy::xml::Init { } { } -proc Buoyancy::xml::getUniqueName {name} { - return ${::Buoyancy::prefix}${name} +proc ::Buoyancy::xml::getUniqueName {name} { + return [::Buoyancy::GetAttribute prefix]${name} } -proc Buoyancy::xml::CustomTree { args } { +proc ::Buoyancy::xml::CustomTree { args } { spdAux::parseRoutes apps::setActiveAppSoft Fluid @@ -52,7 +52,4 @@ proc Buoyancy::xml::CustomTree { args } { # Hide Fluid gravity -> Boussinesq spdAux::SetValueOnTreeItem state hidden FLGravity - } - -Buoyancy::xml::Init diff --git a/kratos.gid/apps/FSI/app.json b/kratos.gid/apps/FSI/app.json index 23eafe7e3..424749613 100644 --- a/kratos.gid/apps/FSI/app.json +++ b/kratos.gid/apps/FSI/app.json @@ -14,7 +14,7 @@ "examples/MokChannelWithFlexibleWall.tcl", "examples/TurekBenchmark.tcl", "examples/HighRiseBuilding.tcl", - "xml/xmlController.tcl", + "xml/XmlController.tcl", "write/write.tcl", "write/writeProjectParameters.tcl" ], From b32b3b3ff8d2d769a21ca16a2a2c8b3632bb5271 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 2 Sep 2021 17:45:34 +0200 Subject: [PATCH 351/556] Conjugate heat transfer --- .../apps/ConjugateHeatTransfer/app.json | 50 +++++++++++++++++++ .../ConjugateHeatTransfer/examples/BFS.tcl | 23 +++++---- ...linder_cooling.tcl => CylinderCooling.tcl} | 29 ++++++----- .../examples/HeatedSquare.tcl | 24 +++++---- .../examples/examples.tcl | 8 --- .../examples/examples.xml | 6 +-- .../python/MainKratos.py | 37 -------------- .../apps/ConjugateHeatTransfer/start.tcl | 48 +++--------------- .../ConjugateHeatTransfer/write/write.tcl | 40 +++++++-------- .../write/writeProjectParameters.tcl | 27 +++++----- .../xml/XmlController.tcl | 6 +-- 11 files changed, 136 insertions(+), 162 deletions(-) create mode 100644 kratos.gid/apps/ConjugateHeatTransfer/app.json rename kratos.gid/apps/ConjugateHeatTransfer/examples/{cylinder_cooling.tcl => CylinderCooling.tcl} (89%) delete mode 100644 kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py diff --git a/kratos.gid/apps/ConjugateHeatTransfer/app.json b/kratos.gid/apps/ConjugateHeatTransfer/app.json new file mode 100644 index 000000000..2ada965c2 --- /dev/null +++ b/kratos.gid/apps/ConjugateHeatTransfer/app.json @@ -0,0 +1,50 @@ +{ + "id": "ConjugateHeatTransfer", + "name": "ConjugateHeatTransfer", + "prefix": "CHT", + "themed": false, + "kratos_name": "ConvectionDiffusionApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/HeatedSquare.tcl", + "examples/CylinderCooling.tcl", + "examples/BFS.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::ConjugateHeatTransfer::Init", + "requeriments":{ + "apps":["Buoyancy"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "STParts", + "initial_conditions": "STInitialConditions", + "nodal_conditions": "STNodalConditions", + "conditions": "STLoads", + "time_parameters": "STTimeParameters", + "results": "STResults", + "materials": "STMaterials" + + }, + "write": { + "coordinates": "all", + "materials_file": "BuoyancyMaterials.json", + "properties_location": "json", + "model_part_name": "ThermalModelPart" + }, + "main_launch_file": "python/KratosConjugateHeatTransfer.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index 706c13421..c0fb1a0f2 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -1,13 +1,16 @@ +namespace eval ConjugateHeatTransfer::examples::BFS { -proc ::ConjugateHeatTransfer::examples::BFS {args} { +} + +proc ::ConjugateHeatTransfer::examples::BFS::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawBFSGeometry$::Model::SpatialDimension - AssignBFSGroups$::Model::SpatialDimension - TreeAssignationBFS$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::ConjugateHeatTransfer::examples::BFS {args} { # Draw Geometry -proc ConjugateHeatTransfer::examples::DrawBFSGeometry3D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::DrawGeometry3D {args} { # DrawSquareGeometry2D # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 @@ -25,7 +28,7 @@ proc ConjugateHeatTransfer::examples::DrawBFSGeometry3D {args} { # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc ConjugateHeatTransfer::examples::DrawBFSGeometry2D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers create HeatSource @@ -72,7 +75,7 @@ proc ConjugateHeatTransfer::examples::DrawBFSGeometry2D {args} { # Group assign -proc ConjugateHeatTransfer::examples::AssignBFSGroups2D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::AssignGroups2D {args} { # Create the groups for the fluid GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -123,7 +126,7 @@ proc ConjugateHeatTransfer::examples::AssignBFSGroups2D {args} { GiD_Groups edit color Heating_Bottom_Wall "#3b3b3bff" GiD_EntitiesGroups assign Heating_Bottom_Wall lines 9 } -proc ConjugateHeatTransfer::examples::AssignBFSGroups3D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::AssignGroups3D {args} { # Create the groups # GiD_Groups create Fluid # GiD_Groups edit color Fluid "#26d1a8ff" @@ -147,11 +150,11 @@ proc ConjugateHeatTransfer::examples::AssignBFSGroups3D {args} { } # Tree assign -proc ConjugateHeatTransfer::examples::TreeAssignationBFS3D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::TreeAssignation3D {args} { # TreeAssignationCylinderInFlow2D # AddCuts } -proc ConjugateHeatTransfer::examples::TreeAssignationBFS2D {args} { +proc ::ConjugateHeatTransfer::examples::BFS::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl similarity index 89% rename from kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl rename to kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl index 683445ef4..f9d1cd189 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/cylinder_cooling.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl @@ -1,15 +1,18 @@ +namespace eval ConjugateHeatTransfer::examples::CylinderCooling { -proc ::ConjugateHeatTransfer::examples::CylinderCooling {args} { +} + +proc ::ConjugateHeatTransfer::examples::CylinderCooling::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawCylinderCoolingGeometry$::Model::SpatialDimension - CylinderCoolingAssignGroups$::Model::SpatialDimension - CylinderCoolingTreeAssignation$::Model::SpatialDimension - CylinderCoolingAssignMeshSizes$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -19,7 +22,7 @@ proc ::ConjugateHeatTransfer::examples::CylinderCooling {args} { # Draw Geometry -proc ConjugateHeatTransfer::examples::DrawCylinderCoolingGeometry2D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers create Cylinder @@ -63,12 +66,12 @@ proc ConjugateHeatTransfer::examples::DrawCylinderCoolingGeometry2D {args} { GiD_Process Mescape Geometry Create Object CirclePNR $circle_center_x $circle_center_y $circle_center_z 0.0 0.0 1.0 $center_radius escape } -proc ConjugateHeatTransfer::examples::DrawCylinderCoolingGeometry3D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::DrawGeometry3D {args} { # To be implemented } # Groups assign -proc ConjugateHeatTransfer::examples::CylinderCoolingAssignGroups2D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::AssignGroups2D {args} { # Create the groups for the fluid GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -104,12 +107,12 @@ proc ConjugateHeatTransfer::examples::CylinderCoolingAssignGroups2D {args} { GiD_EntitiesGroups assign Solid_Interface lines 6 } -proc ConjugateHeatTransfer::examples::CylinderCoolingAssignGroups3D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::AssignGroups3D {args} { # To be implemented } # Tree assign -proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation2D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -211,12 +214,12 @@ proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation2D {args} { spdAux::RequestRefresh } -proc ConjugateHeatTransfer::examples::CylinderCoolingTreeAssignation3D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::TreeAssignation3D {args} { # TODO: To be implemented } # Assign mesh settings and sizes -proc ConjugateHeatTransfer::examples::CylinderCoolingAssignMeshSizes2D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::AssignMeshSizes2D {args} { # Assign centered structured triangular mesh in the solid cylinder GiD_Process Mescape Meshing ElemType Triangle 2 escape escape GiD_Process MEscape Meshing CenterStruct Assign 0.0 0.5 10 110 2 escape escape @@ -231,6 +234,6 @@ proc ConjugateHeatTransfer::examples::CylinderCoolingAssignMeshSizes2D {args} { GiD_Process Mescape Meshing Structured Lines 120 6 escape escape } -proc ConjugateHeatTransfer::examples::CylinderCoolingAssignMeshSizes3D {args} { +proc ::ConjugateHeatTransfer::examples::CylinderCooling::AssignMeshSizes3D {args} { # To be implemented } \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index 13104c49f..5c20636a6 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -1,13 +1,16 @@ +namespace eval ConjugateHeatTransfer::examples::HeatedSquare { -proc ::ConjugateHeatTransfer::examples::HeatedSquare {args} { +} + +proc ::ConjugateHeatTransfer::examples::HeatedSquare::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawSquareGeometry$::Model::SpatialDimension - HeatedSquareAssignGroups$::Model::SpatialDimension - HeatedSquareTreeAssignation$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -15,9 +18,8 @@ proc ::ConjugateHeatTransfer::examples::HeatedSquare {args} { GiD_Process 'Zoom Frame } - # Draw Geometry -proc ConjugateHeatTransfer::examples::DrawSquareGeometry3D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::DrawGeometry3D {args} { # DrawSquareGeometry2D # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 @@ -25,7 +27,7 @@ proc ConjugateHeatTransfer::examples::DrawSquareGeometry3D {args} { # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc ConjugateHeatTransfer::examples::DrawSquareGeometry2D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers create HeatSource @@ -72,7 +74,7 @@ proc ConjugateHeatTransfer::examples::DrawSquareGeometry2D {args} { # Group assign -proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups2D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::AssignGroups2D {args} { # Create the groups for the fluid GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -119,7 +121,7 @@ proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups2D {args} { GiD_Groups edit color Heating_Left_Wall "#3b3b3bff" GiD_EntitiesGroups assign Heating_Left_Wall lines 8 } -proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups3D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::AssignGroups3D {args} { # Create the groups # GiD_Groups create Fluid # GiD_Groups edit color Fluid "#26d1a8ff" @@ -143,11 +145,11 @@ proc ConjugateHeatTransfer::examples::HeatedSquareAssignGroups3D {args} { } # Tree assign -proc ConjugateHeatTransfer::examples::HeatedSquareTreeAssignation3D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::TreeAssignation3D {args} { # TreeAssignationCylinderInFlow2D # AddCuts } -proc ConjugateHeatTransfer::examples::HeatedSquareTreeAssignation2D {args} { +proc ::ConjugateHeatTransfer::examples::HeatedSquare::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl index f0dc9f04b..7277e5620 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl @@ -1,11 +1,3 @@ namespace eval ConjugateHeatTransfer::examples { } - -proc ConjugateHeatTransfer::examples::Init { } { - uplevel #0 [list source [file join $::ConjugateHeatTransfer::dir examples HeatedSquare.tcl]] - uplevel #0 [list source [file join $::ConjugateHeatTransfer::dir examples cylinder_cooling.tcl]] - uplevel #0 [list source [file join $::ConjugateHeatTransfer::dir examples BFS.tcl]] -} - -ConjugateHeatTransfer::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml index c5dfa3032..8bb5bdba4 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py deleted file mode 100644 index 7e6bb501c..000000000 --- a/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py +++ /dev/null @@ -1,37 +0,0 @@ -import sys -import time - -import KratosMultiphysics -import KratosMultiphysics.FluidDynamicsApplication -from KratosMultiphysics.ConvectionDiffusionApplication.convection_diffusion_analysis import ConvectionDiffusionAnalysis - -class ConvectionDiffusionAnalysisWithFlush(ConvectionDiffusionAnalysis): - - def __init__(self, model, project_parameters, flush_frequency=10.0): - super().__init__(model, project_parameters) - - self.flush_frequency = flush_frequency - self.last_flush = time.time() - sys.stdout.flush() - - def Initialize(self): - super().Initialize() - sys.stdout.flush() - - def FinalizeSolutionStep(self): - super().FinalizeSolutionStep() - - if self.parallel_type == "OpenMP": - now = time.time() - if now - self.last_flush > self.flush_frequency: - sys.stdout.flush() - self.last_flush = now - -if __name__ == "__main__": - - with open("ProjectParameters.json", 'r') as parameter_file: - parameters = KratosMultiphysics.Parameters(parameter_file.read()) - - global_model = KratosMultiphysics.Model() - simulation = ConvectionDiffusionAnalysisWithFlush(global_model, parameters) - simulation.Run() diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index 2cd5bdb3c..13a54f599 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -1,55 +1,21 @@ namespace eval ::ConjugateHeatTransfer { # Variable declaration - variable id variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::ConjugateHeatTransfer::Init { } { +proc ::ConjugateHeatTransfer::Init { app } { # Variable initialization - variable id variable dir - variable prefix - variable kratos_name - variable attributes + variable _app - set kratos_name ConvectionDiffusionApplication - - set id ConjugateHeatTransfer + + set _app $app set dir [apps::getMyDir "ConjugateHeatTransfer"] - set prefix ConjugateHeatTransfer apps::LoadAppById "Buoyancy" - # Intervals - dict set attributes UseIntervals 1 - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 + ::ConjugateHeatTransfer::xml::Init + ::ConjugateHeatTransfer::write::Init - set ::Model::ValidSpatialDimensions [list 2D 3D] - LoadMyFiles } - -proc ::ConjugateHeatTransfer::LoadMyFiles { } { - variable id - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - if {[apps::getActiveAppId] eq $id} { - uplevel #0 [list source [file join $dir examples examples.tcl]] - } -} - -proc ::ConjugateHeatTransfer::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} - -::ConjugateHeatTransfer::Init diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index 60613cf7a..ad1e2fcf7 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -1,4 +1,4 @@ -namespace eval ConjugateHeatTransfer::write { +namespace eval ::ConjugateHeatTransfer::write { # Namespace variables declaration variable ConjugateHeatTransferConditions variable writeCoordinatesByGroups @@ -7,13 +7,13 @@ namespace eval ConjugateHeatTransfer::write { variable solid_domain_solver_settings } -proc ConjugateHeatTransfer::write::Init { } { +proc ::ConjugateHeatTransfer::write::Init { } { # Namespace variables initialization variable ConjugateHeatTransferConditions set ConjugateHeatTransferConditions(temp) 0 unset ConjugateHeatTransferConditions(temp) - SetAttribute main_script_file "MainKratos.py" + SetAttribute main_script_file "KratosConjugateHeatTransfer.py" #SetAttribute materials_file "ConjugateHeatTransferMaterials.json" SetAttribute properties_location json SetAttribute model_part_name ThermalModelPart @@ -28,7 +28,7 @@ proc ConjugateHeatTransfer::write::Init { } { } # Events -proc ConjugateHeatTransfer::write::writeModelPartEvent { } { +proc ::ConjugateHeatTransfer::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -48,7 +48,7 @@ proc ConjugateHeatTransfer::write::writeModelPartEvent { } { write::RenameFileInModel "$filename.mdpa" "${filename}_[GetAttribute solid_mdpa_suffix].mdpa" } -proc ConjugateHeatTransfer::write::writeCustomFilesEvent { } { +proc ::ConjugateHeatTransfer::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile @@ -58,7 +58,7 @@ proc ConjugateHeatTransfer::write::writeCustomFilesEvent { } { write::RenameFileInModel $orig_name "MainKratos.py" } -proc ConjugateHeatTransfer::write::Validate {} { +proc ::ConjugateHeatTransfer::write::Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -66,54 +66,52 @@ proc ConjugateHeatTransfer::write::Validate {} { } -proc ConjugateHeatTransfer::write::PrepareBuoyancy { } { +proc ::ConjugateHeatTransfer::write::PrepareBuoyancy { } { Buoyancy::write::Init Fluid::write::SetAttribute thermal_bc_un Buoyancy_CNVDFFBC Fluid::write::SetAttribute thermal_initial_cnd_un Buoyancy_CNVDFFNodalConditions Fluid::write::SetCoordinatesByGroups 1 } -proc ConjugateHeatTransfer::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { +proc ::ConjugateHeatTransfer::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { Buoyancy::write::WriteMaterialsFile $write_const_law $include_modelpart_name # ConvectionDiffusion::write::WriteMaterialsFile $write_const_law $include_modelpart_name ConvectionDiffusion::write::WriteMaterialsFile False $include_modelpart_name } -proc Buoyancy::write::GetModelPartName { } { - return FluidThermalModelPart -} +# proc ::Buoyancy::write::GetModelPartName { } { +# return FluidThermalModelPart +# } -proc ConjugateHeatTransfer::write::GetAttribute {att} { +proc ::ConjugateHeatTransfer::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc ConjugateHeatTransfer::write::GetAttributes {} { +proc ::ConjugateHeatTransfer::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc ConjugateHeatTransfer::write::SetAttribute {att val} { +proc ::ConjugateHeatTransfer::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc ConjugateHeatTransfer::write::AddAttribute {att val} { +proc ::ConjugateHeatTransfer::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc ConjugateHeatTransfer::write::AddAttributes {configuration} { +proc ::ConjugateHeatTransfer::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc ConjugateHeatTransfer::write::AddValidApps {appid} { +proc ::ConjugateHeatTransfer::write::AddValidApps {appid} { AddAttribute validApps $appid } -proc ConjugateHeatTransfer::write::SetCoordinatesByGroups {value} { +proc ::ConjugateHeatTransfer::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value -} - -ConjugateHeatTransfer::write::Init +} \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/writeProjectParameters.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/writeProjectParameters.tcl index 81ca1f93d..566053359 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/writeProjectParameters.tcl @@ -20,16 +20,15 @@ proc ::ConjugateHeatTransfer::write::getParametersDict { } { dict set projectParametersDict processes [ConjugateHeatTransfer::write::GetProcessList] return $projectParametersDict - } -proc ConjugateHeatTransfer::write::writeParametersEvent { } { +proc ::ConjugateHeatTransfer::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc ConjugateHeatTransfer::write::GetSolverSettingsDict {} { +proc ::ConjugateHeatTransfer::write::GetSolverSettingsDict {} { set solver_settings_dict [dict create] dict set solver_settings_dict solver_type "conjugate_heat_transfer" set nDim [expr [string range [write::getValue nDim] 0 0]] @@ -68,7 +67,7 @@ proc ConjugateHeatTransfer::write::GetSolverSettingsDict {} { return $solver_settings_dict } -proc ConjugateHeatTransfer::write::GetProcessList { } { +proc ::ConjugateHeatTransfer::write::GetProcessList { } { set processes [dict create] # Get and add fluid processes @@ -104,7 +103,7 @@ proc write::GetDefaultOutputProcessDict { {appid ""} } { return $outputProcessesDict } -proc ConjugateHeatTransfer::write::GetOutputProcessesList { } { +proc ::ConjugateHeatTransfer::write::GetOutputProcessesList { } { set output_process [dict create] set need_gid [write::getValue EnableGiDOutput] @@ -154,22 +153,22 @@ proc ConjugateHeatTransfer::write::GetOutputProcessesList { } { return $output_process } -proc ConjugateHeatTransfer::write::InitExternalProjectParameters { } { +proc ::ConjugateHeatTransfer::write::InitExternalProjectParameters { } { # Buoyancy section apps::setActiveAppSoft Buoyancy write::initWriteConfiguration [Buoyancy::write::GetAttributes] - ConvectionDiffusion::write::SetAttribute nodal_conditions_un Buoyancy_CNVDFFNodalConditions - ConvectionDiffusion::write::SetAttribute conditions_un Buoyancy_CNVDFFBC - ConvectionDiffusion::write::SetAttribute thermal_bc_un Buoyancy_CNVDFFBC - ConvectionDiffusion::write::SetAttribute model_part_name FluidThermalModelPart + ::ConvectionDiffusion::write::SetAttribute nodal_conditions_un Buoyancy_CNVDFFNodalConditions + ::ConvectionDiffusion::write::SetAttribute conditions_un Buoyancy_CNVDFFBC + ::ConvectionDiffusion::write::SetAttribute thermal_bc_un Buoyancy_CNVDFFBC + ::ConvectionDiffusion::write::SetAttribute model_part_name FluidThermalModelPart set ConjugateHeatTransfer::write::fluid_domain_solver_settings [Buoyancy::write::getParametersDict] # Heating section apps::setActiveAppSoft ConvectionDiffusion - ConvectionDiffusion::write::SetAttribute nodal_conditions_un CNVDFFNodalConditions - ConvectionDiffusion::write::SetAttribute conditions_un CNVDFFBC - ConvectionDiffusion::write::SetAttribute model_part_name ThermalModelPart - ConvectionDiffusion::write::SetAttribute thermal_bc_un CNVDFFBC + ::ConvectionDiffusion::write::SetAttribute nodal_conditions_un CNVDFFNodalConditions + ::ConvectionDiffusion::write::SetAttribute conditions_un CNVDFFBC + ::ConvectionDiffusion::write::SetAttribute model_part_name ThermalModelPart + ::ConvectionDiffusion::write::SetAttribute thermal_bc_un CNVDFFBC write::initWriteConfiguration [ConvectionDiffusion::write::GetAttributes] set ConjugateHeatTransfer::write::solid_domain_solver_settings [ConvectionDiffusion::write::getParametersDict] diff --git a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl index c28e34655..6b0311785 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl @@ -14,7 +14,7 @@ proc ConjugateHeatTransfer::xml::Init { } { } proc ConjugateHeatTransfer::xml::getUniqueName {name} { - return ${::ConjugateHeatTransfer::prefix}${name} + return [::ConjugateHeatTransfer::GetAttribute prefix]${name} } proc ::ConjugateHeatTransfer::xml::MultiAppEvent {args} { @@ -41,6 +41,4 @@ proc ConjugateHeatTransfer::xml::CustomTree { args } { if {$result_node ne "" } {$result_node delete} set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute CNVDFFBC]/condition\[@n = 'FluidThermalInterface3D'\]"] if {$result_node ne "" } {$result_node delete} -} - -ConjugateHeatTransfer::xml::Init +} \ No newline at end of file From b7a453592ba097b0799ee327c00f4d9b086e580f Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 3 Sep 2021 13:02:16 +0200 Subject: [PATCH 352/556] cht write --- kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index ad1e2fcf7..c6719fa97 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -13,10 +13,9 @@ proc ::ConjugateHeatTransfer::write::Init { } { set ConjugateHeatTransferConditions(temp) 0 unset ConjugateHeatTransferConditions(temp) - SetAttribute main_script_file "KratosConjugateHeatTransfer.py" - #SetAttribute materials_file "ConjugateHeatTransferMaterials.json" - SetAttribute properties_location json - SetAttribute model_part_name ThermalModelPart + SetAttribute main_script_file [::ConjugateHeatTransfer::GetAttribute main_launch_file] + SetAttribute properties_location [::ConjugateHeatTransfer::GetWriteProperty properties_location] + SetAttribute model_part_name [::ConjugateHeatTransfer::GetWriteProperty model_part_name] SetAttribute fluid_mdpa_suffix Fluid SetAttribute solid_mdpa_suffix Solid @@ -36,8 +35,7 @@ proc ::ConjugateHeatTransfer::write::writeModelPartEvent { } { set filename [Kratos::GetModelName] # Buoyancy mdpa - Fluid::write::SetAttribute thermal_initial_cnd_un "Buoyancy_CNVDFFNodalConditions" - Fluid::write::SetAttribute thermal_bc_un "Buoyancy_CNVDFFBC" + ::ConjugateHeatTransfer::write::PrepareBuoyancy write::writeAppMDPA Buoyancy write::RenameFileInModel "$filename.mdpa" "${filename}_[GetAttribute fluid_mdpa_suffix].mdpa" From 957994df27936eaff4fca19a4ea645f741e1fe0f Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 3 Sep 2021 13:31:13 +0200 Subject: [PATCH 353/556] scripts --- kratos.gid/apps/ConjugateHeatTransfer/start.tcl | 4 ++++ kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index 13a54f599..e2043be50 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -19,3 +19,7 @@ proc ::ConjugateHeatTransfer::Init { app } { ::ConjugateHeatTransfer::write::Init } + +proc ::ConjugateHeatTransfer::GetAttribute {name} {return [$::ConjugateHeatTransfer::_app getProperty $name]} +proc ::ConjugateHeatTransfer::GetUniqueName {name} {return [$::ConjugateHeatTransfer::_app getUniqueName $name]} +proc ::ConjugateHeatTransfer::GetWriteProperty {name} {return [$::ConjugateHeatTransfer::_app getWriteProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index c6719fa97..eaba3ae54 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -51,9 +51,8 @@ proc ::ConjugateHeatTransfer::write::writeCustomFilesEvent { } { WriteMaterialsFile # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - write::RenameFileInModel $orig_name "MainKratos.py" + write::CopyFileIntoModel [GetAttribute main_script_file] + write::RenameFileInModel [file tail [GetAttribute main_script_file]] "MainKratos.py" } proc ::ConjugateHeatTransfer::write::Validate {} { From 4ec4fd8bcb5aafaf7f1222105245b769221aca8d Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 3 Sep 2021 16:58:54 +0200 Subject: [PATCH 354/556] Dam adapt to app json --- kratos.gid/apps/Dam/app.json | 48 +++++++++ .../apps/Dam/examples/ThermoMechaDam2D.tcl | 21 ++-- .../apps/Dam/examples/ThermoMechaDam3D.tcl | 21 ++-- kratos.gid/apps/Dam/examples/examples.tcl | 18 +--- kratos.gid/apps/Dam/examples/examples.xml | 4 +- ...rmoMechaDam2D.PNG => ThermoMechaDam2D.png} | Bin ...rmoMechaDam3D.PNG => ThermoMechaDam3D.png} | Bin kratos.gid/apps/Dam/start.tcl | 29 ++--- kratos.gid/apps/Dam/write/write.tcl | 101 +++++++++--------- .../apps/Dam/write/writeProjectParameters.tcl | 32 +++--- kratos.gid/apps/Dam/xml/XmlController.tcl | 40 +++---- kratos.gid/apps/Fluid/app.json | 2 +- kratos.gid/apps/Fluid/write/write.tcl | 4 +- 13 files changed, 172 insertions(+), 148 deletions(-) create mode 100644 kratos.gid/apps/Dam/app.json rename kratos.gid/apps/Dam/images/{ThermoMechaDam2D.PNG => ThermoMechaDam2D.png} (100%) rename kratos.gid/apps/Dam/images/{ThermoMechaDam3D.PNG => ThermoMechaDam3D.png} (100%) diff --git a/kratos.gid/apps/Dam/app.json b/kratos.gid/apps/Dam/app.json new file mode 100644 index 000000000..80431bb76 --- /dev/null +++ b/kratos.gid/apps/Dam/app.json @@ -0,0 +1,48 @@ +{ + "id": "DAM", + "name": "DAM", + "prefix": "Dam", + "themed": false, + "kratos_name": "DamApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/ThermoMechaDam2D.tcl", + "examples/ThermoMechaDam3D.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::Dam::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "DamParts", + "nodal_conditions": "DamNodalConditions", + "conditions": "DamLoads", + "thermal_conditions_un": "DamThermalLoads", + "materials": "DamMaterials", + "results": "Results", + "time_parameters": "DamTimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "FluidMaterials.json", + "properties_location": "mdpa", + "model_part_name": "MainModelPart" + }, + "main_launch_file": "python/MainKratosDam.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl index 34fd5f2b1..1bc768078 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl @@ -1,17 +1,20 @@ +namespace eval ::Dam::examples::ThermoMechaDam2D { -proc ::Dam::examples::ThermoMechaDam2D {args} { +} + +proc ::Dam::examples::ThermoMechaDam2D::Init {args} { - DrawDamGeometry2D - AssignGroupsDam2D - AssignDamMeshSizes2D - TreeAssignationDam2D + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS GidUtils::UpdateWindow LAYER } -proc Dam::examples::DrawDamGeometry2D {args} { +proc ::Dam::examples::ThermoMechaDam2D::DrawGeometry {args} { Kratos::ResetModel GiD_Layers create Dam @@ -69,7 +72,7 @@ proc Dam::examples::DrawDamGeometry2D {args} { } -proc Dam::examples::AssignGroupsDam2D {args} { +proc ::Dam::examples::ThermoMechaDam2D::AssignGroups {args} { # Create the groups GiD_Groups create Dam @@ -110,7 +113,7 @@ proc Dam::examples::AssignGroupsDam2D {args} { } -proc Dam::examples::AssignDamMeshSizes2D {args} { +proc ::Dam::examples::ThermoMechaDam2D::AssignMeshSizes {args} { set dam_mesh_size 0.25 GiD_Process Mescape Meshing AssignSizes Surfaces $dam_mesh_size [GiD_EntitiesGroups get Dam surfaces] escape escape @@ -119,7 +122,7 @@ proc Dam::examples::AssignDamMeshSizes2D {args} { } # Tree assign -proc Dam::examples::TreeAssignationDam2D {args} { +proc ::Dam::examples::ThermoMechaDam2D::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl index 9dbda459d..bbd7e901f 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl @@ -1,21 +1,24 @@ +namespace eval ::Dam::examples::ThermoMechaDam3D { -proc ::Dam::examples::ThermoMechaDam3D {args} { +} + +proc ::Dam::examples::ThermoMechaDam3D:Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawDamGeometry3D - AssignGroupsDam3D - AssignDamMeshSizes3D - TreeAssignationDam3D + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS GidUtils::UpdateWindow LAYER } -proc Dam::examples::DrawDamGeometry3D {args} { +proc ::Dam::examples::ThermoMechaDam3D::DrawGeometry {args} { Kratos::ResetModel GiD_Layers create Ground @@ -64,7 +67,7 @@ proc Dam::examples::DrawDamGeometry3D {args} { } -proc Dam::examples::AssignGroupsDam3D {args} { +proc ::Dam::examples::ThermoMechaDam3D::AssignGroups {args} { # Create the groups GiD_Groups create Dam @@ -90,7 +93,7 @@ proc Dam::examples::AssignGroupsDam3D {args} { } -proc Dam::examples::AssignDamMeshSizes3D {args} { +proc ::Dam::examples::ThermoMechaDam3D::AssignMeshSizes {args} { set dam_mesh_size 2 GiD_Process Mescape Meshing AssignSizes volumes $dam_mesh_size [GiD_EntitiesGroups get Dam volumes] escape escape @@ -99,7 +102,7 @@ proc Dam::examples::AssignDamMeshSizes3D {args} { } # Tree assign -proc Dam::examples::TreeAssignationDam3D {args} { +proc ::Dam::examples::ThermoMechaDam3D::TreeAssignation {args} { set nd 3D set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/Dam/examples/examples.tcl b/kratos.gid/apps/Dam/examples/examples.tcl index 9601b2ef7..89a6926fc 100644 --- a/kratos.gid/apps/Dam/examples/examples.tcl +++ b/kratos.gid/apps/Dam/examples/examples.tcl @@ -1,19 +1,3 @@ -namespace eval Dam::examples { +namespace eval ::Dam::examples { } - -proc Dam::examples::Init { } { - uplevel #0 [list source [file join $::Dam::dir examples ThermoMechaDam2D.tcl]] - uplevel #0 [list source [file join $::Dam::dir examples ThermoMechaDam3D.tcl]] -} - -proc ::Dam::examples::ThermoMechaDam { } { - #W $::Model::SpatialDimension - if {$::Model::SpatialDimension eq "2D"} { - ::Dam::examples::ThermoMechaDam2D - } { - ::Dam::examples::ThermoMechaDam3D - } -} - -Dam::examples::Init diff --git a/kratos.gid/apps/Dam/examples/examples.xml b/kratos.gid/apps/Dam/examples/examples.xml index 7acd04bb0..ce9241302 100644 --- a/kratos.gid/apps/Dam/examples/examples.xml +++ b/kratos.gid/apps/Dam/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG b/kratos.gid/apps/Dam/images/ThermoMechaDam2D.png similarity index 100% rename from kratos.gid/apps/Dam/images/ThermoMechaDam2D.PNG rename to kratos.gid/apps/Dam/images/ThermoMechaDam2D.png diff --git a/kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG b/kratos.gid/apps/Dam/images/ThermoMechaDam3D.png similarity index 100% rename from kratos.gid/apps/Dam/images/ThermoMechaDam3D.PNG rename to kratos.gid/apps/Dam/images/ThermoMechaDam3D.png diff --git a/kratos.gid/apps/Dam/start.tcl b/kratos.gid/apps/Dam/start.tcl index 23b20875a..241969de1 100644 --- a/kratos.gid/apps/Dam/start.tcl +++ b/kratos.gid/apps/Dam/start.tcl @@ -1,30 +1,21 @@ namespace eval ::Dam { # Variable declaration variable dir - variable kratos_name + variable _app } -proc ::Dam::Init { } { +proc ::Dam::Init { app } { # Variable initialization variable dir - variable kratos_name - set kratos_name "DamApplication" + variable _app - set dir [apps::getMyDir "Dam"] - set ::Model::ValidSpatialDimensions [list 2D 3D] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - LoadMyFiles -} + set dir [apps::getMyDir "Dam"] + set _app $app -proc ::Dam::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] + ::Dam::xml::Init + ::Dam::write::Init } -::Dam::Init +proc ::Dam::GetAttribute {name} {return [$::Dam::_app getProperty $name]} +proc ::Dam::GetUniqueName {name} {return [$::Dam::_app getUniqueName $name]} +proc ::Dam::GetWriteProperty {name} {return [$::Dam::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index d36546dbc..55fe88c90 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -1,4 +1,4 @@ -namespace eval Dam::write { +namespace eval ::Dam::write { variable ConditionsDictGroupIterators variable NodalConditionsGroup variable TableDict @@ -9,7 +9,7 @@ namespace eval Dam::write { variable number_tables } -proc Dam::write::Init { } { +proc ::Dam::write::Init { } { # Namespace variables inicialization variable ConditionsDictGroupIterators variable NodalConditionsGroup @@ -20,27 +20,30 @@ proc Dam::write::Init { } { catch {unset TableDict} set TableDict [dict create] - SetAttribute parts_un DamParts - SetAttribute nodal_conditions_un DamNodalConditions - SetAttribute conditions_un DamLoads - SetAttribute thermal_conditions_un DamThermalLoads - SetAttribute materials_un DamMaterials - SetAttribute results_un Results - SetAttribute time_parameters_un DamTimeParameters - SetAttribute writeCoordinatesByGroups 0 + SetAttribute parts_un [::Dam::GetUniqueName parts] + SetAttribute nodal_conditions_un [::Dam::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::Dam::GetUniqueName conditions] + SetAttribute thermal_conditions_un [::Dam::GetUniqueName thermal_conditions] + SetAttribute materials_un [::Dam::GetUniqueName materials] + SetAttribute results_un [::Dam::GetUniqueName results] + SetAttribute time_parameters_un [::Dam::GetUniqueName time_parameters] + + SetAttribute writeCoordinatesByGroups [::Dam::GetWriteProperty coordinates] SetAttribute validApps [list "Dam"] - SetAttribute main_script_file "MainKratosDam.py" - SetAttribute properties_location mdpa - SetAttribute model_part_name "MainModelPart" + SetAttribute main_script_file [::Dam::GetAttribute main_launch_file] + SetAttribute properties_location [::Dam::GetWriteProperty properties_location] + SetAttribute model_part_name [::Dam::GetWriteProperty model_part_name] } -proc Dam::write::writeCustomFilesEvent { } { - write::CopyFileIntoModel "python/MainKratosDam.py" - write::RenameFileInModel "MainKratosDam.py" "MainKratos.py" +proc ::Dam::write::writeCustomFilesEvent { } { + # Main python script + set orig_name [GetAttribute main_script_file] + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } # MDPA Blocks -proc Dam::write::writeModelPartEvent { } { +proc ::Dam::write::writeModelPartEvent { } { # Init data write::initWriteConfiguration [GetAttributes] @@ -64,7 +67,7 @@ proc Dam::write::writeModelPartEvent { } { Dam::write::writeMeshes } -proc Dam::write::UpdateMaterials { } { +proc ::Dam::write::UpdateMaterials { } { set matdict [write::getMatDict] foreach {mat props} $matdict { set constlaw [dict get $props ConstitutiveLaw] @@ -81,23 +84,23 @@ proc Dam::write::UpdateMaterials { } { write::setMatDict $matdict } -proc Dam::write::writeConditions { } { +proc ::Dam::write::writeConditions { } { variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [write::writeConditions "DamLoads"] + set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un]] set pairs [lsort -increasing -index end [dict values $ConditionsDictGroupIterators] ] set index [lindex [lindex [lsort -integer -index 0 $pairs] end] end] if {$index eq ""} { set index 0 } - set ThermalConditionGroups [write::writeConditions "DamThermalLoads" $index] + set ThermalConditionGroups [write::writeConditions [GetAttribute thermal_conditions_un] $index] set ConditionsDictGroupIterators [dict merge $ConditionsDictGroupIterators $ThermalConditionGroups] set SelfweightConditionGroups [write::writeConditions "DamSelfweight" $index] set ConditionsDictGroupIterators [dict merge $ConditionsDictGroupIterators $SelfweightConditionGroups] } -proc Dam::write::writeMeshes { } { +proc ::Dam::write::writeMeshes { } { write::writePartSubModelPart @@ -107,17 +110,17 @@ proc Dam::write::writeMeshes { } { } # Solo Malla , no en conditions - writeNodalConditions "DamNodalConditions" + writeNodalConditions [GetAttribute nodal_conditions_un] # A Condition y a meshes-> salvo lo que no tenga topologia - writeLoads "DamLoads" - writeLoads "DamThermalLoads" - writeLoads "DamSelfweight" + writeLoads [GetAttribute conditions_un] + writeLoads [GetAttribute thermal_conditions_un] + writeLoads [GetAttribute nodal_conditions_un] } -proc Dam::write::writeNodalConditions { keyword } { +proc ::Dam::write::writeNodalConditions { keyword } { variable TableDict set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute $keyword]/condition/group" @@ -141,7 +144,7 @@ proc Dam::write::writeNodalConditions { keyword } { } } -proc Dam::write::writeLoads { baseUN } { +proc ::Dam::write::writeLoads { baseUN } { variable TableDict variable ConditionsDictGroupIterators set root [customlib::GetBaseRoot] @@ -165,7 +168,7 @@ proc Dam::write::writeLoads { baseUN } { } } -proc Dam::write::getVariableNameList {un {condition_type "Condition"}} { +proc ::Dam::write::getVariableNameList {un {condition_type "Condition"}} { set xp1 "[spdAux::getRoute $un]/condition/group" set groups [[customlib::GetBaseRoot] selectNodes $xp1] @@ -187,7 +190,7 @@ proc Dam::write::getVariableNameList {un {condition_type "Condition"}} { return $variable_list } -proc Dam::write::GetTableidFromFileid { filename } { +proc ::Dam::write::GetTableidFromFileid { filename } { variable TableDict foreach condid [dict keys $TableDict] { foreach groupid [dict keys [dict get $TableDict $condid]] { @@ -201,7 +204,7 @@ proc Dam::write::GetTableidFromFileid { filename } { return 0 } -proc Dam::write::writeTables { } { +proc ::Dam::write::writeTables { } { variable TableDict set printed_tables [list ] foreach table [GetPrinTables] { @@ -224,7 +227,7 @@ proc Dam::write::writeTables { } { } } -proc Dam::write::writeTables_dev { } { +proc ::Dam::write::writeTables_dev { } { set printed_tables [list ] foreach table [GetPrinTables_dev] { @@ -246,14 +249,14 @@ proc Dam::write::writeTables_dev { } { } -proc Dam::write::GetPrinTables {} { +proc ::Dam::write::GetPrinTables {} { set root [customlib::GetBaseRoot] FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"] set listaTablas [list ] set listaFiles [list ] set num 0 - set origins [list "DamLoads" "DamThermalLoads" "DamNodalConditions" "DamSelfweight"] + set origins [list [GetAttribute conditions_un] [GetAttribute thermal_conditions_un] [GetAttribute nodal_conditions_un] "DamSelfweight"] foreach unique_name $origins { set xpathCond "[spdAux::getRoute $unique_name]/condition/group/value\[@type='tablefile'\]" foreach node [$root selectNodes $xpathCond] { @@ -283,7 +286,7 @@ proc Dam::write::GetPrinTables {} { } -proc Dam::write::GetPrinTables_dev { } { +proc ::Dam::write::GetPrinTables_dev { } { set root [customlib::GetBaseRoot] FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"] @@ -322,7 +325,7 @@ proc Dam::write::GetPrinTables_dev { } { #------------------------------------------------------------------------------- -proc Dam::write::writeThermalElements {} { +proc ::Dam::write::writeThermalElements {} { set ThermalGroups [list] @@ -360,7 +363,7 @@ proc Dam::write::writeThermalElements {} { } } -proc Dam::write::writeThermalConnectivities {Group ElemType ElemName ConnectivityType ElementId ElementList} { +proc ::Dam::write::writeThermalConnectivities {Group ElemType ElemName ConnectivityType ElementId ElementList} { set Entities [GiD_EntitiesGroups get $Group elements -element_type $ElemType] if {[llength $Entities] > 0} { upvar $ElementId MyElementId @@ -377,7 +380,7 @@ proc Dam::write::writeThermalConnectivities {Group ElemType ElemName Connectivit } } -proc Dam::write::Triangle2D3Connectivities { ElemId } { +proc ::Dam::write::Triangle2D3Connectivities { ElemId } { set ElementInfo [GiD_Mesh get element $ElemId] #ElementInfo: ... @@ -385,7 +388,7 @@ proc Dam::write::Triangle2D3Connectivities { ElemId } { } -proc Dam::write::Quadrilateral2D4Connectivities { ElemId } { +proc ::Dam::write::Quadrilateral2D4Connectivities { ElemId } { #Note: It is the same for the Tethrahedron3D4 @@ -394,7 +397,7 @@ proc Dam::write::Quadrilateral2D4Connectivities { ElemId } { return "[lindex $ElementInfo 3] [lindex $ElementInfo 4] [lindex $ElementInfo 5] [lindex $ElementInfo 6]" } -proc Dam::write::Hexahedron3D8Connectivities { ElemId } { +proc ::Dam::write::Hexahedron3D8Connectivities { ElemId } { #It is the same for Quadrilateral2D8 @@ -408,7 +411,7 @@ proc Dam::write::Hexahedron3D8Connectivities { ElemId } { #------------------------------------------------------------------------------- -proc Dam::write::ThermalSubModelPart { } { +proc ::Dam::write::ThermalSubModelPart { } { variable ThermalSubModelPartDict @@ -439,7 +442,7 @@ proc Dam::write::ThermalSubModelPart { } { #------------------------------------------------------------------------------- -proc Dam::write::getSubModelPartThermalNames { } { +proc ::Dam::write::getSubModelPartThermalNames { } { set submodelThermalPartsNames [list] @@ -451,36 +454,34 @@ proc Dam::write::getSubModelPartThermalNames { } { return $submodelThermalPartsNames } -proc Dam::write::GetDamPartGroupNodes { } { +proc ::Dam::write::GetDamPartGroupNodes { } { set nodes [write::getPartsGroupsId node] return $nodes } -proc Dam::write::GetAttribute {att} { +proc ::Dam::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc Dam::write::GetAttributes {} { +proc ::Dam::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc Dam::write::SetAttribute {att val} { +proc ::Dam::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc Dam::write::AddAttribute {att val} { +proc ::Dam::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc Dam::write::AddAttributes {configuration} { +proc ::Dam::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } - -Dam::write::Init diff --git a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl index 36c2f667a..1f88f0cba 100644 --- a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl @@ -1,6 +1,6 @@ ### Project Parameters -proc Dam::write::getParametersDict { } { +proc ::Dam::write::getParametersDict { } { variable number_tables set number_tables 0 @@ -41,7 +41,7 @@ proc Dam::write::getParametersDict { } { } # This process is the responsible of writing files -proc Dam::write::writeParametersEvent { } { +proc ::Dam::write::writeParametersEvent { } { set projectParametersDict [Dam::write::getParametersDict] write::WriteJSON $projectParametersDict @@ -57,7 +57,7 @@ proc Dam::write::writeParametersEvent { } { } } -proc Dam::write::GetProblemDataDict { } { +proc ::Dam::write::GetProblemDataDict { } { ### Create section set problemDataDict [dict create] set damTypeofProblem [write::getValue DamTypeofProblem] @@ -106,7 +106,7 @@ proc Dam::write::GetProblemDataDict { } { return $problemDataDict } -proc Dam::write::GetSolverSettingsDict { } { +proc ::Dam::write::GetSolverSettingsDict { } { set solversettingsDict [dict create] set damTypeofProblem [write::getValue DamTypeofProblem] @@ -336,7 +336,7 @@ proc Dam::write::GetSolverSettingsDict { } { } # This process returns a dict of domains according input parameters in the solvers -proc Dam::write::DefinitionDomains { } { +proc ::Dam::write::DefinitionDomains { } { ### Boundary conditions processes set domainsDict [dict create] @@ -371,7 +371,7 @@ proc Dam::write::DefinitionDomains { } { # This process assign a number for the different tables instead of names (this is for matching with .mdpa) -proc Dam::write::ChangeFileNameforTableid { processList } { +proc ::Dam::write::ChangeFileNameforTableid { processList } { # Variable global definida al principio y utilizada para transferir entre procesos el número de tablas existentes variable number_tables @@ -417,7 +417,7 @@ proc Dam::write::ChangeFileNameforTableid { processList } { # This process is used to define new list of Output configuratino parameters -proc Dam::write::GetOutputDict { {appid ""} } { +proc ::Dam::write::GetOutputDict { {appid ""} } { set outputDict [dict create] set resultDict [dict create] @@ -461,7 +461,7 @@ proc Dam::write::GetOutputDict { {appid ""} } { # This process is used for checking if the user is interested on streamlines -proc Dam::write::StremalinesUtility {} { +proc ::Dam::write::StremalinesUtility {} { set nodalList [write::GetResultsList NodalResults] if {[lsearch $nodalList Vi_POSITIVE] >= 0 || [lsearch $nodalList Viii_POSITIVE] >= 0} { @@ -473,7 +473,7 @@ proc Dam::write::StremalinesUtility {} { } # appid Dam solStratUN DamSolStrat problem_base_UN DamMechanicalData -proc Dam::write::getSolversParametersDict { {appid "Dam"} {solStratUN ""} {problem_base_UN ""}} { +proc ::Dam::write::getSolversParametersDict { {appid "Dam"} {solStratUN ""} {problem_base_UN ""}} { #W "Params -> $appid $solStratUN $problem_base_UN" set solstratName [write::getValue $solStratUN] @@ -526,7 +526,7 @@ proc Dam::write::getSolversParametersDict { {appid "Dam"} {solStratUN ""} {probl } # This process write the construction in process in case is selected -proc Dam::write::GetConstructionDomainProcessDict { } { +proc ::Dam::write::GetConstructionDomainProcessDict { } { set construction_dict [dict create] set data_basenode [[customlib::GetBaseRoot] selectNodes [spdAux::getRoute "DamConstructionProcess"]] @@ -584,7 +584,7 @@ proc Dam::write::GetConstructionDomainProcessDict { } { } # This process write the transfer results process in case is selected -proc Dam::write::GetTransferResultsDict { } { +proc ::Dam::write::GetTransferResultsDict { } { set transfer_results_dict [dict create] set consider_save_intermediate_variables [write::getValue DamSaveResults SaveIntermediateResults] if {$consider_save_intermediate_variables eq "Yes"} { @@ -699,7 +699,7 @@ proc Dam::write::GetTransferResultsDict { } { # This process writes a dictionary for creating new projectparameters exclusively for solving selfweight problem -proc Dam::write::getParametersSelfWeight { } { +proc ::Dam::write::getParametersSelfWeight { } { set projectParametersDictSelfWeight [dict create] set solversettingsDict [dict create] @@ -750,7 +750,7 @@ proc Dam::write::getParametersSelfWeight { } { } # Predefined solver values for selfweight problem -proc Dam::write::predefinedParametersSelfWeight { } { +proc ::Dam::write::predefinedParametersSelfWeight { } { set solverSelfParametersDict [dict create] dict set solverSelfParametersDict solution_type "Quasi-Static" @@ -785,7 +785,7 @@ proc Dam::write::predefinedParametersSelfWeight { } { } # This process filters Nodal constraints for selfweight problem -proc Dam::write::filteringConstraints { processList} { +proc ::Dam::write::filteringConstraints { processList} { set returnList [list ] foreach nodalProcess $processList { @@ -797,7 +797,7 @@ proc Dam::write::filteringConstraints { processList} { return $returnList } -proc Dam::write::DevicesOutput { } { +proc ::Dam::write::DevicesOutput { } { set output_state [write::getValue DamOutputState] set lista [list ] @@ -854,7 +854,7 @@ proc Dam::write::DevicesOutput { } { } -proc Dam::write::TemperaturebyDevices { } { +proc ::Dam::write::TemperaturebyDevices { } { # Variable global definida al principio y utilizada para transferir entre procesos el número de tablas existentes variable number_tables diff --git a/kratos.gid/apps/Dam/xml/XmlController.tcl b/kratos.gid/apps/Dam/xml/XmlController.tcl index c2771abd1..de4b01ccc 100644 --- a/kratos.gid/apps/Dam/xml/XmlController.tcl +++ b/kratos.gid/apps/Dam/xml/XmlController.tcl @@ -1,10 +1,8 @@ -namespace eval Dam::xml { - variable dir +namespace eval ::Dam::xml { } -proc Dam::xml::Init { } { - variable dir - Model::InitVariables dir $Dam::dir +proc ::Dam::xml::Init { } { + Model::InitVariables dir $::Dam::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -16,7 +14,7 @@ proc Dam::xml::Init { } { Model::getSolvers Solvers.xml } -proc Dam::xml::getUniqueName {name} { +proc ::Dam::xml::getUniqueName {name} { return Dam$name } @@ -29,7 +27,7 @@ proc ::Dam::xml::MultiAppEvent {args} { } -proc Dam::xml::CustomTree { args } { +proc ::Dam::xml::CustomTree { args } { customlib::UpdateDocument # Add some nodal results set nodal_results_base [[customlib::GetBaseRoot] selectNodes [spdAux::getRoute NodalResults]] @@ -57,7 +55,7 @@ proc Dam::xml::CustomTree { args } { } -proc Dam::xml::ProcGetSchemes {domNode args} { +proc ::Dam::xml::ProcGetSchemes {domNode args} { set type_of_problem [write::getValue DamTypeofProblem] set sol_stratUN "DamSolStratTherm" @@ -99,7 +97,7 @@ proc Dam::xml::ProcGetSchemes {domNode args} { } -proc Dam::xml::SolStratParamState {outnode} { +proc ::Dam::xml::SolStratParamState {outnode} { set root [customlib::GetBaseRoot] set solstrat_un "DamSolStrat" @@ -125,7 +123,7 @@ proc Dam::xml::SolStratParamState {outnode} { return $ret } -proc Dam::xml::ProcGetConstitutiveLaws {domNode args} { +proc ::Dam::xml::ProcGetConstitutiveLaws {domNode args} { set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] #W "Round 1 $Claws" @@ -227,7 +225,7 @@ proc Dam::xml::ProcGetConstitutiveLaws {domNode args} { return $values } -proc Dam::xml::ProcCheckNodalConditionState {domNode args} { +proc ::Dam::xml::ProcCheckNodalConditionState {domNode args} { set parts_un DamParts if {[spdAux::getRoute $parts_un] ne ""} { set conditionId [$domNode @n] @@ -269,7 +267,7 @@ proc Dam::xml::ProcCheckNodalConditionState {domNode args} { } {return "hidden"} } -proc Dam::xml::ProcCheckConditionState {domNode args} { +proc ::Dam::xml::ProcCheckConditionState {domNode args} { set cond_id [$domNode @n] # By active parts @@ -322,7 +320,7 @@ proc Dam::xml::ProcCheckConditionState {domNode args} { } -proc Dam::xml::ProcGetSolutionStrategies {domNode args} { +proc ::Dam::xml::ProcGetSolutionStrategies {domNode args} { set names "" set pnames "" set ids [list ] @@ -359,7 +357,7 @@ proc Dam::xml::ProcGetSolutionStrategies {domNode args} { return [join $pnames ","] } -proc Dam::xml::ProcGetElementsValues {domNode args} { +proc ::Dam::xml::ProcGetElementsValues {domNode args} { set TypeofProblem [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamTypeofProblem]] v] set nodeApp [spdAux::GetAppIdFromNode $domNode] set sol_stratUN [apps::getAppUniqueName $nodeApp SolStrat] @@ -403,7 +401,7 @@ proc Dam::xml::ProcGetElementsValues {domNode args} { return $values } -proc Dam::xml::ProcActivatePartsState {domNode args} { +proc ::Dam::xml::ProcActivatePartsState {domNode args} { set ActivateConstruction [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamActivateConstruction]] v] set state hidden if {$ActivateConstruction} { @@ -412,7 +410,7 @@ proc Dam::xml::ProcActivatePartsState {domNode args} { return $state } -proc Dam::xml::ProcCheckTemperatureState {domNode args} { +proc ::Dam::xml::ProcCheckTemperatureState {domNode args} { set ActivateConstruction [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamActivateConstruction]] v] set state hidden if {$ActivateConstruction} { @@ -421,7 +419,7 @@ proc Dam::xml::ProcCheckTemperatureState {domNode args} { return $state } -proc Dam::xml::ProcNoorzaiState {domNode args} { +proc ::Dam::xml::ProcNoorzaiState {domNode args} { set SourceType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamSourceType]] v] set ActivateConstruction [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamActivateConstruction]] v] set state hidden @@ -431,7 +429,7 @@ proc Dam::xml::ProcNoorzaiState {domNode args} { return $state } -proc Dam::xml::ProcAzenhaState {domNode args} { +proc ::Dam::xml::ProcAzenhaState {domNode args} { set SourceType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamSourceType]] v] set ActivateConstruction [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamActivateConstruction]] v] set state hidden @@ -441,14 +439,10 @@ proc Dam::xml::ProcAzenhaState {domNode args} { return $state } -proc Dam::xml::ProcAddResultsState {domNode args} { +proc ::Dam::xml::ProcAddResultsState {domNode args} { set TypeResults [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamTypeResults]] v] set ActivateAddResults [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute DamAddPreviousResults]] v] set state hidden if {$ActivateAddResults} {set state normal} return $state } - -Dam::xml::Init - - diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index a6d190399..cf90f38d9 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -44,6 +44,6 @@ "model_part_name": "FluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "KratosFluid.py", + "main_launch_file": "python/KratosFluid.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index 2d00a5e04..cc5c43fe7 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -71,8 +71,8 @@ proc ::Fluid::write::writeCustomFilesEvent { } { # Main python script set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - write::RenameFileInModel $orig_name "MainKratos.py" + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } # Custom files From f3bb5e650051ef41b5f50689bb28e908f4258ff8 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 3 Sep 2021 17:13:08 +0200 Subject: [PATCH 355/556] dam examples --- kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl index bbd7e901f..75167ec22 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl @@ -2,7 +2,7 @@ namespace eval ::Dam::examples::ThermoMechaDam3D { } -proc ::Dam::examples::ThermoMechaDam3D:Init {args} { +proc ::Dam::examples::ThermoMechaDam3D::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] From 1c39d99dc031ac19f1f6f6c45cdcc63bd18966e9 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 3 Sep 2021 17:59:05 +0200 Subject: [PATCH 356/556] Work in namespaces --- kratos.gid/apps/Fluid/app.json | 2 +- kratos.gid/apps/Fluid/start.tcl | 33 ++-- kratos.gid/apps/Fluid/write/write.tcl | 86 +++++---- .../Fluid/write/writeProjectParameters.tcl | 20 +- kratos.gid/apps/Fluid/xml/XmlController.tcl | 182 +++++++++--------- 5 files changed, 161 insertions(+), 162 deletions(-) diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index cf90f38d9..478746dc8 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -17,7 +17,7 @@ "write/write.tcl", "write/writeProjectParameters.tcl" ], - "start_script":"::Fluid::Init", + "start_script":"::Kratos::Fluid::Init", "requeriments":{ "apps":[], "minimum_gid_version":"15.1.3d" diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index e4207d5af..5af42bcf1 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -1,22 +1,23 @@ -namespace eval ::Fluid { +namespace eval ::Kratos::Fluid { # Variable declaration variable _app variable dir -} -proc ::Fluid::Init { app } { - # Variable initialization - variable _app - variable dir - set _app $app - set dir [apps::getMyDir "Fluid"] - - # XML init event - ::Fluid::xml::Init - ::Fluid::write::Init -} + proc Init { app } { + # Variable initialization + variable _app + variable dir + + set _app $app + set dir [apps::getMyDir "Fluid"] + + # XML init event + xml::Init $dir + write::Init + } -proc ::Fluid::GetAttribute {name} {return [$::Fluid::_app getProperty $name]} -proc ::Fluid::GetUniqueName {name} {return [$::Fluid::_app getUniqueName $name]} -proc ::Fluid::GetWriteProperty {name} {return [$::Fluid::_app getWriteProperty $name]} + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} +} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index cc5c43fe7..b22d5cd23 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,4 +1,5 @@ -namespace eval ::Fluid::write { +namespace eval ::Kratos::Fluid::write { + namespace path ::Kratos::Fluid # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes @@ -6,32 +7,32 @@ namespace eval ::Fluid::write { # after regular conditions are written, we need this number in order to print the custom submodelpart conditions # only if are applied over things that are not in the skin variable last_condition_iterator -} -proc ::Fluid::write::Init { } { + +proc Init { } { # Namespace variables inicialization - SetAttribute parts_un [::Fluid::GetUniqueName parts] - SetAttribute nodal_conditions_un [::Fluid:::GetUniqueName nodal_conditions] - SetAttribute conditions_un [::Fluid::GetUniqueName conditions] - SetAttribute materials_un [::Fluid::GetUniqueName materials] - SetAttribute results_un [::Fluid::GetUniqueName results] - SetAttribute drag_un [::Fluid::GetUniqueName drag] - SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] + SetAttribute parts_un [GetUniqueName parts] + SetAttribute nodal_conditions_un [GetUniqueName nodal_conditions] + SetAttribute conditions_un [GetUniqueName conditions] + SetAttribute materials_un [GetUniqueName materials] + SetAttribute results_un [GetUniqueName results] + SetAttribute drag_un [GetUniqueName drag] + SetAttribute time_parameters_un [GetUniqueName time_parameters] - SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] + SetAttribute writeCoordinatesByGroups [GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] - SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] - SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] - SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] - SetAttribute output_model_part_name [::Fluid::GetWriteProperty output_model_part_name] + SetAttribute main_script_file [GetAttribute main_launch_file] + SetAttribute materials_file [GetWriteProperty materials_file] + SetAttribute properties_location [GetWriteProperty properties_location] + SetAttribute model_part_name [GetWriteProperty model_part_name] + SetAttribute output_model_part_name [GetWriteProperty output_model_part_name] variable last_condition_iterator set last_condition_iterator 0 } # MDPA write event -proc ::Fluid::write::writeModelPartEvent { } { +proc writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -56,18 +57,18 @@ proc ::Fluid::write::writeModelPartEvent { } { # Custom SubmodelParts variable last_condition_iterator - write::writeBasicSubmodelPartsByUniqueId $Fluid::write::FluidConditionMap $last_condition_iterator + write::writeBasicSubmodelPartsByUniqueId $FluidConditionMap $last_condition_iterator # SubmodelParts writeMeshes # Clean - unset ::Fluid::write::FluidConditionMap + unset FluidConditionMap } -proc ::Fluid::write::writeCustomFilesEvent { } { +proc writeCustomFilesEvent { } { # Write the fluid materials json file - ::Fluid::write::WriteMaterialsFile + WriteMaterialsFile # Main python script set orig_name [GetAttribute main_script_file] @@ -76,13 +77,13 @@ proc ::Fluid::write::writeCustomFilesEvent { } { } # Custom files -proc ::Fluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { +proc WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } -proc ::Fluid::write::Validate {} { +proc Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -100,23 +101,23 @@ proc ::Fluid::write::Validate {} { } # MDPA Blocks -proc ::Fluid::write::writeProperties { } { +proc writeProperties { } { # Begin Properties write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc ::Fluid::write::writeConditions { } { +proc writeConditions { } { writeBoundaryConditions writeDrags } -proc ::Fluid::write::getFluidModelPartFilename { } { +proc getFluidModelPartFilename { } { return [Kratos::GetModelName] } -proc ::Fluid::write::writeBoundaryConditions { } { +proc writeBoundaryConditions { } { variable FluidConditionMap variable last_condition_iterator @@ -148,26 +149,26 @@ proc ::Fluid::write::writeBoundaryConditions { } { set kname LineCondition2D2N set nnodes 2 } - set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $::Fluid::write::FluidConditionMap] + set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $FluidConditionMap] # Clean GiD_Groups delete $skin_group_name } -proc ::Fluid::write::writeDrags { } { +proc writeDrags { } { lappend ::Model::NodalConditions [::Model::NodalCondition new Drag] write::writeNodalConditions [GetAttribute drag_un] Model::ForgetNodalCondition Drag } -proc ::Fluid::write::writeMeshes { } { +proc writeMeshes { } { write::writePartSubModelPart write::writeNodalConditions [GetAttribute nodal_conditions_un] writeConditionsMesh #writeSkinMesh } -proc ::Fluid::write::writeConditionsMesh { } { +proc writeConditionsMesh { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" @@ -188,7 +189,7 @@ proc ::Fluid::write::writeConditionsMesh { } { if {![$cond hasTopologyFeatures]} { ::write::writeGroupSubModelPart $condid $groupid "Nodes" } else { - ::write::writeGroupSubModelPartByUniqueId $condid $groupid $Fluid::write::FluidConditionMap "Conditions" + ::write::writeGroupSubModelPartByUniqueId $condid $groupid $FluidConditionMap "Conditions" } } } @@ -200,11 +201,11 @@ proc ::Fluid::write::writeConditionsMesh { } { set groupid [get_domnode_attribute $group n] dict set groups_dict $groupid what "Conditions" } - write::writeConditionGroupedSubmodelPartsByUniqueId $condid $groups_dict $Fluid::write::FluidConditionMap + write::writeConditionGroupedSubmodelPartsByUniqueId $condid $groups_dict $FluidConditionMap } } -proc ::Fluid::write::InitConditionsMap { {map "" } } { +proc InitConditionsMap { {map "" } } { variable FluidConditionMap if {$map eq ""} { @@ -213,43 +214,44 @@ proc ::Fluid::write::InitConditionsMap { {map "" } } { set FluidConditionMap $map } } -proc ::Fluid::write::FreeConditionsMap { } { +proc FreeConditionsMap { } { variable FluidConditionMap unset FluidConditionMap } -proc ::Fluid::write::GetAttribute {att} { +proc GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc ::Fluid::write::GetAttributes {} { +proc GetAttributes {} { variable writeAttributes return $writeAttributes } -proc ::Fluid::write::SetAttribute {att val} { +proc SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc ::Fluid::write::AddAttribute {att val} { +proc AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc ::Fluid::write::AddAttributes {configuration} { +proc AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc ::Fluid::write::AddValidApps {appid} { +proc AddValidApps {appid} { AddAttribute validApps $appid } -proc ::Fluid::write::SetCoordinatesByGroups {value} { +proc SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } +} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index bf15c8c2d..4f6bd7009 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -1,5 +1,5 @@ # Project Parameters -proc ::Fluid::write::getParametersDict { } { +proc ::Kratos::Fluid::write::getParametersDict { } { set projectParametersDict [dict create] # Problem data @@ -25,13 +25,13 @@ proc ::Fluid::write::getParametersDict { } { return $projectParametersDict } -proc ::Fluid::write::writeParametersEvent { } { +proc ::Kratos::Fluid::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc ::Fluid::write::getAuxiliarProcessList {} { +proc ::Kratos::Fluid::write::getAuxiliarProcessList {} { set process_list [list ] foreach process [getDragProcessList] {lappend process_list $process} @@ -39,7 +39,7 @@ proc ::Fluid::write::getAuxiliarProcessList {} { return $process_list } -proc ::Fluid::write::getDragProcessList {} { +proc ::Kratos::Fluid::write::getDragProcessList {} { set root [customlib::GetBaseRoot] set process_list [list ] @@ -73,7 +73,7 @@ proc ::Fluid::write::getDragProcessList {} { } # Gravity SubModelParts and Process collection -proc ::Fluid::write::getGravityProcessDict {} { +proc ::Kratos::Fluid::write::getGravityProcessDict {} { set root [customlib::GetBaseRoot] set value [write::getValue FLGravity GravityValue] @@ -98,7 +98,7 @@ proc ::Fluid::write::getGravityProcessDict {} { } # Skin SubModelParts ids -proc ::Fluid::write::getBoundaryConditionMeshId {} { +proc ::Kratos::Fluid::write::getBoundaryConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfBCGroups [list ] set xp1 "[spdAux::getRoute [::Fluid::GetUniqueName conditions]]/condition/group" @@ -126,7 +126,7 @@ proc ::Fluid::write::getBoundaryConditionMeshId {} { } # No-skin SubModelParts ids -proc ::Fluid::write::getNoSkinConditionMeshId {} { +proc ::Kratos::Fluid::write::getNoSkinConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfNoSkinGroups [list ] @@ -158,7 +158,7 @@ proc ::Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } -proc ::Fluid::write::GetUsedElements {} { +proc ::Kratos::Fluid::write::GetUsedElements {} { set root [customlib::GetBaseRoot] # Get the fluid part @@ -173,7 +173,7 @@ proc ::Fluid::write::GetUsedElements {} { return $lista } -proc ::Fluid::write::getSolverSettingsDict { } { +proc ::Kratos::Fluid::write::getSolverSettingsDict { } { set solverSettingsDict [dict create] dict set solverSettingsDict model_part_name [GetAttribute model_part_name] set nDim [expr [string range [write::getValue nDim] 0 0]] @@ -259,7 +259,7 @@ proc ::Fluid::write::getSolverSettingsDict { } { return $solverSettingsDict } -proc ::Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { +proc ::Kratos::Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { set element [Model::getElement $element_name] if {![$element hasAttribute FormulationElementType]} {error "Your monolithic element $element_name need to define the FormulationElementType field"} set formulation_element_type [$element getAttribute FormulationElementType] diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index f10ec4f12..1dfe5d1b1 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -1,113 +1,109 @@ -namespace eval ::Fluid::xml { +namespace eval ::Kratos::Fluid::xml { # Namespace variables declaration - variable dir -} -proc ::Fluid::xml::Init { } { - # Namespace variables inicialization - variable dir - Model::InitVariables dir $::Fluid::dir - - Model::getSolutionStrategies Strategies.xml - Model::getElements Elements.xml - Model::getMaterials Materials.xml - Model::getNodalConditions NodalConditions.xml - Model::getConstitutiveLaws ConstitutiveLaws.xml - Model::getProcesses "../../Common/xml/Processes.xml" - Model::getProcesses Processes.xml - Model::getConditions Conditions.xml - Model::getSolvers "../../Common/xml/Solvers.xml" -} + proc Init { dir } { + ::Model::InitVariables dir $dir + ::Model::getSolutionStrategies Strategies.xml + ::Model::getElements Elements.xml + ::Model::getMaterials Materials.xml + ::Model::getNodalConditions NodalConditions.xml + ::Model::getConstitutiveLaws ConstitutiveLaws.xml + ::Model::getProcesses "../../Common/xml/Processes.xml" + ::Model::getProcesses Processes.xml + ::Model::getConditions Conditions.xml + ::Model::getSolvers "../../Common/xml/Solvers.xml" + } -proc ::Fluid::xml::getUniqueName {name} { - return [::Fluid::GetAttribute prefix]${name} -} + proc getUniqueName {name} { + return [GetAttribute prefix]${name} + } -proc ::Fluid::xml::CustomTree { args } { - set root [customlib::GetBaseRoot] + proc CustomTree { args } { + set root [customlib::GetBaseRoot] - set results_un [::Fluid::GetUniqueName "results"] + set results_un [GetUniqueName "results"] - # Output control in output settings - spdAux::SetValueOnTreeItem v time FLResults FileLabel - spdAux::SetValueOnTreeItem v time FLResults OutputControlType + # Output control in output settings + spdAux::SetValueOnTreeItem v time FLResults FileLabel + spdAux::SetValueOnTreeItem v time FLResults OutputControlType - # Drag in output settings - set xpath "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" - if {[$root selectNodes "$xpath/condition\[@n='Drag'\]"] eq ""} { - gid_groups_conds::addF $xpath include [list n Drag active 1 path {apps/Fluid/xml/Drag.spd}] - } - - customlib::ProcessIncludes $::Kratos::kratos_private(Path) - spdAux::parseRoutes + # Drag in output settings + set xpath "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" + if {[$root selectNodes "$xpath/condition\[@n='Drag'\]"] eq ""} { + gid_groups_conds::addF $xpath include [list n Drag active 1 path {apps/Fluid/xml/Drag.spd}] + } + + customlib::ProcessIncludes $::Kratos::kratos_private(Path) + spdAux::parseRoutes - # Nodal reactions in output settings - if {[$root selectNodes "$xpath/container\[@n='OnNodes'\]"] ne ""} { - gid_groups_conds::addF "$xpath/container\[@n='OnNodes'\]" value [list n REACTION pn "Reaction" v No values "Yes,No"] - } - - # TODO: remove when Non newtonian is implemented for 2d - if {$::Model::SpatialDimension eq "2D"} { Model::ForgetConstitutiveLaw HerschelBulkley } + # Nodal reactions in output settings + if {[$root selectNodes "$xpath/container\[@n='OnNodes'\]"] ne ""} { + gid_groups_conds::addF "$xpath/container\[@n='OnNodes'\]" value [list n REACTION pn "Reaction" v No values "Yes,No"] + } + + # TODO: remove when Non newtonian is implemented for 2d + if {$::Model::SpatialDimension eq "2D"} { Model::ForgetConstitutiveLaw HerschelBulkley } - # Hide dynamic_tau on some elements - spdAux::SetValueOnTreeItem state "\[HideIfElement {DVMS2D DVMS3D}\]" FLStratParams dynamic_tau -} + # Hide dynamic_tau on some elements + spdAux::SetValueOnTreeItem state "\[HideIfElement {DVMS2D DVMS3D}\]" FLStratParams dynamic_tau + } -# Usage -# Fluid::xml::CreateNewInlet Inlet {new false name Total} true "6*y*(1-y)" -proc ::Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { - # Fluid Inlet - set nd $::Model::SpatialDimension - set condtype line - if {$nd eq "3D"} { set condtype surface } + # Usage + # CreateNewInlet Inlet {new false name Total} true "6*y*(1-y)" + proc CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { + # Fluid Inlet + set nd $::Model::SpatialDimension + set condtype line + if {$nd eq "3D"} { set condtype surface } - set fluidConditions [spdAux::getRoute $fluid_conditions_UN] - set fluidInlet "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]" - - set interval_name [dict get $interval_data name] - if {[write::isBooleanTrue [dict get $interval_data new]]} { - spdAux::CreateInterval $interval_name [dict get $interval_data ini] [dict get $interval_data end] + set fluidConditions [spdAux::getRoute $fluid_conditions_UN] + set fluidInlet "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]" + + set interval_name [dict get $interval_data name] + if {[write::isBooleanTrue [dict get $interval_data new]]} { + spdAux::CreateInterval $interval_name [dict get $interval_data ini] [dict get $interval_data end] - } - GiD_Groups create "$base_group_name//$interval_name" - GiD_Groups edit state "$base_group_name//$interval_name" hidden - spdAux::AddIntervalGroup $base_group_name "$base_group_name//$interval_name" - set inletNode [customlib::AddConditionGroupOnXPath $fluidInlet "$base_group_name//$interval_name"] - $inletNode setAttribute ov $condtype - if {[write::isBooleanTrue $uses_formula]} { - set function $value - set props [list ByFunction Yes function_modulus $function direction $direction Interval $interval_name] - } else { - set props [list ByFunction No modulus $value direction $direction Interval $interval_name] - } - foreach {prop val} $props { - set propnode [$inletNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val + } + GiD_Groups create "$base_group_name//$interval_name" + GiD_Groups edit state "$base_group_name//$interval_name" hidden + spdAux::AddIntervalGroup $base_group_name "$base_group_name//$interval_name" + set inletNode [customlib::AddConditionGroupOnXPath $fluidInlet "$base_group_name//$interval_name"] + $inletNode setAttribute ov $condtype + if {[write::isBooleanTrue $uses_formula]} { + set function $value + set props [list ByFunction Yes function_modulus $function direction $direction Interval $interval_name] } else { - W "Warning - Couldn't find property Inlet $prop" + set props [list ByFunction No modulus $value direction $direction Interval $interval_name] + } + foreach {prop val} $props { + set propnode [$inletNode selectNodes "./value\[@n = '$prop'\]"] + if {$propnode ne "" } { + $propnode setAttribute v $val + } else { + W "Warning - Couldn't find property Inlet $prop" + } } + } - -} -proc ::Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { - - set nd $::Model::SpatialDimension - set fluidConditions [spdAux::getRoute $fluid_conditions_UN] - set fluidInlets "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]/group" - foreach inlet [[customlib::GetBaseRoot] selectNodes $fluidInlets] { - set group_name [$inlet @n] - if {[GiD_Groups exists $group_name]} {set group_name [GiD_Groups get parent $group_name]} - $inlet delete - if {$delete_groups} { - if {[GiD_Groups exists $group_name]} {GiD_Groups delete $group_name} + proc ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { + + set nd $::Model::SpatialDimension + set fluidConditions [spdAux::getRoute $fluid_conditions_UN] + set fluidInlets "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]/group" + foreach inlet [[customlib::GetBaseRoot] selectNodes $fluidInlets] { + set group_name [$inlet @n] + if {[GiD_Groups exists $group_name]} {set group_name [GiD_Groups get parent $group_name]} + $inlet delete + if {$delete_groups} { + if {[GiD_Groups exists $group_name]} {GiD_Groups delete $group_name} + } } } -} -proc ::Fluid::xml::ProcHideIfElement { domNode list_elements } { - set element [lindex [Fluid::write::GetUsedElements] 0] - if {$element in $list_elements} {return hidden} {return normal} -} + proc ProcHideIfElement { domNode list_elements } { + set element [lindex [write::GetUsedElements] 0] + if {$element in $list_elements} {return hidden} {return normal} + } +} \ No newline at end of file From 9de1e18c2cbabfd32fadd69ee589a589b3d74608 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 6 Sep 2021 13:14:43 +0200 Subject: [PATCH 357/556] Stent app json --- kratos.gid/apps/Stent/app.json | 30 ++++++++++++ .../apps/Stent/python/KratosStructural.py | 39 --------------- kratos.gid/apps/Stent/start.tcl | 48 ++++--------------- kratos.gid/apps/Stent/write/write.tcl | 29 ++++------- kratos.gid/apps/Stent/xml/XmlController.tcl | 9 ++-- .../apps/Structural/xml/XmlController.tcl | 2 +- kratos.gid/scripts/Applications.tcl | 3 ++ .../Controllers/ApplicationMarketWindow.tcl | 2 +- 8 files changed, 55 insertions(+), 107 deletions(-) create mode 100644 kratos.gid/apps/Stent/app.json delete mode 100644 kratos.gid/apps/Stent/python/KratosStructural.py diff --git a/kratos.gid/apps/Stent/app.json b/kratos.gid/apps/Stent/app.json new file mode 100644 index 000000000..ad1203ffb --- /dev/null +++ b/kratos.gid/apps/Stent/app.json @@ -0,0 +1,30 @@ +{ + "id": "Stent", + "name": "Stent", + "prefix": "ST", + "themed": false, + "kratos_name": "StructuralMechanicsApplication", + "dimensions": [ + "3D" + ], + "script_files": [ + "start.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "wizard/StentGeometry.tcl" + ], + "start_script": "::Stent::Init", + "requeriments": { + "apps": [ + "Structural" + ], + "minimum_gid_version": "15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": true + }, + "main_launch_file": "../Structural/python/KratosStructural.py" +} \ No newline at end of file diff --git a/kratos.gid/apps/Stent/python/KratosStructural.py b/kratos.gid/apps/Stent/python/KratosStructural.py deleted file mode 100644 index 53e15cab2..000000000 --- a/kratos.gid/apps/Stent/python/KratosStructural.py +++ /dev/null @@ -1,39 +0,0 @@ -import sys -import time - -import KratosMultiphysics -from KratosMultiphysics.StructuralMechanicsApplication.structural_mechanics_analysis import StructuralMechanicsAnalysis - -""" -For user-scripting it is intended that a new class is derived -from StructuralMechanicsAnalysis to do modifications -""" -class StructuralMechanicsAnalysisWithFlush(StructuralMechanicsAnalysis): - - def __init__(self, model, project_parameters, flush_frequency=10.0): - super().__init__(model, project_parameters) - self.flush_frequency = flush_frequency - self.last_flush = time.time() - sys.stdout.flush() - - def Initialize(self): - super().Initialize() - sys.stdout.flush() - - def FinalizeSolutionStep(self): - super().FinalizeSolutionStep() - - if self.parallel_type == "OpenMP": - now = time.time() - if now - self.last_flush > self.flush_frequency: - sys.stdout.flush() - self.last_flush = now - -if __name__ == "__main__": - - with open("ProjectParameters.json", 'r') as parameter_file: - parameters = KratosMultiphysics.Parameters(parameter_file.read()) - - global_model = KratosMultiphysics.Model() - simulation = StructuralMechanicsAnalysisWithFlush(global_model, parameters) - simulation.Run() diff --git a/kratos.gid/apps/Stent/start.tcl b/kratos.gid/apps/Stent/start.tcl index 6456a8da3..768c3a4d3 100644 --- a/kratos.gid/apps/Stent/start.tcl +++ b/kratos.gid/apps/Stent/start.tcl @@ -4,52 +4,25 @@ namespace eval ::Stent { variable app_id } -proc ::Stent::Init { } { +proc ::Stent::Init { app } { # Variable initialization variable dir - variable attributes - variable kratos_name - variable app_id - - if {[GiDVersionCmp 14.1.3d] < 0} { - W "Minimum GiD version recommended 14.1.3d" - W "Download it at https://www.gidhome.com/download/developer-versions/" - } + variable _app - set app_id Stent set dir [apps::getMyDir "Stent"] - - # We'll work on 3D space - spdAux::SetSpatialDimmension "3D" + set _app $app + # Load Fluid App apps::LoadAppById "Structural" spdAux::processIncludes - set attributes [dict create] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - # Intervals - dict set attributes UseIntervals 1 - - set kratos_name StructuralMechanicsApplication - - # Enable the Wizard Module - Kratos::LoadWizardFiles - LoadMyFiles -} - -proc ::Stent::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - smart_wizard::LoadWizardDoc [file join $dir wizard StentGeometry_default.wiz] - uplevel #0 [list source [file join $dir wizard StentGeometry.tcl]] smart_wizard::ImportWizardData + + Stent::xml::Init + Stent::write::Init + } proc ::Stent::StartWizardWindow { } { @@ -70,13 +43,8 @@ proc ::Stent::CustomToolbarItems { } { variable dir Kratos::ToolbarAddItem "Generator" "example.png" [list -np- ::Stent::StartWizardWindow] [= "Geometry generator"] - - } proc ::Stent::BeforeMeshGeneration { size } { ::Structural::BeforeMeshGeneration $size } - - -::Stent::Init diff --git a/kratos.gid/apps/Stent/write/write.tcl b/kratos.gid/apps/Stent/write/write.tcl index f274715f2..46a16650d 100644 --- a/kratos.gid/apps/Stent/write/write.tcl +++ b/kratos.gid/apps/Stent/write/write.tcl @@ -1,26 +1,15 @@ -namespace eval Stent::write { -} +namespace eval Stent::write { } -proc Stent::write::Init { } { - #Structural::write::Init -} +proc Stent::write::Init { } { } # MDPA Blocks -proc Stent::write::writeModelPartEvent { } { - Structural::write::writeModelPartEvent -} +proc Stent::write::writeModelPartEvent { } {Structural::write::writeModelPartEvent} -# Custom files -proc Stent::write::WriteMaterialsFile { } { - Structural::write::WriteMaterialsFile -} +# Materials +proc Stent::write::WriteMaterialsFile { } {Structural::write::WriteMaterialsFile} -proc Stent::write::writeCustomFilesEvent { } { - Structural::write::writeCustomFilesEvent -} -proc Stent::write::writeParametersEvent { } { - Structural::write::writeParametersEvent - -} +# Custom files +proc Stent::write::writeCustomFilesEvent { } {Structural::write::writeCustomFilesEvent} -Stent::write::Init +# Project parameters +proc Stent::write::writeParametersEvent { } {Structural::write::writeParametersEvent} diff --git a/kratos.gid/apps/Stent/xml/XmlController.tcl b/kratos.gid/apps/Stent/xml/XmlController.tcl index 59e354e21..e1f9a2630 100644 --- a/kratos.gid/apps/Stent/xml/XmlController.tcl +++ b/kratos.gid/apps/Stent/xml/XmlController.tcl @@ -1,10 +1,8 @@ namespace eval Stent::xml { - variable dir } proc Stent::xml::Init { } { - variable dir - Model::InitVariables dir $Stent::dir + Model::InitVariables dir $::Stent::dir # Import our elements Model::ForgetElements @@ -14,7 +12,7 @@ proc Stent::xml::Init { } { } proc Stent::xml::getUniqueName {name} { - return ST$name + return [::Stent::GetAttribute prefix]$name } @@ -23,7 +21,7 @@ proc Stent::xml::CustomTree { args } { Structural::xml::CustomTree {*}$args } - +namespace eval Structural::xml {} proc Structural::xml::ProcCheckGeometryStructural {domNode args} { set ret "line" return $ret @@ -33,4 +31,3 @@ proc Stent::xml::UpdateParts {domNode args} { Structural::xml::UpdateParts $domNode {*}$args } -Stent::xml::Init diff --git a/kratos.gid/apps/Structural/xml/XmlController.tcl b/kratos.gid/apps/Structural/xml/XmlController.tcl index 93e362382..42d3d6f95 100644 --- a/kratos.gid/apps/Structural/xml/XmlController.tcl +++ b/kratos.gid/apps/Structural/xml/XmlController.tcl @@ -20,7 +20,7 @@ proc ::Structural::xml::Init { } { } proc ::Structural::xml::getUniqueName {name} { - return ST$name + return [::Structural::GetAttribute prefix]$name } proc ::Structural::xml::CustomTree { args } { diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 38e7d2844..e651e634c 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -312,7 +312,10 @@ proc apps::ActivateApp_do {app} { } } apps::ApplyAppPreferences $app + + if {[dict exists $props permissions wizard]} {if {[write::isBooleanTrue [dict get $props permissions wizard]]} { Kratos::LoadWizardFiles }} if {[dict exists $props start_script]} {eval [dict get $props start_script] $app} + if {[dict exists $props dimensions]} { set ::Model::ValidSpatialDimensions [dict get $props dimensions] } } else { W "MISSING app.json file for app $app_name" set fileName [file join $dir start.tcl] diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index b7f5d785b..f1d17a2c5 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -208,7 +208,6 @@ proc spdAux::SwitchDimAndCreateWindow { ndim } { ::Kratos::UpdateMenus } - proc spdAux::reactiveApp { } { #W "Reactive" variable initwind @@ -235,6 +234,7 @@ proc spdAux::deactiveApp { appid } { } } } + proc spdAux::activeApp { appid } { #W "Active $appid" catch { From 3b3607c7874094201f2ba6695a129a7318dd2d60 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 6 Sep 2021 13:19:14 +0200 Subject: [PATCH 358/556] Revert "Work in namespaces" This reverts commit 1c39d99dc031ac19f1f6f6c45cdcc63bd18966e9. --- kratos.gid/apps/Fluid/app.json | 2 +- kratos.gid/apps/Fluid/start.tcl | 33 ++-- kratos.gid/apps/Fluid/write/write.tcl | 86 ++++----- .../Fluid/write/writeProjectParameters.tcl | 20 +- kratos.gid/apps/Fluid/xml/XmlController.tcl | 182 +++++++++--------- 5 files changed, 162 insertions(+), 161 deletions(-) diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index 478746dc8..cf90f38d9 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -17,7 +17,7 @@ "write/write.tcl", "write/writeProjectParameters.tcl" ], - "start_script":"::Kratos::Fluid::Init", + "start_script":"::Fluid::Init", "requeriments":{ "apps":[], "minimum_gid_version":"15.1.3d" diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index 5af42bcf1..e4207d5af 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -1,23 +1,22 @@ -namespace eval ::Kratos::Fluid { +namespace eval ::Fluid { # Variable declaration variable _app variable dir +} +proc ::Fluid::Init { app } { + # Variable initialization + variable _app + variable dir - proc Init { app } { - # Variable initialization - variable _app - variable dir - - set _app $app - set dir [apps::getMyDir "Fluid"] - - # XML init event - xml::Init $dir - write::Init - } + set _app $app + set dir [apps::getMyDir "Fluid"] + + # XML init event + ::Fluid::xml::Init + ::Fluid::write::Init +} - proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} - proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} - proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} -} \ No newline at end of file +proc ::Fluid::GetAttribute {name} {return [$::Fluid::_app getProperty $name]} +proc ::Fluid::GetUniqueName {name} {return [$::Fluid::_app getUniqueName $name]} +proc ::Fluid::GetWriteProperty {name} {return [$::Fluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index b22d5cd23..cc5c43fe7 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,5 +1,4 @@ -namespace eval ::Kratos::Fluid::write { - namespace path ::Kratos::Fluid +namespace eval ::Fluid::write { # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes @@ -7,32 +6,32 @@ namespace eval ::Kratos::Fluid::write { # after regular conditions are written, we need this number in order to print the custom submodelpart conditions # only if are applied over things that are not in the skin variable last_condition_iterator +} - -proc Init { } { +proc ::Fluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un [GetUniqueName parts] - SetAttribute nodal_conditions_un [GetUniqueName nodal_conditions] - SetAttribute conditions_un [GetUniqueName conditions] - SetAttribute materials_un [GetUniqueName materials] - SetAttribute results_un [GetUniqueName results] - SetAttribute drag_un [GetUniqueName drag] - SetAttribute time_parameters_un [GetUniqueName time_parameters] + SetAttribute parts_un [::Fluid::GetUniqueName parts] + SetAttribute nodal_conditions_un [::Fluid:::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::Fluid::GetUniqueName conditions] + SetAttribute materials_un [::Fluid::GetUniqueName materials] + SetAttribute results_un [::Fluid::GetUniqueName results] + SetAttribute drag_un [::Fluid::GetUniqueName drag] + SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] - SetAttribute writeCoordinatesByGroups [GetWriteProperty coordinates] + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file [GetAttribute main_launch_file] - SetAttribute materials_file [GetWriteProperty materials_file] - SetAttribute properties_location [GetWriteProperty properties_location] - SetAttribute model_part_name [GetWriteProperty model_part_name] - SetAttribute output_model_part_name [GetWriteProperty output_model_part_name] + SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] + SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] + SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] + SetAttribute output_model_part_name [::Fluid::GetWriteProperty output_model_part_name] variable last_condition_iterator set last_condition_iterator 0 } # MDPA write event -proc writeModelPartEvent { } { +proc ::Fluid::write::writeModelPartEvent { } { # Validation set err [Validate] if {$err ne ""} {error $err} @@ -57,18 +56,18 @@ proc writeModelPartEvent { } { # Custom SubmodelParts variable last_condition_iterator - write::writeBasicSubmodelPartsByUniqueId $FluidConditionMap $last_condition_iterator + write::writeBasicSubmodelPartsByUniqueId $Fluid::write::FluidConditionMap $last_condition_iterator # SubmodelParts writeMeshes # Clean - unset FluidConditionMap + unset ::Fluid::write::FluidConditionMap } -proc writeCustomFilesEvent { } { +proc ::Fluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file - WriteMaterialsFile + ::Fluid::write::WriteMaterialsFile # Main python script set orig_name [GetAttribute main_script_file] @@ -77,13 +76,13 @@ proc writeCustomFilesEvent { } { } # Custom files -proc WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { +proc ::Fluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } -proc Validate {} { +proc ::Fluid::write::Validate {} { set err "" set root [customlib::GetBaseRoot] @@ -101,23 +100,23 @@ proc Validate {} { } # MDPA Blocks -proc writeProperties { } { +proc ::Fluid::write::writeProperties { } { # Begin Properties write::WriteString "Begin Properties 0" write::WriteString "End Properties" write::WriteString "" } -proc writeConditions { } { +proc ::Fluid::write::writeConditions { } { writeBoundaryConditions writeDrags } -proc getFluidModelPartFilename { } { +proc ::Fluid::write::getFluidModelPartFilename { } { return [Kratos::GetModelName] } -proc writeBoundaryConditions { } { +proc ::Fluid::write::writeBoundaryConditions { } { variable FluidConditionMap variable last_condition_iterator @@ -149,26 +148,26 @@ proc writeBoundaryConditions { } { set kname LineCondition2D2N set nnodes 2 } - set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $FluidConditionMap] + set last_condition_iterator [write::writeGroupConditionByUniqueId $skin_group_name $kname $nnodes 0 $::Fluid::write::FluidConditionMap] # Clean GiD_Groups delete $skin_group_name } -proc writeDrags { } { +proc ::Fluid::write::writeDrags { } { lappend ::Model::NodalConditions [::Model::NodalCondition new Drag] write::writeNodalConditions [GetAttribute drag_un] Model::ForgetNodalCondition Drag } -proc writeMeshes { } { +proc ::Fluid::write::writeMeshes { } { write::writePartSubModelPart write::writeNodalConditions [GetAttribute nodal_conditions_un] writeConditionsMesh #writeSkinMesh } -proc writeConditionsMesh { } { +proc ::Fluid::write::writeConditionsMesh { } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" @@ -189,7 +188,7 @@ proc writeConditionsMesh { } { if {![$cond hasTopologyFeatures]} { ::write::writeGroupSubModelPart $condid $groupid "Nodes" } else { - ::write::writeGroupSubModelPartByUniqueId $condid $groupid $FluidConditionMap "Conditions" + ::write::writeGroupSubModelPartByUniqueId $condid $groupid $Fluid::write::FluidConditionMap "Conditions" } } } @@ -201,11 +200,11 @@ proc writeConditionsMesh { } { set groupid [get_domnode_attribute $group n] dict set groups_dict $groupid what "Conditions" } - write::writeConditionGroupedSubmodelPartsByUniqueId $condid $groups_dict $FluidConditionMap + write::writeConditionGroupedSubmodelPartsByUniqueId $condid $groups_dict $Fluid::write::FluidConditionMap } } -proc InitConditionsMap { {map "" } } { +proc ::Fluid::write::InitConditionsMap { {map "" } } { variable FluidConditionMap if {$map eq ""} { @@ -214,44 +213,43 @@ proc InitConditionsMap { {map "" } } { set FluidConditionMap $map } } -proc FreeConditionsMap { } { +proc ::Fluid::write::FreeConditionsMap { } { variable FluidConditionMap unset FluidConditionMap } -proc GetAttribute {att} { +proc ::Fluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] } -proc GetAttributes {} { +proc ::Fluid::write::GetAttributes {} { variable writeAttributes return $writeAttributes } -proc SetAttribute {att val} { +proc ::Fluid::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } -proc AddAttribute {att val} { +proc ::Fluid::write::AddAttribute {att val} { variable writeAttributes dict lappend writeAttributes $att $val } -proc AddAttributes {configuration} { +proc ::Fluid::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } -proc AddValidApps {appid} { +proc ::Fluid::write::AddValidApps {appid} { AddAttribute validApps $appid } -proc SetCoordinatesByGroups {value} { +proc ::Fluid::write::SetCoordinatesByGroups {value} { SetAttribute writeCoordinatesByGroups $value } -} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index 4f6bd7009..bf15c8c2d 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -1,5 +1,5 @@ # Project Parameters -proc ::Kratos::Fluid::write::getParametersDict { } { +proc ::Fluid::write::getParametersDict { } { set projectParametersDict [dict create] # Problem data @@ -25,13 +25,13 @@ proc ::Kratos::Fluid::write::getParametersDict { } { return $projectParametersDict } -proc ::Kratos::Fluid::write::writeParametersEvent { } { +proc ::Fluid::write::writeParametersEvent { } { set projectParametersDict [getParametersDict] write::SetParallelismConfiguration write::WriteJSON $projectParametersDict } -proc ::Kratos::Fluid::write::getAuxiliarProcessList {} { +proc ::Fluid::write::getAuxiliarProcessList {} { set process_list [list ] foreach process [getDragProcessList] {lappend process_list $process} @@ -39,7 +39,7 @@ proc ::Kratos::Fluid::write::getAuxiliarProcessList {} { return $process_list } -proc ::Kratos::Fluid::write::getDragProcessList {} { +proc ::Fluid::write::getDragProcessList {} { set root [customlib::GetBaseRoot] set process_list [list ] @@ -73,7 +73,7 @@ proc ::Kratos::Fluid::write::getDragProcessList {} { } # Gravity SubModelParts and Process collection -proc ::Kratos::Fluid::write::getGravityProcessDict {} { +proc ::Fluid::write::getGravityProcessDict {} { set root [customlib::GetBaseRoot] set value [write::getValue FLGravity GravityValue] @@ -98,7 +98,7 @@ proc ::Kratos::Fluid::write::getGravityProcessDict {} { } # Skin SubModelParts ids -proc ::Kratos::Fluid::write::getBoundaryConditionMeshId {} { +proc ::Fluid::write::getBoundaryConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfBCGroups [list ] set xp1 "[spdAux::getRoute [::Fluid::GetUniqueName conditions]]/condition/group" @@ -126,7 +126,7 @@ proc ::Kratos::Fluid::write::getBoundaryConditionMeshId {} { } # No-skin SubModelParts ids -proc ::Kratos::Fluid::write::getNoSkinConditionMeshId {} { +proc ::Fluid::write::getNoSkinConditionMeshId {} { set root [customlib::GetBaseRoot] set listOfNoSkinGroups [list ] @@ -158,7 +158,7 @@ proc ::Kratos::Fluid::write::getNoSkinConditionMeshId {} { return $listOfNoSkinGroups } -proc ::Kratos::Fluid::write::GetUsedElements {} { +proc ::Fluid::write::GetUsedElements {} { set root [customlib::GetBaseRoot] # Get the fluid part @@ -173,7 +173,7 @@ proc ::Kratos::Fluid::write::GetUsedElements {} { return $lista } -proc ::Kratos::Fluid::write::getSolverSettingsDict { } { +proc ::Fluid::write::getSolverSettingsDict { } { set solverSettingsDict [dict create] dict set solverSettingsDict model_part_name [GetAttribute model_part_name] set nDim [expr [string range [write::getValue nDim] 0 0]] @@ -259,7 +259,7 @@ proc ::Kratos::Fluid::write::getSolverSettingsDict { } { return $solverSettingsDict } -proc ::Kratos::Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { +proc ::Fluid::write::GetMonolithicElementTypeFromElementName {element_name} { set element [Model::getElement $element_name] if {![$element hasAttribute FormulationElementType]} {error "Your monolithic element $element_name need to define the FormulationElementType field"} set formulation_element_type [$element getAttribute FormulationElementType] diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index 1dfe5d1b1..f10ec4f12 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -1,109 +1,113 @@ -namespace eval ::Kratos::Fluid::xml { +namespace eval ::Fluid::xml { # Namespace variables declaration + variable dir +} - proc Init { dir } { - ::Model::InitVariables dir $dir - ::Model::getSolutionStrategies Strategies.xml - ::Model::getElements Elements.xml - ::Model::getMaterials Materials.xml - ::Model::getNodalConditions NodalConditions.xml - ::Model::getConstitutiveLaws ConstitutiveLaws.xml - ::Model::getProcesses "../../Common/xml/Processes.xml" - ::Model::getProcesses Processes.xml - ::Model::getConditions Conditions.xml - ::Model::getSolvers "../../Common/xml/Solvers.xml" - } - - proc getUniqueName {name} { - return [GetAttribute prefix]${name} - } +proc ::Fluid::xml::Init { } { + # Namespace variables inicialization + variable dir + Model::InitVariables dir $::Fluid::dir + + Model::getSolutionStrategies Strategies.xml + Model::getElements Elements.xml + Model::getMaterials Materials.xml + Model::getNodalConditions NodalConditions.xml + Model::getConstitutiveLaws ConstitutiveLaws.xml + Model::getProcesses "../../Common/xml/Processes.xml" + Model::getProcesses Processes.xml + Model::getConditions Conditions.xml + Model::getSolvers "../../Common/xml/Solvers.xml" +} - proc CustomTree { args } { - set root [customlib::GetBaseRoot] +proc ::Fluid::xml::getUniqueName {name} { + return [::Fluid::GetAttribute prefix]${name} +} - set results_un [GetUniqueName "results"] +proc ::Fluid::xml::CustomTree { args } { + set root [customlib::GetBaseRoot] - # Output control in output settings - spdAux::SetValueOnTreeItem v time FLResults FileLabel - spdAux::SetValueOnTreeItem v time FLResults OutputControlType + set results_un [::Fluid::GetUniqueName "results"] - # Drag in output settings - set xpath "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" - if {[$root selectNodes "$xpath/condition\[@n='Drag'\]"] eq ""} { - gid_groups_conds::addF $xpath include [list n Drag active 1 path {apps/Fluid/xml/Drag.spd}] - } - - customlib::ProcessIncludes $::Kratos::kratos_private(Path) - spdAux::parseRoutes + # Output control in output settings + spdAux::SetValueOnTreeItem v time FLResults FileLabel + spdAux::SetValueOnTreeItem v time FLResults OutputControlType - # Nodal reactions in output settings - if {[$root selectNodes "$xpath/container\[@n='OnNodes'\]"] ne ""} { - gid_groups_conds::addF "$xpath/container\[@n='OnNodes'\]" value [list n REACTION pn "Reaction" v No values "Yes,No"] - } - - # TODO: remove when Non newtonian is implemented for 2d - if {$::Model::SpatialDimension eq "2D"} { Model::ForgetConstitutiveLaw HerschelBulkley } + # Drag in output settings + set xpath "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" + if {[$root selectNodes "$xpath/condition\[@n='Drag'\]"] eq ""} { + gid_groups_conds::addF $xpath include [list n Drag active 1 path {apps/Fluid/xml/Drag.spd}] + } + + customlib::ProcessIncludes $::Kratos::kratos_private(Path) + spdAux::parseRoutes - # Hide dynamic_tau on some elements - spdAux::SetValueOnTreeItem state "\[HideIfElement {DVMS2D DVMS3D}\]" FLStratParams dynamic_tau + # Nodal reactions in output settings + if {[$root selectNodes "$xpath/container\[@n='OnNodes'\]"] ne ""} { + gid_groups_conds::addF "$xpath/container\[@n='OnNodes'\]" value [list n REACTION pn "Reaction" v No values "Yes,No"] } + + # TODO: remove when Non newtonian is implemented for 2d + if {$::Model::SpatialDimension eq "2D"} { Model::ForgetConstitutiveLaw HerschelBulkley } - # Usage - # CreateNewInlet Inlet {new false name Total} true "6*y*(1-y)" - proc CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { - # Fluid Inlet - set nd $::Model::SpatialDimension - set condtype line - if {$nd eq "3D"} { set condtype surface } + # Hide dynamic_tau on some elements + spdAux::SetValueOnTreeItem state "\[HideIfElement {DVMS2D DVMS3D}\]" FLStratParams dynamic_tau +} - set fluidConditions [spdAux::getRoute $fluid_conditions_UN] - set fluidInlet "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]" - - set interval_name [dict get $interval_data name] - if {[write::isBooleanTrue [dict get $interval_data new]]} { - spdAux::CreateInterval $interval_name [dict get $interval_data ini] [dict get $interval_data end] +# Usage +# Fluid::xml::CreateNewInlet Inlet {new false name Total} true "6*y*(1-y)" +proc ::Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true name inlet1 ini 0 end "End"}} {uses_formula false} {value 10.0} {direction automatic_inwards_normal} {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { + # Fluid Inlet + set nd $::Model::SpatialDimension + set condtype line + if {$nd eq "3D"} { set condtype surface } - } - GiD_Groups create "$base_group_name//$interval_name" - GiD_Groups edit state "$base_group_name//$interval_name" hidden - spdAux::AddIntervalGroup $base_group_name "$base_group_name//$interval_name" - set inletNode [customlib::AddConditionGroupOnXPath $fluidInlet "$base_group_name//$interval_name"] - $inletNode setAttribute ov $condtype - if {[write::isBooleanTrue $uses_formula]} { - set function $value - set props [list ByFunction Yes function_modulus $function direction $direction Interval $interval_name] + set fluidConditions [spdAux::getRoute $fluid_conditions_UN] + set fluidInlet "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]" + + set interval_name [dict get $interval_data name] + if {[write::isBooleanTrue [dict get $interval_data new]]} { + spdAux::CreateInterval $interval_name [dict get $interval_data ini] [dict get $interval_data end] + + } + GiD_Groups create "$base_group_name//$interval_name" + GiD_Groups edit state "$base_group_name//$interval_name" hidden + spdAux::AddIntervalGroup $base_group_name "$base_group_name//$interval_name" + set inletNode [customlib::AddConditionGroupOnXPath $fluidInlet "$base_group_name//$interval_name"] + $inletNode setAttribute ov $condtype + if {[write::isBooleanTrue $uses_formula]} { + set function $value + set props [list ByFunction Yes function_modulus $function direction $direction Interval $interval_name] + } else { + set props [list ByFunction No modulus $value direction $direction Interval $interval_name] + } + foreach {prop val} $props { + set propnode [$inletNode selectNodes "./value\[@n = '$prop'\]"] + if {$propnode ne "" } { + $propnode setAttribute v $val } else { - set props [list ByFunction No modulus $value direction $direction Interval $interval_name] - } - foreach {prop val} $props { - set propnode [$inletNode selectNodes "./value\[@n = '$prop'\]"] - if {$propnode ne "" } { - $propnode setAttribute v $val - } else { - W "Warning - Couldn't find property Inlet $prop" - } + W "Warning - Couldn't find property Inlet $prop" } - } + +} - proc ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { - - set nd $::Model::SpatialDimension - set fluidConditions [spdAux::getRoute $fluid_conditions_UN] - set fluidInlets "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]/group" - foreach inlet [[customlib::GetBaseRoot] selectNodes $fluidInlets] { - set group_name [$inlet @n] - if {[GiD_Groups exists $group_name]} {set group_name [GiD_Groups get parent $group_name]} - $inlet delete - if {$delete_groups} { - if {[GiD_Groups exists $group_name]} {GiD_Groups delete $group_name} - } +proc ::Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { + + set nd $::Model::SpatialDimension + set fluidConditions [spdAux::getRoute $fluid_conditions_UN] + set fluidInlets "$fluidConditions/condition\[@n='$inlet_condition_name_base$nd'\]/group" + foreach inlet [[customlib::GetBaseRoot] selectNodes $fluidInlets] { + set group_name [$inlet @n] + if {[GiD_Groups exists $group_name]} {set group_name [GiD_Groups get parent $group_name]} + $inlet delete + if {$delete_groups} { + if {[GiD_Groups exists $group_name]} {GiD_Groups delete $group_name} } } +} - proc ProcHideIfElement { domNode list_elements } { - set element [lindex [write::GetUsedElements] 0] - if {$element in $list_elements} {return hidden} {return normal} - } -} \ No newline at end of file +proc ::Fluid::xml::ProcHideIfElement { domNode list_elements } { + set element [lindex [Fluid::write::GetUsedElements] 0] + if {$element in $list_elements} {return hidden} {return normal} +} From bf668af6ead14c7573b25b67b659bcba11c7822f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 6 Sep 2021 16:04:46 +0200 Subject: [PATCH 359/556] Stenosis wizard --- kratos.gid/apps/StenosisWizard/app.json | 28 +++++++++++ kratos.gid/apps/StenosisWizard/start.tcl | 49 ++++--------------- .../apps/StenosisWizard/write/write.tcl | 8 +-- .../apps/StenosisWizard/xml/XmlController.tcl | 8 +-- kratos.gid/scripts/Applications.tcl | 6 +-- 5 files changed, 44 insertions(+), 55 deletions(-) create mode 100644 kratos.gid/apps/StenosisWizard/app.json diff --git a/kratos.gid/apps/StenosisWizard/app.json b/kratos.gid/apps/StenosisWizard/app.json new file mode 100644 index 000000000..afee51cce --- /dev/null +++ b/kratos.gid/apps/StenosisWizard/app.json @@ -0,0 +1,28 @@ +{ + "id": "StenosisWizard", + "name": "Stenosis", + "prefix": "FL", + "themed": false, + "kratos_name": "FluidDynamicsApplication", + "dimensions": [ + "3D" + ], + "script_files": [ + "start.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "wizard/wizard_steps.tcl" + ], + "start_script":"::StenosisWizard::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": true, + "intervals": true, + "wizard": true + }, + "main_launch_file": "../Fluid/python/KratosFluid.py" +} diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index 8ba3a8fce..cc7a98c5c 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -1,77 +1,46 @@ namespace eval ::StenosisWizard { # Variable declaration variable dir - variable kratos_name - variable attributes - variable must_open_wizard_window + variable _app } -proc ::StenosisWizard::Init { } { +proc ::StenosisWizard::Init { app } { # Variable initialization variable dir - variable kratos_name - variable attributes - variable must_open_wizard_window + variable _app $app set must_open_wizard_window 1 # Init Working directory set dir [apps::getMyDir "StenosisWizard"] - # We'll work on 3D space - spdAux::SetSpatialDimmension "3D" + # Load Fluid App apps::LoadAppById "Fluid" spdAux::processIncludes - set kratos_name $::Fluid::kratos_name - # Don't open the tree - set ::spdAux::TreeVisibility 0 - - dict set attributes UseIntervals 1 - - # Enable the Wizard Module - Kratos::LoadWizardFiles - LoadMyFiles -} - -proc ::StenosisWizard::LoadMyFiles { } { - variable dir - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] smart_wizard::LoadWizardDoc [file join $dir wizard Wizard_default.wiz] - uplevel #0 [list source [file join $dir wizard Wizard_Steps.tcl]] smart_wizard::ImportWizardData + + StenosisWizard::xml::Init + StenosisWizard::write::Init # Init the Wizard Window after 600 [::StenosisWizard::StartWizardWindow] } - proc ::StenosisWizard::StartWizardWindow { } { variable dir gid_groups_conds::close_all_windows smart_wizard::Init - uplevel #0 [list source [file join $dir wizard Wizard_Steps.tcl]] smart_wizard::SetWizardNamespace "::StenosisWizard::Wizard" smart_wizard::SetWizardWindowName ".gid.activewizard" smart_wizard::SetWizardImageDirectory [file join $dir images] smart_wizard::LoadWizardDoc [file join $dir wizard Wizard_default.wiz] smart_wizard::ImportWizardData - variable must_open_wizard_window - - if {$must_open_wizard_window} {smart_wizard::CreateWindow } -} -proc ::StenosisWizard::CustomToolbarItems { } { - return "-1" -} -proc ::StenosisWizard::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + smart_wizard::CreateWindow } -::StenosisWizard::Init +proc ::StenosisWizard::GetAttribute {name} {return [$::StenosisWizard::_app getProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/StenosisWizard/write/write.tcl b/kratos.gid/apps/StenosisWizard/write/write.tcl index 52b18f534..9548197fb 100644 --- a/kratos.gid/apps/StenosisWizard/write/write.tcl +++ b/kratos.gid/apps/StenosisWizard/write/write.tcl @@ -8,13 +8,11 @@ proc StenosisWizard::write::Init { } { proc StenosisWizard::write::writeCustomFilesEvent { } { - Fluid::write::WriteMaterialsFile - write::CopyFileIntoModel "../Fluid/python/KratosFluid.py" - write::RenameFileInModel "KratosFluid.py" "MainKratos.py" + ::Fluid::write::SetAttribute main_script_file [StenosisWizard::GetAttribute main_launch_file] + ::Fluid::write::writeCustomFilesEvent } # MDPA Blocks - proc StenosisWizard::write::writeModelPartEvent { } { Fluid::write::AddValidApps StenosisWizard write::writeAppMDPA Fluid @@ -25,5 +23,3 @@ proc StenosisWizard::write::writeParametersEvent { } { set project_parameters_dict [::Fluid::write::getParametersDict] write::WriteJSON $project_parameters_dict } - -StenosisWizard::write::Init diff --git a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl index 581014677..687fb86bd 100644 --- a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl +++ b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl @@ -1,10 +1,8 @@ namespace eval StenosisWizard::xml { - variable dir } proc StenosisWizard::xml::Init { } { - variable dir - Model::InitVariables dir $StenosisWizard::dir + Model::InitVariables dir $::StenosisWizard::dir spdAux::processIncludes } @@ -16,7 +14,7 @@ proc StenosisWizard::xml::CustomTree {args} { } proc StenosisWizard::xml::getUniqueName {name} { - return StenWiz$name + return [::StenosisWizard::GetAttribute prefix]$name } proc ::StenosisWizard::xml::MultiAppEvent {args} { @@ -25,5 +23,3 @@ proc ::StenosisWizard::xml::MultiAppEvent {args} { spdAux::ConvertAllUniqueNames FL StenWiz } } - -StenosisWizard::xml::Init diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index e651e634c..c4a94f561 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -311,11 +311,10 @@ proc apps::ActivateApp_do {app} { apps::loadAppFile $fileName } } - apps::ApplyAppPreferences $app if {[dict exists $props permissions wizard]} {if {[write::isBooleanTrue [dict get $props permissions wizard]]} { Kratos::LoadWizardFiles }} if {[dict exists $props start_script]} {eval [dict get $props start_script] $app} - if {[dict exists $props dimensions]} { set ::Model::ValidSpatialDimensions [dict get $props dimensions] } + apps::ApplyAppPreferences $app } else { W "MISSING app.json file for app $app_name" set fileName [file join $dir start.tcl] @@ -330,7 +329,8 @@ proc apps::ActivateApp_do {app} { } proc apps::ApplyAppPreferences {app} { - if {[write::isBooleanTrue [$app getPermission open_tree]]} {set spdAux::TreeVisibility 1} + if {[write::isBooleanTrue [$app getPermission open_tree]]} {set spdAux::TreeVisibility 1} {set spdAux::TreeVisibility 0} + if {[$app getProperty dimensions] ne ""} { set ::Model::ValidSpatialDimensions [$app getProperty dimensions] } } proc apps::loadAppFile {fileName} {uplevel #0 [list source $fileName]} From 213a342102b6fc99208de418cd6b9427e7d6d1fa Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 6 Sep 2021 16:56:19 +0200 Subject: [PATCH 360/556] Potential flow --- kratos.gid/apps/PotentialFluid/app.json | 49 ++++++ .../PotentialFluid/examples/NACA0012_2D.tcl | 129 ++++++++++++++++ .../{NACA0012.tcl => NACA0012_3D.tcl} | 145 ++---------------- .../apps/PotentialFluid/examples/examples.tcl | 18 ++- .../apps/PotentialFluid/examples/examples.xml | 4 +- kratos.gid/apps/PotentialFluid/start.tcl | 50 ++---- .../apps/PotentialFluid/write/write.tcl | 26 +--- .../apps/PotentialFluid/xml/XmlController.tcl | 9 +- 8 files changed, 220 insertions(+), 210 deletions(-) create mode 100644 kratos.gid/apps/PotentialFluid/app.json create mode 100644 kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl rename kratos.gid/apps/PotentialFluid/examples/{NACA0012.tcl => NACA0012_3D.tcl} (50%) diff --git a/kratos.gid/apps/PotentialFluid/app.json b/kratos.gid/apps/PotentialFluid/app.json new file mode 100644 index 000000000..174eac3dc --- /dev/null +++ b/kratos.gid/apps/PotentialFluid/app.json @@ -0,0 +1,49 @@ +{ + "id": "PotentialFluid", + "name": "PotentialFluid", + "prefix": "PTFL", + "themed": false, + "kratos_name": "CompressiblePotentialFlowApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/NACA0012_2D.tcl", + "examples/NACA0012_3D.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::PotentialFluid::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": false, + "wizard": false + }, + "unique_names": { + "parts": "FLParts", + "nodal_conditions": "FLNodalConditions", + "conditions": "FLBC", + "materials": "FLMaterials", + "results": "FLResults", + "drag": "FLDrags", + "time_parameters": "FLTimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "FluidMaterials.json", + "properties_location": "json", + "model_part_name": "FluidModelPart", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "python/KratosPotentialFluid.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl b/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl new file mode 100644 index 000000000..0fef3bbb1 --- /dev/null +++ b/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl @@ -0,0 +1,129 @@ +namespace eval ::PotentialFluid::examples::NACA0012_2D { +namespace path ::PotentialFluid::examples +} + +proc ::PotentialFluid::examples::NACA0012_2D::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame + +} + +proc ::PotentialFluid::examples::NACA0012_2D::DrawGeometry {args} { + Kratos::ResetModel + GiD_Layers create Fluid + GiD_Layers edit to_use Fluid + + # Geometry creation + ## Airfoil + GiD_Process Mescape Geometry Create NurbsLine 1.000000 0.000000 0 0.998459 0.000224 0 0.993844 0.000891 0 0.986185 0.001990 0 0.975528 0.003501 0 0.961940 0.005399 0 0.945503 0.007651 0 0.926320 0.010221 0 0.904508 0.013071 0 0.880203 0.016158 0 0.853553 0.019438 0 0.824724 0.022869 0 0.793893 0.026405 0 0.761249 0.030000 0 0.726995 0.033610 0 0.691342 0.037188 0 0.654508 0.040686 0 0.616723 0.044055 0 0.578217 0.047242 0 0.539230 0.050196 0 0.500000 0.052862 0 0.460770 0.055184 0 0.421783 0.057108 0 0.383277 0.058582 0 0.345492 0.059557 0 0.308658 0.059988 0 0.273005 0.059841 0 0.238751 0.059088 0 0.206107 0.057712 0 0.175276 0.055708 0 0.146447 0.053083 0 0.119797 0.049854 0 0.095492 0.046049 0 0.073680 0.041705 0 0.054497 0.036867 0 0.038060 0.031580 0 0.024472 0.025893 0 0.013815 0.019854 0 0.006156 0.013503 0 0.001541 0.006877 0 0.000000 0.000000 0 0.001541 -0.006877 0 0.006156 -0.013503 0 0.013815 -0.019854 0 0.024472 -0.025893 0 0.038060 -0.031580 0 0.054497 -0.036867 0 0.073680 -0.041705 0 0.095492 -0.046049 0 0.119797 -0.049854 0 0.146447 -0.053083 0 0.175276 -0.055708 0 0.206107 -0.057712 0 0.238751 -0.059088 0 0.273005 -0.059841 0 0.308658 -0.059988 0 0.345492 -0.059557 0 0.383277 -0.058582 0 0.421783 -0.057108 0 0.460770 -0.055184 0 0.500000 -0.052862 0 0.539230 -0.050196 0 0.578217 -0.047242 0 0.616723 -0.044055 0 0.654508 -0.040686 0 0.691342 -0.037188 0 0.726995 -0.033610 0 0.761249 -0.030000 0 0.793893 -0.026405 0 0.824724 -0.022869 0 0.853553 -0.019438 0 0.880203 -0.016158 0 0.904508 -0.013071 0 0.926320 -0.010221 0 0.945503 -0.007651 0 0.961940 -0.005399 0 0.975528 -0.003501 0 0.986185 -0.001990 0 0.993844 -0.000891 0 0.998459 -0.000224 0 Join 1 escape escape escape escape escape escape escape escape Escape + GiD_Process Mescape Geometry Edit DivideLine Multiple NumDivisions 2 1 escape escape escape + + ## Points ## + set coordinates [list 50 25 0 -50 25 0 -50 -25 0 50 -25 0] + set fluidPoints [list ] + foreach {x y z} $coordinates { + lappend fluidPoints [GiD_Geometry create point append Fluid $x $y $z] + } + + ## Lines ## + set fluidLines [list ] + set initial [lindex $fluidPoints 0] + foreach point [lrange $fluidPoints 1 end] { + lappend fluidLines [GiD_Geometry create line append stline Fluid $initial $point] + set initial $point + } + lappend fluidLines [GiD_Geometry create line append stline Fluid $initial [lindex $fluidPoints 0]] + + ## Surface + # Lines 2,3 (airfoil) and 4,5,6,7 (far field) + GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 5 6 7 escape escape +} + +# Group assign +proc ::PotentialFluid::examples::NACA0012_2D::AssignGroups {args} { + # Create the groups + GiD_Groups create Fluid + GiD_Groups edit color Fluid "#26d1a8ff" + GiD_EntitiesGroups assign Fluid surfaces 1 + + GiD_Groups create FarField + GiD_Groups edit color FarField "#e0210fff" + GiD_EntitiesGroups assign FarField lines 4 + GiD_EntitiesGroups assign FarField lines 5 + GiD_EntitiesGroups assign FarField lines 6 + GiD_EntitiesGroups assign FarField lines 7 + + # GiD_Groups create UpperSurface + # GiD_Groups edit color UpperSurface "#42eb71ff" + # GiD_EntitiesGroups assign UpperSurface lines 2 + + # GiD_Groups create LowerSurface + # GiD_Groups edit color LowerSurface "#42eb71ff" + # GiD_EntitiesGroups assign LowerSurface lines 3 + + GiD_Groups create Body + GiD_Groups edit color Body "#42eb71ff" + GiD_EntitiesGroups assign Body lines {2 3} +} + +proc ::PotentialFluid::examples::NACA0012_2D::AssignMeshSizes {args} { + set fluid_mesh_size 2.0 + set airfoil_mesh_size 0.01 + GiD_Process Mescape Utilities Variables SizeTransitionsFactor 0.3 escape escape + # GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get UpperSurface lines] escape escape + # GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get LowerSurface lines] escape escape + GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get Body lines] escape escape + GiD_Process Mescape Meshing AssignSizes Surfaces $fluid_mesh_size [GiD_EntitiesGroups get Fluid surfaces] escape escape + +} + +proc ::PotentialFluid::examples::NACA0012_2D::TreeAssignation {args} { + set nd $::Model::SpatialDimension + set root [customlib::GetBaseRoot] + + set condtype line + set elemtype surface + if {$nd eq "3D"} { + set condtype surface + set elemtype volume + } + + # Fluid Parts + set fluidParts [spdAux::getRoute "FLParts"] + set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] + $fluidNode setAttribute ov $elemtype + set props [list Element PotentialFlowElement$nd ConstitutiveLaw Inviscid DENSITY 1.225] + spdAux::SetValuesOnBaseNode $fluidNode $props + + set fluidConditions [spdAux::getRoute "FLBC"] + ErasePreviousIntervals + + # Far field + set fluidFarField "$fluidConditions/condition\[@n='PotentialWallCondition$nd'\]" + set farFieldNode [customlib::AddConditionGroupOnXPath $fluidFarField FarField] + $farFieldNode setAttribute ov $condtype + set props [list angle_of_attack 0.0 mach_infinity 0.03 speed_of_sound 340.0] + spdAux::SetValuesOnBaseNode $farFieldNode $props + + # Fluid Conditions + [customlib::AddConditionGroupOnXPath "$fluidConditions/condition\[@n='Body$nd'\]" Body] setAttribute ov $condtype + + # Parallelism + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + spdAux::RequestRefresh +} diff --git a/kratos.gid/apps/PotentialFluid/examples/NACA0012.tcl b/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl similarity index 50% rename from kratos.gid/apps/PotentialFluid/examples/NACA0012.tcl rename to kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl index 50939b897..2f46b019b 100644 --- a/kratos.gid/apps/PotentialFluid/examples/NACA0012.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl @@ -1,14 +1,17 @@ +namespace eval ::PotentialFluid::examples::NACA0012_3D { +namespace path ::PotentialFluid::examples +} -proc ::PotentialFluid::examples::NACA0012 {args} { +proc ::PotentialFluid::examples::NACA0012_3D::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawNACA0012Geometry$::Model::SpatialDimension - AssignGroupsNACA0012$::Model::SpatialDimension - AssignNACA0012MeshSizes$::Model::SpatialDimension - TreeAssignationNACA0012$::Model::SpatialDimension + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,132 +20,8 @@ proc ::PotentialFluid::examples::NACA0012 {args} { } -proc PotentialFluid::examples::DrawNACA0012Geometry2D {args} { - Kratos::ResetModel - GiD_Layers create Fluid - GiD_Layers edit to_use Fluid - - # Geometry creation - ## Airfoil - GiD_Process Mescape Geometry Create NurbsLine 1.000000 0.000000 0 0.998459 0.000224 0 0.993844 0.000891 0 0.986185 0.001990 0 0.975528 0.003501 0 0.961940 0.005399 0 0.945503 0.007651 0 0.926320 0.010221 0 0.904508 0.013071 0 0.880203 0.016158 0 0.853553 0.019438 0 0.824724 0.022869 0 0.793893 0.026405 0 0.761249 0.030000 0 0.726995 0.033610 0 0.691342 0.037188 0 0.654508 0.040686 0 0.616723 0.044055 0 0.578217 0.047242 0 0.539230 0.050196 0 0.500000 0.052862 0 0.460770 0.055184 0 0.421783 0.057108 0 0.383277 0.058582 0 0.345492 0.059557 0 0.308658 0.059988 0 0.273005 0.059841 0 0.238751 0.059088 0 0.206107 0.057712 0 0.175276 0.055708 0 0.146447 0.053083 0 0.119797 0.049854 0 0.095492 0.046049 0 0.073680 0.041705 0 0.054497 0.036867 0 0.038060 0.031580 0 0.024472 0.025893 0 0.013815 0.019854 0 0.006156 0.013503 0 0.001541 0.006877 0 0.000000 0.000000 0 0.001541 -0.006877 0 0.006156 -0.013503 0 0.013815 -0.019854 0 0.024472 -0.025893 0 0.038060 -0.031580 0 0.054497 -0.036867 0 0.073680 -0.041705 0 0.095492 -0.046049 0 0.119797 -0.049854 0 0.146447 -0.053083 0 0.175276 -0.055708 0 0.206107 -0.057712 0 0.238751 -0.059088 0 0.273005 -0.059841 0 0.308658 -0.059988 0 0.345492 -0.059557 0 0.383277 -0.058582 0 0.421783 -0.057108 0 0.460770 -0.055184 0 0.500000 -0.052862 0 0.539230 -0.050196 0 0.578217 -0.047242 0 0.616723 -0.044055 0 0.654508 -0.040686 0 0.691342 -0.037188 0 0.726995 -0.033610 0 0.761249 -0.030000 0 0.793893 -0.026405 0 0.824724 -0.022869 0 0.853553 -0.019438 0 0.880203 -0.016158 0 0.904508 -0.013071 0 0.926320 -0.010221 0 0.945503 -0.007651 0 0.961940 -0.005399 0 0.975528 -0.003501 0 0.986185 -0.001990 0 0.993844 -0.000891 0 0.998459 -0.000224 0 Join 1 escape escape escape escape escape escape escape escape Escape - GiD_Process Mescape Geometry Edit DivideLine Multiple NumDivisions 2 1 escape escape escape - - ## Points ## - set coordinates [list 50 25 0 -50 25 0 -50 -25 0 50 -25 0] - set fluidPoints [list ] - foreach {x y z} $coordinates { - lappend fluidPoints [GiD_Geometry create point append Fluid $x $y $z] - } - - ## Lines ## - set fluidLines [list ] - set initial [lindex $fluidPoints 0] - foreach point [lrange $fluidPoints 1 end] { - lappend fluidLines [GiD_Geometry create line append stline Fluid $initial $point] - set initial $point - } - lappend fluidLines [GiD_Geometry create line append stline Fluid $initial [lindex $fluidPoints 0]] - - ## Surface - # Lines 2,3 (airfoil) and 4,5,6,7 (far field) - GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 5 6 7 escape escape -} - -# Group assign -proc PotentialFluid::examples::AssignGroupsNACA00122D {args} { - # Create the groups - GiD_Groups create Fluid - GiD_Groups edit color Fluid "#26d1a8ff" - GiD_EntitiesGroups assign Fluid surfaces 1 - - GiD_Groups create FarField - GiD_Groups edit color FarField "#e0210fff" - GiD_EntitiesGroups assign FarField lines 4 - GiD_EntitiesGroups assign FarField lines 5 - GiD_EntitiesGroups assign FarField lines 6 - GiD_EntitiesGroups assign FarField lines 7 - - # GiD_Groups create UpperSurface - # GiD_Groups edit color UpperSurface "#42eb71ff" - # GiD_EntitiesGroups assign UpperSurface lines 2 - - # GiD_Groups create LowerSurface - # GiD_Groups edit color LowerSurface "#42eb71ff" - # GiD_EntitiesGroups assign LowerSurface lines 3 - - GiD_Groups create Body - GiD_Groups edit color Body "#42eb71ff" - GiD_EntitiesGroups assign Body lines {2 3} -} - -proc PotentialFluid::examples::AssignNACA0012MeshSizes2D {args} { - set fluid_mesh_size 2.0 - set airfoil_mesh_size 0.01 - GiD_Process Mescape Utilities Variables SizeTransitionsFactor 0.3 escape escape - # GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get UpperSurface lines] escape escape - # GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get LowerSurface lines] escape escape - GiD_Process Mescape Meshing AssignSizes Lines $airfoil_mesh_size {*}[GiD_EntitiesGroups get Body lines] escape escape - GiD_Process Mescape Meshing AssignSizes Surfaces $fluid_mesh_size [GiD_EntitiesGroups get Fluid surfaces] escape escape - -} - -proc PotentialFluid::examples::TreeAssignationNACA00122D {args} { - set nd $::Model::SpatialDimension - set root [customlib::GetBaseRoot] - - set condtype line - set elemtype surface - if {$nd eq "3D"} { - set condtype surface - set elemtype volume - } - - # Fluid Parts - set fluidParts [spdAux::getRoute "FLParts"] - set fluidNode [customlib::AddConditionGroupOnXPath $fluidParts Fluid] - $fluidNode setAttribute ov $elemtype - set props [list Element PotentialFlowElement$nd ConstitutiveLaw Inviscid DENSITY 1.225] - spdAux::SetValuesOnBaseNode $fluidNode $props - - set fluidConditions [spdAux::getRoute "FLBC"] - ErasePreviousIntervals - - # Far field - set fluidFarField "$fluidConditions/condition\[@n='PotentialWallCondition$nd'\]" - set farFieldNode [customlib::AddConditionGroupOnXPath $fluidFarField FarField] - $farFieldNode setAttribute ov $condtype - set props [list angle_of_attack 0.0 mach_infinity 0.03 speed_of_sound 340.0] - spdAux::SetValuesOnBaseNode $farFieldNode $props - - # Fluid Conditions - [customlib::AddConditionGroupOnXPath "$fluidConditions/condition\[@n='Body$nd'\]" Body] setAttribute ov $condtype - - # Parallelism - set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] - set xpath [spdAux::getRoute "Parallelization"] - spdAux::SetValuesOnBasePath $xpath $parameters - - spdAux::RequestRefresh -} - -proc PotentialFluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} - -proc PotentialFluid::examples::AddCuts { } { - # Cuts - set results "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" - - set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] - [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" -} - # Draw Geometry -proc PotentialFluid::examples::DrawNACA0012Geometry3D {args} { +proc ::PotentialFluid::examples::NACA0012_3D::DrawGeometry {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -183,7 +62,7 @@ proc PotentialFluid::examples::DrawNACA0012Geometry3D {args} { } # Group assign -proc PotentialFluid::examples::AssignGroupsNACA00123D {args} { +proc ::PotentialFluid::examples::NACA0012_3D::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid volumes 1 @@ -213,7 +92,7 @@ proc PotentialFluid::examples::AssignGroupsNACA00123D {args} { GiD_EntitiesGroups assign WingTips points {1 7} } -proc PotentialFluid::examples::AssignNACA0012MeshSizes3D {args} { +proc ::PotentialFluid::examples::NACA0012_3D::AssignMeshSizes {args} { #set fluid_mesh_size 2.0 set wing_lines_mesh_size 0.1 # set wing_points_mesh_size 0.1 @@ -226,7 +105,7 @@ proc PotentialFluid::examples::AssignNACA0012MeshSizes3D {args} { #Kratos::Event_BeforeMeshGeneration $fluid_mesh_size } -proc PotentialFluid::examples::TreeAssignationNACA00123D {args} { +proc ::PotentialFluid::examples::NACA0012_3D::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] diff --git a/kratos.gid/apps/PotentialFluid/examples/examples.tcl b/kratos.gid/apps/PotentialFluid/examples/examples.tcl index 5d80d9ac2..146d5543f 100644 --- a/kratos.gid/apps/PotentialFluid/examples/examples.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/examples.tcl @@ -1,9 +1,19 @@ -namespace eval PotentialFluid::examples { +namespace eval ::PotentialFluid::examples { } -proc PotentialFluid::examples::Init { } { - uplevel #0 [list source [file join $::PotentialFluid::dir examples NACA0012.tcl]] +proc ::PotentialFluid::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } -PotentialFluid::examples::Init \ No newline at end of file +proc ::PotentialFluid::examples::AddCuts { } { + # Cuts + set results "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]" + + set cp [[customlib::GetBaseRoot] selectNodes "$results/container\[@n = 'CutPlanes'\]/blockdata\[@name = 'CutPlane'\]"] + [$cp selectNodes "./value\[@n = 'point'\]"] setAttribute v "0.0,0.5,0.0" +} \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/examples/examples.xml b/kratos.gid/apps/PotentialFluid/examples/examples.xml index 87a762b1a..b09e8c64b 100644 --- a/kratos.gid/apps/PotentialFluid/examples/examples.xml +++ b/kratos.gid/apps/PotentialFluid/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/start.tcl b/kratos.gid/apps/PotentialFluid/start.tcl index dfd022e56..2726bb9d3 100644 --- a/kratos.gid/apps/PotentialFluid/start.tcl +++ b/kratos.gid/apps/PotentialFluid/start.tcl @@ -1,56 +1,26 @@ namespace eval ::PotentialFluid { # Variable declaration variable dir - variable prefix - variable attributes - variable app_id - variable kratos_name + variable _app } -proc ::PotentialFluid::Init { } { +proc ::PotentialFluid::Init { app } { # Variable initialization variable dir - variable prefix - variable attributes - variable kratos_name - set app_id "PotentialFluid" - set kratos_name "CompressiblePotentialFlowApplication" + variable _app apps::LoadAppById "Fluid" set dir [apps::getMyDir "PotentialFluid"] - set attributes [dict create] - - set prefix PTFL - set ::Model::ValidSpatialDimensions [list 2D 3D] - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - dict set attributes UseIntervals 0 - - LoadMyFiles + set _app $app + Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" set ::GidPriv(DuplicateEntities) 1 + PotentialFluid::xml::Init + PotentialFluid::write::Init - # TODO: activate this as soon as the 3D wake detection is working - #::spdAux::CreateDimensionWindow -} - -proc ::PotentialFluid::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} - -proc ::PotentialFluid::GetAttribute {name} { - variable attributes - set value "" - catch {set value [dict get $attributes $name]} - return $value } -::PotentialFluid::Init +proc ::PotentialFluid::GetAttribute {name} {return [$::PotentialFluid::_app getProperty $name]} +proc ::PotentialFluid::GetUniqueName {name} {return [$::PotentialFluid::_app getUniqueName $name]} +proc ::PotentialFluid::GetWriteProperty {name} {return [$::PotentialFluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index 9a3c8aea7..c9defacb6 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -25,31 +25,7 @@ proc PotentialFluid::write::Init { } { proc PotentialFluid::write::writeModelPartEvent { } { # Add the PotentialFluid to the Fluid valid applications list Fluid::write::AddValidApps "PotentialFluid" - - # Validation - Fluid::write::InitConditionsMap - - set err [Fluid::write::Validate] - if {$err ne ""} {error $err} - - # Init data - write::initWriteConfiguration [GetAttributes] - - # Headers - write::writeModelPartData - Fluid::write::writeProperties - - # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) - if {[GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} - - # Element connectivities (groups in FLParts) - write::writeElementConnectivities - - # Nodal conditions and conditions - Fluid::write::writeConditions - - # SubmodelParts - Fluid::write::writeMeshes + Fluid::write::writeModelPartEvent } proc PotentialFluid::write::writeCustomFilesEvent { } { diff --git a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl index f0a8f2cf2..229d54fa5 100644 --- a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl @@ -1,6 +1,5 @@ namespace eval PotentialFluid::xml { # Namespace variables declaration - variable dir variable lastImportMeshSize variable export_dir @@ -8,9 +7,8 @@ namespace eval PotentialFluid::xml { proc PotentialFluid::xml::Init { } { # Namespace variables inicialization - variable dir Model::DestroyEverything - Model::InitVariables dir $PotentialFluid::dir + Model::InitVariables dir [apps::getMyDir "PotentialFluid"] Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -28,12 +26,12 @@ proc PotentialFluid::xml::Init { } { proc PotentialFluid::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL ${::PotentialFluid::prefix} + spdAux::ConvertAllUniqueNames FL [::PotentialFluid::GetAttribute prefix] } } proc PotentialFluid::xml::getUniqueName {name} { - return ${::PotentialFluid::prefix}${name} + return [::PotentialFluid::GetAttribute prefix]${name} } proc PotentialFluid::xml::CustomTree { args } { @@ -51,4 +49,3 @@ proc spdAux::injectConditions { basenode args} { $basenode delete } -PotentialFluid::xml::Init From 2a75289f6f9f573bab38274a763016959f5c94ac Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 7 Sep 2021 17:18:03 +0200 Subject: [PATCH 361/556] Mpm adapt --- kratos.gid/apps/MPM/app.json | 44 ++++++++++++++++ .../apps/MPM/examples/FallingSandBall.tcl | 32 +++++------- kratos.gid/apps/MPM/examples/examples.tcl | 17 +++---- kratos.gid/apps/MPM/examples/examples.xml | 2 +- kratos.gid/apps/MPM/start.tcl | 50 ++++--------------- kratos.gid/apps/MPM/write/write.tcl | 30 ++++++----- .../apps/MPM/write/writeProjectParameters.tcl | 1 - kratos.gid/apps/MPM/xml/XmlController.tcl | 11 ++-- 8 files changed, 93 insertions(+), 94 deletions(-) create mode 100644 kratos.gid/apps/MPM/app.json diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json new file mode 100644 index 000000000..d1d61b8c7 --- /dev/null +++ b/kratos.gid/apps/MPM/app.json @@ -0,0 +1,44 @@ +{ + "id": "MPM", + "name": "MPM", + "prefix": "MPM", + "themed": false, + "kratos_name": "ParticleMechanicsApplication", + "dimensions": [ + "2D", + "2Da", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/FallingSandBall.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::MPM::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "MPMParts", + "nodal_conditions": "MPMNodalConditions", + "conditions": "MPMLoads" + }, + "write": { + "coordinates": "all", + "materials_file": "ParticleMaterials.json", + "properties_location": "json", + "model_part_name": "Background_Grid" + }, + "main_launch_file": "python/KratosParticle.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl index 7e6573b4e..1c23d4e94 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -1,13 +1,15 @@ +namespace eval ::MPM::examples::FallingSandBall { -proc ::MPM::examples::FallingSandBall {args} { +} +proc ::MPM::examples::FallingSandBall::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawFallingSandBallGeometry$::Model::SpatialDimension - AssignGroupsFallingSandBall$::Model::SpatialDimension - TreeAssignationFallingSandBall$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,14 +19,14 @@ proc ::MPM::examples::FallingSandBall {args} { # Draw Geometry -proc MPM::examples::DrawFallingSandBallGeometry3D {args} { +proc ::MPM::examples::FallingSandBall::DrawGeometry3D {args} { # DrawFallingSandBallGeometry2D # GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape # GiD_Layers edit opaque Fluid 0 # GiD_Process escape escape 'Render Flat escape 'Rotate Angle 270 90 escape escape escape escape 'Rotate objaxes x -150 y -30 escape escape } -proc MPM::examples::DrawFallingSandBallGeometry2D {args} { +proc ::MPM::examples::FallingSandBall::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Sand GiD_Layers edit to_use Sand @@ -61,7 +63,7 @@ proc MPM::examples::DrawFallingSandBallGeometry2D {args} { # Group assign -proc MPM::examples::AssignGroupsFallingSandBall2D {args} { +proc ::MPM::examples::FallingSandBall::AssignGroups2D {args} { # Create the groups GiD_Groups create Sand GiD_Groups edit color Sand "#26d1a8ff" @@ -80,16 +82,16 @@ proc MPM::examples::AssignGroupsFallingSandBall2D {args} { GiD_EntitiesGroups assign Slip lines {2 4} } -proc MPM::examples::AssignGroupsFallingSandBall3D {args} { +proc ::MPM::examples::FallingSandBall::AssignGroups3D {args} { } # Tree assign -proc MPM::examples::TreeAssignationFallingSandBall3D {args} { - TreeAssignationFallingSandBall2D +proc ::MPM::examples::FallingSandBall::TreeAssignation3D {args} { + TreeAssignation2D } -proc MPM::examples::TreeAssignationFallingSandBall2D {args} { +proc ::MPM::examples::FallingSandBall::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -141,11 +143,3 @@ proc MPM::examples::TreeAssignationFallingSandBall2D {args} { spdAux::SetValueOnTreeItem v "0.005" MPMTimeParameters DeltaTime spdAux::SetValueOnTreeItem v "0.01" GiDOptions OutputDeltaTime } - -proc MPM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/MPM/examples/examples.tcl b/kratos.gid/apps/MPM/examples/examples.tcl index cd75c8f07..dcfb5ab3f 100644 --- a/kratos.gid/apps/MPM/examples/examples.tcl +++ b/kratos.gid/apps/MPM/examples/examples.tcl @@ -1,12 +1,11 @@ -namespace eval MPM::examples { +namespace eval ::MPM::examples { } -proc MPM::examples::Init { } { - uplevel #0 [list source [file join $::MPM::dir examples FallingSandBall.tcl]] -} - -proc MPM::examples::UpdateMenus { } { -} - -MPM::examples::Init \ No newline at end of file +proc ::MPM::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/MPM/examples/examples.xml b/kratos.gid/apps/MPM/examples/examples.xml index 757d99712..0fa688af0 100644 --- a/kratos.gid/apps/MPM/examples/examples.xml +++ b/kratos.gid/apps/MPM/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/MPM/start.tcl b/kratos.gid/apps/MPM/start.tcl index 525848bc1..386eaae89 100644 --- a/kratos.gid/apps/MPM/start.tcl +++ b/kratos.gid/apps/MPM/start.tcl @@ -1,55 +1,25 @@ namespace eval ::MPM { # Variable declaration variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::MPM::Init { } { +proc ::MPM::Init { app } { # Variable initialization variable dir - variable prefix - variable attributes - variable kratos_name + variable _app + set _app $app apps::LoadAppById "Structural" - set kratos_name ParticleMechanicsApplication - set dir [apps::getMyDir "MPM"] - set attributes [dict create] - - set prefix MPM - - set ::Model::ValidSpatialDimensions [list 2D 2Da 3D] - # spdAux::SetSpatialDimmension "3D" - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - dict set attributes UseIntervals 1 - - LoadMyFiles Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" set ::GidPriv(DuplicateEntities) 1 - #::spdAux::CreateDimensionWindow -} - -proc ::MPM::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] -} - -proc ::MPM::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + # XML init event + ::MPM::xml::Init + ::MPM::write::Init } -::MPM::Init +proc ::MPM::GetAttribute {name} {return [$::MPM::_app getProperty $name]} +proc ::MPM::GetUniqueName {name} {return [$::MPM::_app getUniqueName $name]} +proc ::MPM::GetWriteProperty {name} {return [$::MPM::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 527f1fbbe..e08ddc624 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -7,17 +7,16 @@ proc MPM::write::Init { } { # Namespace variables inicialization variable ConditionsDictGroupIterators set ConditionsDictGroupIterators [dict create] - SetAttribute parts_un MPMParts - SetAttribute nodal_conditions_un MPMNodalConditions - SetAttribute conditions_un MPMLoads - SetAttribute properties_location json - # SetAttribute conditions_un FLBC - # SetAttribute materials_un EMBFLMaterials - # SetAttribute writeCoordinatesByGroups 0 - # SetAttribute validApps [list "MPM"] - SetAttribute main_script_file "KratosParticle.py" - SetAttribute materials_file "ParticleMaterials.json" - SetAttribute model_part_name "Background_Grid" + + SetAttribute parts_un [::MPM::GetUniqueName parts] + SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::MPM::GetUniqueName conditions] + + SetAttribute writeCoordinatesByGroups [::MPM::GetWriteProperty coordinates] + SetAttribute main_script_file [::MPM::GetAttribute main_launch_file] + SetAttribute materials_file [::MPM::GetWriteProperty materials_file] + SetAttribute properties_location [::MPM::GetWriteProperty properties_location] + SetAttribute model_part_name [::MPM::GetWriteProperty model_part_name] } # Events @@ -108,6 +107,7 @@ proc MPM::write::writeConditions { } { variable ConditionsDictGroupIterators set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un] ] } + proc MPM::write::writeSubmodelparts { type } { set grid_elements [list GRID2D GRID3D] @@ -161,8 +161,8 @@ proc MPM::write::writeCustomFilesEvent { } { # Main python script set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - write::RenameFileInModel $orig_name "MainKratos.py" + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } @@ -195,6 +195,4 @@ proc MPM::write::GetAttributes {} { proc MPM::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val -} - -MPM::write::Init +} \ 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 2ad7dcd24..af80848a1 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -100,7 +100,6 @@ proc ::MPM::write::getParametersDict { } { dict unset project_parameters_dict solver_settings rayleigh_alpha dict unset project_parameters_dict solver_settings rayleigh_beta - return $project_parameters_dict } proc ::MPM::write::writeParametersEvent { } { diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl index c9186ab2e..33010e007 100644 --- a/kratos.gid/apps/MPM/xml/XmlController.tcl +++ b/kratos.gid/apps/MPM/xml/XmlController.tcl @@ -1,13 +1,10 @@ namespace eval MPM::xml { - # Namespace variables declaration - variable dir } proc MPM::xml::Init { } { # Namespace variables inicialization - variable dir - Model::InitVariables dir $MPM::dir + Model::InitVariables dir $::MPM::dir # Import our elements Model::ForgetElements @@ -48,12 +45,12 @@ proc MPM::xml::Init { } { proc MPM::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames ST ${::MPM::prefix} + spdAux::ConvertAllUniqueNames ST MPM } } proc MPM::xml::getUniqueName {name} { - return ${::MPM::prefix}${name} + return MPM${name} } proc MPM::xml::CustomTree { args } { @@ -72,5 +69,3 @@ proc MPM::xml::ProcCheckGeometry {domNode args} { } return $ret } - -MPM::xml::Init From 851ff9f85218f8442c41f72e20997504e23ddeea Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 7 Sep 2021 20:47:38 +0200 Subject: [PATCH 362/556] fix dam mdpa --- kratos.gid/apps/Dam/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/Dam/app.json b/kratos.gid/apps/Dam/app.json index 80431bb76..3e2e12a74 100644 --- a/kratos.gid/apps/Dam/app.json +++ b/kratos.gid/apps/Dam/app.json @@ -32,7 +32,7 @@ "parts": "DamParts", "nodal_conditions": "DamNodalConditions", "conditions": "DamLoads", - "thermal_conditions_un": "DamThermalLoads", + "thermal_conditions": "DamThermalLoads", "materials": "DamMaterials", "results": "Results", "time_parameters": "DamTimeParameters" From dfbc01153be532a5941a0388e52b2146c134def3 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 8 Sep 2021 10:42:28 +0200 Subject: [PATCH 363/556] Embedded stil broken --- kratos.gid/apps/EmbeddedFluid/app.json | 43 +++++++++++ .../EmbeddedFluid/examples/CylinderInFlow.tcl | 44 +++++------ .../apps/EmbeddedFluid/examples/examples.tcl | 19 +++-- .../apps/EmbeddedFluid/examples/examples.xml | 2 +- kratos.gid/apps/EmbeddedFluid/start.tcl | 75 ++++++------------- kratos.gid/apps/EmbeddedFluid/write/write.tcl | 55 +++++++------- .../xml/BoundingBoxWindowController.tcl | 1 - .../xml/ImportWindowController.tcl | 1 - .../apps/EmbeddedFluid/xml/XmlController.tcl | 13 +--- kratos.gid/apps/Fluid/write/write.tcl | 8 ++ 10 files changed, 132 insertions(+), 129 deletions(-) create mode 100644 kratos.gid/apps/EmbeddedFluid/app.json diff --git a/kratos.gid/apps/EmbeddedFluid/app.json b/kratos.gid/apps/EmbeddedFluid/app.json new file mode 100644 index 000000000..acdb63adc --- /dev/null +++ b/kratos.gid/apps/EmbeddedFluid/app.json @@ -0,0 +1,43 @@ +{ + "id": "EmbeddedFluid", + "name": "EmbeddedFluid", + "prefix": "EMBFL", + "themed": false, + "kratos_name": "FluidDynamicsApplication", + "dimensions": [ + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/CylinderInFlow.tcl", + "xml/XmlController.tcl", + "xml/BoundingBoxWindowController.tcl", + "xml/ImportWindowController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::EmbeddedFluid::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "materials": "EMBFLMaterials" + }, + "write": { + "coordinates": "all", + "materials_file": "FluidMaterials.json", + "properties_location": "json", + "model_part_name": "FluidModelPart", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "python/KratosFluid.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl index adfff0d02..ed5c29055 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl @@ -1,15 +1,19 @@ +namespace eval EmbeddedFluid::examples::CylinderInFlow { + namespace path ::EmbeddedFluid::examples + variable CylinderInFlow_Data +} -proc ::EmbeddedFluid::examples::CylinderInFlow {args} { +proc ::EmbeddedFluid::examples::CylinderInFlow::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } InitVariables - DrawCylinderInFlowGeometry3D - AssignGroupsCylinderInFlow3D - AssignCylinderInFlowMeshSizes3D - TreeAssignationCylinderInFlow3D + DrawGeometry3D + AssignGroups3D + AssignMeshSizes3D + TreeAssignation3D AddMeshOptimizationPoints @@ -19,7 +23,7 @@ proc ::EmbeddedFluid::examples::CylinderInFlow {args} { GidUtils::UpdateWindow LAYER } -proc EmbeddedFluid::examples::InitVariables { } { +proc EmbeddedFluid::examples::CylinderInFlow::InitVariables { } { variable CylinderInFlow_Data set CylinderInFlow_Data(circle_center_x) 0.75 set CylinderInFlow_Data(circle_center_y) 0.5 @@ -29,14 +33,14 @@ proc EmbeddedFluid::examples::InitVariables { } { # Draw Geometry -proc EmbeddedFluid::examples::DrawCylinderInFlowGeometry3D {args} { - DrawCylinderInFlowGeometry2D +proc EmbeddedFluid::examples::CylinderInFlow::DrawGeometry3D {args} { + DrawGeometry2D GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Surfaces MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 2 escape escape escape GiD_Layers edit opaque Fluid 0 } -proc EmbeddedFluid::examples::DrawCylinderInFlowGeometry2D {args} { +proc EmbeddedFluid::examples::CylinderInFlow::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -81,7 +85,7 @@ proc EmbeddedFluid::examples::DrawCylinderInFlowGeometry2D {args} { } # Group assign -proc EmbeddedFluid::examples::AssignGroupsCylinderInFlow3D {args} { +proc EmbeddedFluid::examples::CylinderInFlow::AssignGroups3D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -105,7 +109,7 @@ proc EmbeddedFluid::examples::AssignGroupsCylinderInFlow3D {args} { } # Mesh sizes -proc EmbeddedFluid::examples::AssignCylinderInFlowMeshSizes3D {args} { +proc EmbeddedFluid::examples::CylinderInFlow::AssignMeshSizes3D {args} { set cylinder_mesh_size 0.005 set walls_mesh_size 0.05 set fluid_mesh_size 0.05 @@ -117,7 +121,7 @@ proc EmbeddedFluid::examples::AssignCylinderInFlowMeshSizes3D {args} { GiD_Process Mescape Meshing AssignSizes Volumes $fluid_mesh_size [GiD_EntitiesGroups get Fluid volumes] escape escape # Kratos::BeforeMeshGeneration $fluid_mesh_size } -proc EmbeddedFluid::examples::AssignCylinderInFlowMeshSizes2D {args} { +proc EmbeddedFluid::examples::CylinderInFlow::AssignMeshSizes2D {args} { set cylinder_mesh_size 0.005 set fluid_mesh_size 0.05 GiD_Process Mescape Utilities Variables SizeTransitionsFactor 0.4 escape escape @@ -127,10 +131,10 @@ proc EmbeddedFluid::examples::AssignCylinderInFlowMeshSizes2D {args} { } # Tree assign -proc EmbeddedFluid::examples::TreeAssignationCylinderInFlow3D {args} { - TreeAssignationCylinderInFlow2D +proc EmbeddedFluid::examples::CylinderInFlow::TreeAssignation3D {args} { + TreeAssignation2D } -proc EmbeddedFluid::examples::TreeAssignationCylinderInFlow2D {args} { +proc EmbeddedFluid::examples::CylinderInFlow::TreeAssignation2D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -183,15 +187,7 @@ proc EmbeddedFluid::examples::TreeAssignationCylinderInFlow2D {args} { spdAux::RequestRefresh } -proc EmbeddedFluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} - -proc EmbeddedFluid::examples::AddMeshOptimizationPoints { } { +proc EmbeddedFluid::examples::CylinderInFlow::AddMeshOptimizationPoints { } { set optimized_group "Optimized mesh" GiD_Layers create Mesh_Optimization diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl index 727e81cae..4a56efea1 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl @@ -1,12 +1,11 @@ -namespace eval EmbeddedFluid::examples { - variable CylinderInFlow_Data +namespace eval ::EmbeddedFluid::examples { + namespace path ::EmbeddedFluid } -proc EmbeddedFluid::examples::Init { } { - uplevel #0 [list source [file join $::EmbeddedFluid::dir examples CylinderInFlow.tcl]] -} - -proc EmbeddedFluid::examples::UpdateMenus { } { -} - -EmbeddedFluid::examples::Init \ No newline at end of file +proc ::EmbeddedFluid::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml index fe9c88d68..c6ac00859 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 2e5ce904a..4d3cb36d4 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -1,86 +1,57 @@ namespace eval ::EmbeddedFluid { # Variable declaration variable dir - variable prefix - variable attributes - variable oldMeshType - variable kratos_name + variable _app } -proc ::EmbeddedFluid::Init { } { +proc ::EmbeddedFluid::Init { app } { # Variable initialization variable dir - variable prefix - variable attributes - variable kratos_name + variable _app + set _app $app apps::LoadAppById "Fluid" - set kratos_name $::Fluid::kratos_name set dir [apps::getMyDir "EmbeddedFluid"] - set attributes [dict create] - - set prefix EMBFL - - set ::Model::ValidSpatialDimensions [list 3D] - spdAux::SetSpatialDimmension "3D" - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - dict set attributes UseIntervals 1 - - LoadMyFiles Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" set ::GidPriv(DuplicateEntities) 1 - #::spdAux::CreateDimensionWindow -} - -proc ::EmbeddedFluid::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir xml ImportWindowController.tcl]] - uplevel #0 [list source [file join $dir xml BoundingBoxWindowController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} + + ::EmbeddedFluid::xml::Init + ::EmbeddedFluid::xml::BoundingBox::Init + ::EmbeddedFluid::write::Init -proc ::EmbeddedFluid::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value } proc ::EmbeddedFluid::BeforeMeshGeneration {elementsize} { variable oldMeshType - set project_path [GiD_Info project modelname] - if {$project_path ne "UNNAMED"} { - catch {file delete -force [file join [write::GetConfigurationAttribute dir] "[Kratos::GetModelName].post.res"]} - # Set Octree - set oldMeshType [GiD_Set MeshType] - ::GiD_Set MeshType 2 - } else { - after 500 {WarnWin "You need to save the project before meshing"} - return "-cancel-" - } + # Delete previous results + catch {file delete -force [file join [write::GetConfigurationAttribute dir] "[Kratos::GetModelName].post.res"]} + + # Set Octree as volume mesher + set oldMeshType [GiD_Set MeshType] + ::GiD_Set MeshType 2 + } +# Restore the previous mesher proc ::EmbeddedFluid::AfterMeshGeneration {fail} { variable oldMeshType GiD_Set MeshType $oldMeshType } +# Add buttons to the left toolbar proc ::EmbeddedFluid::CustomToolbarItems { } { + # Stl import Kratos::ToolbarAddItem "ImportMesh" "Import.png" [list -np- EmbeddedFluid::xml::ImportMeshWindow] [= "Import embedded mesh"] + # Move the imported stl Kratos::ToolbarAddItem "Move" "move.png" [list -np- CopyMove Move] [= "Move the geometry/mesh"] + # Create the bounding box Kratos::ToolbarAddItem "Box" "box.png" [list -np- EmbeddedFluid::xml::BoundingBox::CreateWindow] [= "Generate the bounding box"] - - } -::EmbeddedFluid::Init +proc ::EmbeddedFluid::GetAttribute {name} {return [$::EmbeddedFluid::_app getProperty $name]} +proc ::EmbeddedFluid::GetUniqueName {name} {return [$::EmbeddedFluid::_app getUniqueName $name]} +proc ::EmbeddedFluid::GetWriteProperty {name} {return [$::EmbeddedFluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/EmbeddedFluid/write/write.tcl b/kratos.gid/apps/EmbeddedFluid/write/write.tcl index 3fbddd13e..547ef81b3 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/write.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/write.tcl @@ -3,40 +3,33 @@ namespace eval EmbeddedFluid::write { } proc EmbeddedFluid::write::Init { } { - # Namespace variables inicialization - SetAttribute parts_un FLParts - SetAttribute nodal_conditions_un FLNodalConditions - SetAttribute conditions_un FLBC - SetAttribute materials_un EMBFLMaterials - SetAttribute results_un FLResults - SetAttribute time_parameters_un FLTimeParameters - SetAttribute writeCoordinatesByGroups 0 + # Namespace variables inicialization + SetAttribute parts_un [::Fluid::GetUniqueName parts] + SetAttribute nodal_conditions_un [::Fluid:::GetUniqueName nodal_conditions] + SetAttribute conditions_un [::Fluid::GetUniqueName conditions] + SetAttribute materials_un [::EmbeddedFluid::GetUniqueName materials] + SetAttribute results_un [::Fluid::GetUniqueName results] + SetAttribute drag_un [::Fluid::GetUniqueName drag] + SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] + + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid" "EmbeddedFluid"] - SetAttribute main_script_file "KratosFluid.py" - SetAttribute model_part_name "FluidModelPart" - SetAttribute materials_file "FluidMaterials.json" - SetAttribute properties_location json + SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] + SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] + SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] + SetAttribute output_model_part_name [::Fluid::GetWriteProperty output_model_part_name] } # Events proc EmbeddedFluid::write::writeModelPartEvent { } { - # Fluid::write::AddValidApps "EmbeddedFluid" - set err [Fluid::write::Validate] - if {$err ne ""} {error $err} - - Fluid::write::InitConditionsMap - write::initWriteConfiguration [GetAttributes] - write::writeModelPartData - Fluid::write::writeProperties - write::writeNodalCoordinatesOnParts - write::writeElementConnectivities - Fluid::write::writeConditions - Fluid::write::writeMeshes - writeDistances - Fluid::write::FreeConditionsMap + Fluid::write::writeModelPartEvent } -proc EmbeddedFluid::write::writeCustomFilesEvent { } { - Fluid::write::writeCustomFilesEvent + +# Overwrite this function to print something at the end of the mdpa +namespace eval ::Fluid::write:: {} +proc ::Fluid::write::writeCustomBlocks { } { + EmbeddedFluid::write::writeDistances } proc EmbeddedFluid::write::writeDistances { } { @@ -59,6 +52,10 @@ proc EmbeddedFluid::write::writeDistances { } { } } +proc EmbeddedFluid::write::writeCustomFilesEvent { } { + Fluid::write::writeCustomFilesEvent +} + proc EmbeddedFluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] @@ -73,5 +70,3 @@ proc EmbeddedFluid::write::SetAttribute {att val} { variable writeAttributes dict set writeAttributes $att $val } - -EmbeddedFluid::write::Init diff --git a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl index da21814e0..846c1a4fd 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl @@ -199,4 +199,3 @@ proc EmbeddedFluid::xml::BoundingBox::GetCurrentBox { } { return {*}$modelbox } -EmbeddedFluid::xml::BoundingBox::Init \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/xml/ImportWindowController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/ImportWindowController.tcl index 611198f9c..10c27bada 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/ImportWindowController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/ImportWindowController.tcl @@ -67,4 +67,3 @@ proc EmbeddedFluid::xml::MoreImportOptions { f } { return EmbeddedFluid::xml::export_dir } -EmbeddedFluid::xml::Init diff --git a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl index e076a5fd2..e5437af2c 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl @@ -1,18 +1,15 @@ namespace eval EmbeddedFluid::xml { # Namespace variables declaration - variable dir variable lastImportMeshSize variable export_dir - } proc EmbeddedFluid::xml::Init { } { # Namespace variables inicialization - variable dir variable lastImportMeshSize set lastImportMeshSize 0 Model::DestroyEverything - Model::InitVariables dir $EmbeddedFluid::dir + Model::InitVariables dir $::EmbeddedFluid::dir Model::getSolutionStrategies Strategies.xml Model::getElements "../../Fluid/xml/Elements.xml" @@ -25,16 +22,15 @@ proc EmbeddedFluid::xml::Init { } { Model::getSolvers "../../Common/xml/Solvers.xml" } - proc EmbeddedFluid::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL ${::EmbeddedFluid::prefix} + spdAux::ConvertAllUniqueNames FL [::EmbeddedFluid::GetAttribute prefix] } } proc EmbeddedFluid::xml::getUniqueName {name} { - return ${::EmbeddedFluid::prefix}${name} + return [::EmbeddedFluid::GetAttribute prefix]${name} } proc EmbeddedFluid::xml::CustomTree { args } { @@ -66,7 +62,4 @@ proc EmbeddedFluid::xml::CustomTree { args } { #spdAux::SetValueOnTreeItem v MN EMBFLScheme #spdAux::SetValueOnTreeItem values MN EMBFLScheme #spdAux::SetValueOnTreeItem dict "MN,Monolitic generic scheme" EMBFLScheme - } - -EmbeddedFluid::xml::Init diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index cc5c43fe7..cca1f1515 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -61,6 +61,9 @@ proc ::Fluid::write::writeModelPartEvent { } { # SubmodelParts writeMeshes + # Write custom blocks at the end of the file + writeCustomBlocks + # Clean unset ::Fluid::write::FluidConditionMap } @@ -204,6 +207,11 @@ proc ::Fluid::write::writeConditionsMesh { } { } } +# Overwrite this function to print something at the end of the mdpa +proc ::Fluid::write::writeCustomBlocks { } { + +} + proc ::Fluid::write::InitConditionsMap { {map "" } } { variable FluidConditionMap From c3d81f30f57f9bd8c9b190fc1459913cfc7484df Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 8 Sep 2021 14:59:02 +0200 Subject: [PATCH 364/556] Load app by json field requeriments apps --- kratos.gid/apps/Buoyancy/start.tcl | 3 --- kratos.gid/apps/ConjugateHeatTransfer/start.tcl | 2 -- kratos.gid/apps/EmbeddedFluid/app.json | 2 +- kratos.gid/apps/EmbeddedFluid/start.tcl | 3 --- kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl | 2 +- kratos.gid/apps/FSI/app.json | 2 +- kratos.gid/apps/FSI/start.tcl | 5 +---- kratos.gid/apps/MPM/app.json | 2 +- kratos.gid/apps/MPM/start.tcl | 1 - kratos.gid/apps/PotentialFluid/app.json | 2 +- kratos.gid/apps/PotentialFluid/start.tcl | 2 -- kratos.gid/apps/StenosisWizard/app.json | 2 +- kratos.gid/apps/StenosisWizard/start.tcl | 5 +---- kratos.gid/apps/Stent/start.tcl | 5 +---- kratos.gid/scripts/Applications.tcl | 9 +++++++++ 15 files changed, 18 insertions(+), 29 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index 82bb29924..3eb28291c 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -13,9 +13,6 @@ proc ::Buoyancy::Init { app } { set dir [apps::getMyDir "Buoyancy"] set _app $app - apps::LoadAppById "Fluid" - apps::LoadAppById "ConvectionDiffusion" - ::Buoyancy::xml::Init ::Buoyancy::write::Init diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index e2043be50..07920669d 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -13,8 +13,6 @@ proc ::ConjugateHeatTransfer::Init { app } { set _app $app set dir [apps::getMyDir "ConjugateHeatTransfer"] - apps::LoadAppById "Buoyancy" - ::ConjugateHeatTransfer::xml::Init ::ConjugateHeatTransfer::write::Init diff --git a/kratos.gid/apps/EmbeddedFluid/app.json b/kratos.gid/apps/EmbeddedFluid/app.json index acdb63adc..92512d2d2 100644 --- a/kratos.gid/apps/EmbeddedFluid/app.json +++ b/kratos.gid/apps/EmbeddedFluid/app.json @@ -19,7 +19,7 @@ ], "start_script":"::EmbeddedFluid::Init", "requeriments":{ - "apps":[], + "apps":["Fluid"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 4d3cb36d4..1bfa476f7 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -10,14 +10,11 @@ proc ::EmbeddedFluid::Init { app } { variable _app set _app $app - apps::LoadAppById "Fluid" - set dir [apps::getMyDir "EmbeddedFluid"] Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" set ::GidPriv(DuplicateEntities) 1 - ::EmbeddedFluid::xml::Init ::EmbeddedFluid::xml::BoundingBox::Init ::EmbeddedFluid::write::Init diff --git a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl index e5437af2c..7cacef274 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl @@ -25,7 +25,7 @@ proc EmbeddedFluid::xml::Init { } { proc EmbeddedFluid::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL [::EmbeddedFluid::GetAttribute prefix] + spdAux::ConvertAllUniqueNames [::Fluid::GetAttribute prefix] [::EmbeddedFluid::GetAttribute prefix] } } diff --git a/kratos.gid/apps/FSI/app.json b/kratos.gid/apps/FSI/app.json index 424749613..a1c9fb31a 100644 --- a/kratos.gid/apps/FSI/app.json +++ b/kratos.gid/apps/FSI/app.json @@ -20,7 +20,7 @@ ], "start_script":"::FSI::Init", "requeriments":{ - "apps":[], + "apps":["Fluid", "Structural"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index e947ba8e3..3110811d8 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -11,10 +11,7 @@ proc ::FSI::Init { app } { set _app $app set dir [apps::getMyDir "FSI"] - - apps::LoadAppById "Structural" - apps::LoadAppById "Fluid" - + ::FSI::xml::Init ::FSI::write::Init } diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index d1d61b8c7..193311a30 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -19,7 +19,7 @@ ], "start_script":"::MPM::Init", "requeriments":{ - "apps":[], + "apps":["Structural"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/MPM/start.tcl b/kratos.gid/apps/MPM/start.tcl index 386eaae89..8fda939cc 100644 --- a/kratos.gid/apps/MPM/start.tcl +++ b/kratos.gid/apps/MPM/start.tcl @@ -10,7 +10,6 @@ proc ::MPM::Init { app } { variable _app set _app $app - apps::LoadAppById "Structural" set dir [apps::getMyDir "MPM"] Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" set ::GidPriv(DuplicateEntities) 1 diff --git a/kratos.gid/apps/PotentialFluid/app.json b/kratos.gid/apps/PotentialFluid/app.json index 174eac3dc..5d4c2673a 100644 --- a/kratos.gid/apps/PotentialFluid/app.json +++ b/kratos.gid/apps/PotentialFluid/app.json @@ -19,7 +19,7 @@ ], "start_script":"::PotentialFluid::Init", "requeriments":{ - "apps":[], + "apps":["Fluid"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/PotentialFluid/start.tcl b/kratos.gid/apps/PotentialFluid/start.tcl index 2726bb9d3..f8fa8e30c 100644 --- a/kratos.gid/apps/PotentialFluid/start.tcl +++ b/kratos.gid/apps/PotentialFluid/start.tcl @@ -9,8 +9,6 @@ proc ::PotentialFluid::Init { app } { variable dir variable _app - apps::LoadAppById "Fluid" - set dir [apps::getMyDir "PotentialFluid"] set _app $app diff --git a/kratos.gid/apps/StenosisWizard/app.json b/kratos.gid/apps/StenosisWizard/app.json index afee51cce..4664b1318 100644 --- a/kratos.gid/apps/StenosisWizard/app.json +++ b/kratos.gid/apps/StenosisWizard/app.json @@ -15,7 +15,7 @@ ], "start_script":"::StenosisWizard::Init", "requeriments":{ - "apps":[], + "apps":["Fluid"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index cc7a98c5c..41b865f26 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -13,10 +13,7 @@ proc ::StenosisWizard::Init { app } { # Init Working directory set dir [apps::getMyDir "StenosisWizard"] - - # Load Fluid App - apps::LoadAppById "Fluid" - + spdAux::processIncludes smart_wizard::LoadWizardDoc [file join $dir wizard Wizard_default.wiz] diff --git a/kratos.gid/apps/Stent/start.tcl b/kratos.gid/apps/Stent/start.tcl index 768c3a4d3..4d79d4bbd 100644 --- a/kratos.gid/apps/Stent/start.tcl +++ b/kratos.gid/apps/Stent/start.tcl @@ -11,10 +11,7 @@ proc ::Stent::Init { app } { set dir [apps::getMyDir "Stent"] set _app $app - - # Load Fluid App - apps::LoadAppById "Structural" - + spdAux::processIncludes smart_wizard::LoadWizardDoc [file join $dir wizard StentGeometry_default.wiz] diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index c4a94f561..24a26a196 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -305,6 +305,15 @@ proc apps::ActivateApp_do {app} { if {[file exists $app_definition_file]} { set props [Kratos::ReadJsonDict $app_definition_file] $app setProperties $props + + # Load app dependences + if {[dict exists $props requeriments apps]} { + foreach app_id [dict get $props requeriments apps] { + apps::LoadAppById $app_id + } + } + + # Then load the app files, so we can overwrite functions loaded in dependences if {[dict exists $props script_files]} { foreach source_file [dict get $props script_files] { set fileName [file join $dir $source_file] From 97634596aac368681e45cb521e061efd948ed004 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 8 Sep 2021 15:00:27 +0200 Subject: [PATCH 365/556] Launchers dont load apps until clicked --- kratos.gid/apps/DEMLauncher/app.json | 2 +- kratos.gid/apps/FluidLauncher/app.json | 2 +- kratos.gid/apps/ThermicLauncher/app.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/DEMLauncher/app.json b/kratos.gid/apps/DEMLauncher/app.json index f5de5f069..49c23c168 100644 --- a/kratos.gid/apps/DEMLauncher/app.json +++ b/kratos.gid/apps/DEMLauncher/app.json @@ -6,7 +6,7 @@ ], "start_script":"::DemLauncher::Init", "requeriments":{ - "apps":["DEM", "DEMPFEM", "FluidDEM", "CDEM"], + "apps_exist":["DEM", "DEMPFEM", "FluidDEM", "CDEM"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/FluidLauncher/app.json b/kratos.gid/apps/FluidLauncher/app.json index 9481433ca..500a6a824 100644 --- a/kratos.gid/apps/FluidLauncher/app.json +++ b/kratos.gid/apps/FluidLauncher/app.json @@ -6,7 +6,7 @@ ], "start_script":"::FluidLauncher::Init", "requeriments":{ - "apps":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], + "apps_exist":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/ThermicLauncher/app.json b/kratos.gid/apps/ThermicLauncher/app.json index 85a7fc72b..d81886c69 100644 --- a/kratos.gid/apps/ThermicLauncher/app.json +++ b/kratos.gid/apps/ThermicLauncher/app.json @@ -6,7 +6,7 @@ ], "start_script":"::ThermicLauncher::Init", "requeriments":{ - "apps":["ConvectionDiffusion", "Buoyancy", "ConjugateHeatTransfer"], + "apps_exist":["ConvectionDiffusion", "Buoyancy", "ConjugateHeatTransfer"], "minimum_gid_version":"15.1.3d" }, "permissions": { From 818e9e59120e652d17ec0acabc1a4fae15809401 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 8 Sep 2021 17:45:42 +0200 Subject: [PATCH 366/556] pfem fluid adapt --- kratos.gid/apps/PfemFluid/app.json | 46 +++++++++++++++++++ .../apps/PfemFluid/examples/DamBreakFSI.tcl | 30 ++++++------ .../apps/PfemFluid/examples/WaterDamBreak.tcl | 36 ++++++--------- .../apps/PfemFluid/examples/examples.tcl | 18 ++++---- .../apps/PfemFluid/examples/examples.xml | 4 +- kratos.gid/apps/PfemFluid/start.tcl | 40 ++++------------ kratos.gid/apps/PfemFluid/write/write.tcl | 31 +++++++------ .../write/writeProjectParameters.tcl | 2 +- .../apps/PfemFluid/xml/XmlController.tcl | 7 +-- kratos.gid/apps/PfemLauncher/app.json | 18 ++++++++ kratos.gid/apps/PfemLauncher/start.tcl | 4 +- 11 files changed, 129 insertions(+), 107 deletions(-) create mode 100644 kratos.gid/apps/PfemFluid/app.json create mode 100644 kratos.gid/apps/PfemLauncher/app.json diff --git a/kratos.gid/apps/PfemFluid/app.json b/kratos.gid/apps/PfemFluid/app.json new file mode 100644 index 000000000..83f8217d8 --- /dev/null +++ b/kratos.gid/apps/PfemFluid/app.json @@ -0,0 +1,46 @@ +{ + "id": "PfemFluid", + "name": "Pfem Fluid", + "prefix": "PFEMFLUID_", + "themed": true, + "kratos_name": "PfemFluidDynamicsApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/DamBreakFSI.tcl", + "examples/WaterDamBreak.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::PfemFluid::Init", + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "nodal_conditions": "PFEMFLUID_NodalConditions", + "materials": "PFEMFLUID_Materials", + "results": "Results", + "time_parameters": "PFEMFLUID_TimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "PFEMFluidMaterials.json", + "properties_location": "json", + "model_part_name": "PfemFluidModelPartPfemFluid", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "python/RunPFEM.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl index f93a85d7b..9a0ad3ac8 100644 --- a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl +++ b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl @@ -1,5 +1,8 @@ +namespace eval ::PfemFluid::examples::DamBreakFSI { -proc ::PfemFluid::examples::DamBreakFSI {args} { +} + +proc ::PfemFluid::examples::DamBreakFSI::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -7,10 +10,10 @@ proc ::PfemFluid::examples::DamBreakFSI {args} { } Kratos::ResetModel - DrawDamBreakFSIGeometry$::Model::SpatialDimension - AssignGroupsDamBreakFSIGeometry$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension # AssignDamBreakFSIMeshSizes$::Model::SpatialDimension - TreeAssignationDamBreakFSI$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -20,11 +23,11 @@ proc ::PfemFluid::examples::DamBreakFSI {args} { # Draw Geometry -proc PfemFluid::examples::DrawDamBreakFSIGeometry3D {args} { +proc PfemFluid::examples::DamBreakFSI::DrawGeometry3D {args} { # To be implemented } -proc PfemFluid::examples::DrawDamBreakFSIGeometry2D {args} { +proc PfemFluid::examples::DamBreakFSI::DrawGeometry2D {args} { set layer PfemFluid GiD_Layers create $layer GiD_Layers edit to_use $layer @@ -68,7 +71,7 @@ proc PfemFluid::examples::DrawDamBreakFSIGeometry2D {args} { # Group assign -proc PfemFluid::examples::AssignGroupsDamBreakFSIGeometry2D {args} { +proc PfemFluid::examples::DamBreakFSI::AssignGroups2D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -87,16 +90,16 @@ proc PfemFluid::examples::AssignGroupsDamBreakFSIGeometry2D {args} { GiD_EntitiesGroups assign Rigid_Walls lines {1 4 9 10 11 12 13} } -proc PfemFluid::examples::AssignGroupsDamBreakFSIGeometry3D {args} { +proc PfemFluid::examples::DamBreakFSI::AssignGroups3D {args} { # To be implemented } # Tree assign -proc PfemFluid::examples::TreeAssignationDamBreakFSI3D {args} { +proc PfemFluid::examples::DamBreakFSI::TreeAssignation3D {args} { # To be implemented } -proc PfemFluid::examples::TreeAssignationDamBreakFSI2D {args} { +proc PfemFluid::examples::DamBreakFSI::TreeAssignation2D {args} { gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -156,10 +159,3 @@ proc PfemFluid::examples::TreeAssignationDamBreakFSI2D {args} { } -proc PfemFluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} diff --git a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl index 8a82dfc56..4a1658c49 100644 --- a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl +++ b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl @@ -1,5 +1,8 @@ +namespace eval ::PfemFluid::examples::WaterDamBreak { -proc ::PfemFluid::examples::WaterDamBreak {args} { +} + +proc ::PfemFluid::examples::WaterDamBreak::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -7,10 +10,9 @@ proc ::PfemFluid::examples::WaterDamBreak {args} { } Kratos::ResetModel - DrawWaterDamBreakGeometry$::Model::SpatialDimension - AssignGroupsWaterDamBreakGeometry$::Model::SpatialDimension - # AssignWaterDamBreakMeshSizes$::Model::SpatialDimension - TreeAssignationWaterDamBreak$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroupsGeometry$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -20,11 +22,11 @@ proc ::PfemFluid::examples::WaterDamBreak {args} { # Draw Geometry -proc PfemFluid::examples::DrawWaterDamBreakGeometry3D {args} { +proc PfemFluid::examples::WaterDamBreak::DrawGeometry3D {args} { # To be implemented } -proc PfemFluid::examples::DrawWaterDamBreakGeometry2D {args} { +proc PfemFluid::examples::WaterDamBreak::DrawGeometry2D {args} { set layer PfemFluid GiD_Layers create $layer GiD_Layers edit to_use $layer @@ -51,10 +53,8 @@ proc PfemFluid::examples::DrawWaterDamBreakGeometry2D {args} { GiD_Process Mescape Geometry Create NurbsSurface 2 3 4 1 escape escape } - - # Group assign -proc PfemFluid::examples::AssignGroupsWaterDamBreakGeometry2D {args} { +proc PfemFluid::examples::WaterDamBreak::AssignGroups2D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -65,17 +65,17 @@ proc PfemFluid::examples::AssignGroupsWaterDamBreakGeometry2D {args} { GiD_EntitiesGroups assign Rigid_Walls lines {1 4 5 6 7 8 9 10 11 12} } -proc PfemFluid::examples::AssignGroupsWaterDamBreakGeometry3D {args} { +proc PfemFluid::examples::WaterDamBreak::AssignGroups3D {args} { # To be implemented } # Tree assign -proc PfemFluid::examples::TreeAssignationWaterDamBreak3D {args} { +proc PfemFluid::examples::WaterDamBreak::TreeAssignation3D {args} { # To be implemented } -proc PfemFluid::examples::TreeAssignationWaterDamBreak2D {args} { -# ONLY ASSIGN VELOCITY X Y EQUAL TO 0 TO THE RIGID LINES (SEE ABOVE) +proc PfemFluid::examples::WaterDamBreak::TreeAssignation2D {args} { + # ONLY ASSIGN VELOCITY X Y EQUAL TO 0 TO THE RIGID LINES (SEE ABOVE) # Fluid Parts set bodies_xpath "[spdAux::getRoute PFEMFLUID_Bodies]/blockdata\[@name='Body1'\]" gid_groups_conds::copyNode $bodies_xpath [spdAux::getRoute PFEMFLUID_Bodies] @@ -102,11 +102,3 @@ proc PfemFluid::examples::TreeAssignationWaterDamBreak2D {args} { set fixVelocityNode [customlib::AddConditionGroupOnXPath $fixVelocity "Rigid_Walls//Total"] $fixVelocityNode setAttribute ov line } - -proc PfemFluid::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/examples/examples.tcl b/kratos.gid/apps/PfemFluid/examples/examples.tcl index f9e15e098..807165e78 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.tcl +++ b/kratos.gid/apps/PfemFluid/examples/examples.tcl @@ -1,13 +1,11 @@ -namespace eval PfemFluid::examples { +namespace eval ::PfemFluid::examples { } -proc PfemFluid::examples::Init { } { - uplevel #0 [list source [file join $::PfemFluid::dir examples WaterDamBreak.tcl]] - uplevel #0 [list source [file join $::PfemFluid::dir examples DamBreakFSI.tcl]] -} - -proc PfemFluid::examples::UpdateMenus { } { -} - -PfemFluid::examples::Init +proc ::PfemFluid::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml index c0bf3f396..ed0ba3485 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.xml +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -1,7 +1,7 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index 96565961b..c257edd1d 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -1,42 +1,18 @@ namespace eval ::PfemFluid { # Variable declaration variable dir - variable attributes - variable kratos_name + variable _app } -proc ::PfemFluid::Init { } { +proc ::PfemFluid::Init { app } { # Variable initialization variable dir - variable attributes - variable kratos_name - set kratos_name PfemFluidDynamicsApplication - + variable _app set dir [apps::getMyDir "PfemFluid"] - set ::Model::ValidSpatialDimensions [list 2D 3D] - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - set attributes [dict create] - dict set attributes UseIntervals 1 - if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } - dict set attributes UseRestart 1 - LoadMyFiles -} - -proc ::PfemFluid::LoadMyFiles { } { - variable dir - uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} - + set _app $app -proc ::PfemFluid::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + PfemFluid::xml::Init + PfemFluid::write::Init } proc ::PfemFluid::CustomToolbarItems { } { @@ -57,4 +33,6 @@ proc ::PfemFluid::CustomToolbarItems { } { Kratos::ToolbarAddItem "SpacerApp" "" "" "" } -::PfemFluid::Init +proc ::PfemFluid::GetAttribute {name} {return [$::PfemFluid::_app getProperty $name]} +proc ::PfemFluid::GetUniqueName {name} {return [$::PfemFluid::_app getUniqueName $name]} +proc ::PfemFluid::GetWriteProperty {name} {return [$::PfemFluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index 44cf937de..e0da78924 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -14,9 +14,14 @@ proc PfemFluid::write::Init { } { variable Names set Names [dict create DeltaTime DeltaTime] - SetAttribute properties_location json - SetAttribute model_part_name "PfemFluidModelPart" - SetAttribute materials_file "PFEMFluidMaterials.json" + + SetAttribute materials_un [::PfemFluid::GetUniqueName materials] + SetAttribute nodal_conditions_un [::PfemFluid::GetUniqueName nodal_conditions] + + SetAttribute main_script_file [::PfemFluid::GetAttribute main_launch_file] + SetAttribute materials_file [::PfemFluid::GetWriteProperty materials_file] + SetAttribute properties_location [::PfemFluid::GetWriteProperty properties_location] + SetAttribute model_part_name [::PfemFluid::GetWriteProperty model_part_name] } @@ -27,7 +32,7 @@ proc PfemFluid::write::writeModelPartEvent { } { set parts_un_list [GetPartsUN] foreach part_un $parts_un_list { - write::initWriteData $part_un "PFEMFLUID_Materials" + write::initWriteData $part_un [GetAttribute materials_un] } write::writeModelPartData @@ -37,7 +42,7 @@ proc PfemFluid::write::writeModelPartEvent { } { write::writeNodalCoordinates foreach part_un $parts_un_list { - write::initWriteData $part_un "PFEMFLUID_Materials" + write::initWriteData $part_un [GetAttribute materials_un] write::writeElementConnectivities } PfemFluid::write::writeMeshes @@ -46,11 +51,11 @@ proc PfemFluid::write::writeModelPartEvent { } { proc PfemFluid::write::writeMeshes { } { foreach part_un [GetPartsUN] { - write::initWriteData $part_un "PFEMFLUID_Materials" + write::initWriteData $part_un [GetAttribute materials_un] write::writePartSubModelPart } # Solo Malla , no en conditions - writeNodalConditions "PFEMFLUID_NodalConditions" + writeNodalConditions [GetAttribute nodal_conditions_un] } @@ -100,10 +105,11 @@ proc PfemFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file PfemFluid::write::WriteMaterialsFile - write::CopyFileIntoModel "python/RunPFEM.py" - write::RenameFileInModel "RunPFEM.py" "MainKratos.py" + # Main python script + set orig_name [GetAttribute main_script_file] + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" - #write::RenameFileInModel "ProjectParameters.json" "ProjectParameters.py" } proc PfemFluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { @@ -126,8 +132,6 @@ proc PfemFluid::write::writePropertiesJsonFile { {fname "materials.json"} {write write::CloseFile } - - proc PfemFluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] @@ -152,6 +156,3 @@ proc PfemFluid::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] } - - -PfemFluid::write::Init diff --git a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl index 69fe8f781..bd69bea2c 100644 --- a/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemFluid/write/writeProjectParameters.tcl @@ -144,7 +144,7 @@ proc PfemFluid::write::GetPFEM_SolverSettingsDict { } { dict set solverSettingsDict bodies_list $bodies_list dict set solverSettingsDict problem_domain_sub_model_part_list $bodies_parts_list dict set solverSettingsDict constitutive_laws_list $constitutive_list - dict set solverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames "PFEMFLUID_NodalConditions" "PFEMFLUID_Loads"] + dict set solverSettingsDict processes_sub_model_part_list [write::getSubModelPartNames [GetAttribute nodal_conditions_un] "PFEMFLUID_Loads"] set materialsDict [dict create] dict set materialsDict materials_filename [GetAttribute materials_file] diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index f61387f06..e5e76211b 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -1,15 +1,13 @@ namespace eval PfemFluid::xml { - variable dir variable bodyNodalCondition } proc PfemFluid::xml::Init { } { - variable dir variable bodyNodalCondition set bodyNodalCondition [list ] - Model::InitVariables dir $PfemFluid::dir + Model::InitVariables dir $::PfemFluid::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml @@ -51,7 +49,6 @@ proc PfemFluid::xml::CustomTree { args } { foreach node [$app_root getElementsByTagName container ] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder } } #TODO: (for JG) the previous icons should be changed automatically looking at the strategies.xml - #intervals spdAux::SetValueOnTreeItem icon sheets Intervals foreach node [[$app_root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { @@ -592,5 +589,3 @@ proc PfemFluid::xml::ProcCheckStateBoundingBox3Dimension {domNode args} { } if {$state} {return "normal"} else {return "hidden"} } - -PfemFluid::xml::Init diff --git a/kratos.gid/apps/PfemLauncher/app.json b/kratos.gid/apps/PfemLauncher/app.json new file mode 100644 index 000000000..1a10a5680 --- /dev/null +++ b/kratos.gid/apps/PfemLauncher/app.json @@ -0,0 +1,18 @@ +{ + "id": "Pfem Launcher", + "name": "Pfem", + "script_files": [ + "start.tcl" + ], + "start_script":"::PfemLauncher::Init", + "requeriments":{ + "apps_exist":["PfemFluid", "DEMPFEM", "PfemThermic"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": false, + "show_toolbar": true, + "intervals": false, + "wizard": false + } +} diff --git a/kratos.gid/apps/PfemLauncher/start.tcl b/kratos.gid/apps/PfemLauncher/start.tcl index 99be71f04..9aee2870b 100644 --- a/kratos.gid/apps/PfemLauncher/start.tcl +++ b/kratos.gid/apps/PfemLauncher/start.tcl @@ -2,7 +2,7 @@ namespace eval ::PfemLauncher { variable available_apps } -proc ::PfemLauncher::Init { } { +proc ::PfemLauncher::Init { app } { variable available_apps set available_apps [list PfemFluid DEMPFEM PfemThermic] @@ -66,5 +66,3 @@ proc ::PfemLauncher::ChangeAppTo {appid} { spdAux::SetSpatialDimmension undefined apps::setActiveApp $appid } - -::PfemLauncher::Init From cf61ec3417b3f299b6c9b02fa5a7d997520f3509 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 8 Sep 2021 17:50:07 +0200 Subject: [PATCH 367/556] delete old --- kratos.gid/apps/Pfem/images/2D-icon.png | Bin 246 -> 0 bytes kratos.gid/apps/Pfem/images/2D.png | Bin 4975 -> 0 bytes kratos.gid/apps/Pfem/images/2Da.png | Bin 6018 -> 0 bytes kratos.gid/apps/Pfem/images/2da-icon.png | Bin 288 -> 0 bytes kratos.gid/apps/Pfem/images/3D-icon.png | Bin 248 -> 0 bytes kratos.gid/apps/Pfem/images/3D.png | Bin 4907 -> 0 bytes kratos.gid/apps/Pfem/images/Black/2D.png | Bin 4103 -> 0 bytes kratos.gid/apps/Pfem/images/Black/2Da.png | Bin 5213 -> 0 bytes kratos.gid/apps/Pfem/images/Black/3D.png | Bin 4088 -> 0 bytes kratos.gid/apps/Pfem/images/Black/_2D_.png | Bin 2931 -> 0 bytes kratos.gid/apps/Pfem/images/Black/_2Da_.png | Bin 3563 -> 0 bytes kratos.gid/apps/Pfem/images/Black/_3D_.png | Bin 2988 -> 0 bytes .../apps/Pfem/images/Black/analysis_type.png | Bin 523 -> 0 bytes kratos.gid/apps/Pfem/images/Black/bodies.png | Bin 655 -> 0 bytes kratos.gid/apps/Pfem/images/Black/body.png | Bin 1357 -> 0 bytes .../Pfem/images/Black/boundaryConditions.png | Bin 327 -> 0 bytes .../apps/Pfem/images/Black/cancelProcess.png | Bin 1526 -> 0 bytes .../Pfem/images/Black/contactStrategy.png | Bin 262 -> 0 bytes kratos.gid/apps/Pfem/images/Black/data.png | Bin 251 -> 0 bytes .../apps/Pfem/images/Black/doRestart.png | Bin 281 -> 0 bytes kratos.gid/apps/Pfem/images/Black/folder.png | Bin 277 -> 0 bytes .../apps/Pfem/images/Black/gravity_vector.png | Bin 308 -> 0 bytes .../apps/Pfem/images/Black/groupCreated.png | Bin 456 -> 0 bytes .../apps/Pfem/images/Black/linear_solver.png | Bin 355 -> 0 bytes kratos.gid/apps/Pfem/images/Black/logo.png | Bin 19177 -> 0 bytes kratos.gid/apps/Pfem/images/Black/logo_1.png | Bin 6332 -> 0 bytes .../Pfem/images/Black/meshingStrategies.png | Bin 303 -> 0 bytes .../Pfem/images/Black/modelProperties.png | Bin 1765 -> 0 bytes .../apps/Pfem/images/Black/modelling.png | Bin 338 -> 0 bytes .../apps/Pfem/images/Black/parallel_type.png | Bin 291 -> 0 bytes kratos.gid/apps/Pfem/images/Black/parts.png | Bin 318 -> 0 bytes .../apps/Pfem/images/Black/pfemData.png | Bin 346 -> 0 bytes .../apps/Pfem/images/Black/runSimulation.png | Bin 1552 -> 0 bytes .../apps/Pfem/images/Black/seeResults.png | Bin 306 -> 0 bytes kratos.gid/apps/Pfem/images/Black/select.png | Bin 327 -> 0 bytes kratos.gid/apps/Pfem/images/Black/setLoad.png | Bin 277 -> 0 bytes .../apps/Pfem/images/Black/setUnits.png | Bin 294 -> 0 bytes .../apps/Pfem/images/Black/settings.png | Bin 355 -> 0 bytes kratos.gid/apps/Pfem/images/Black/sheets.png | Bin 293 -> 0 bytes kratos.gid/apps/Pfem/images/Black/solid.png | Bin 567 -> 0 bytes kratos.gid/apps/Pfem/images/Black/solvers.png | Bin 384 -> 0 bytes .../apps/Pfem/images/Black/timeIntervals.png | Bin 372 -> 0 bytes .../apps/Pfem/images/Black/timeParameters.png | Bin 364 -> 0 bytes kratos.gid/apps/Pfem/images/Black/tree.png | Bin 510 -> 0 bytes kratos.gid/apps/Pfem/images/Black/view.png | Bin 1661 -> 0 bytes kratos.gid/apps/Pfem/images/_2D_.png | Bin 2931 -> 0 bytes kratos.gid/apps/Pfem/images/_2Da_.png | Bin 3563 -> 0 bytes kratos.gid/apps/Pfem/images/_3D_.png | Bin 2988 -> 0 bytes kratos.gid/apps/Pfem/images/bodies.png | Bin 655 -> 0 bytes kratos.gid/apps/Pfem/images/body.png | Bin 1357 -> 0 bytes .../apps/Pfem/images/boundaryConditions.png | Bin 274 -> 0 bytes kratos.gid/apps/Pfem/images/cancelProcess.png | Bin 1863 -> 0 bytes .../apps/Pfem/images/contactStrategy.png | Bin 291 -> 0 bytes kratos.gid/apps/Pfem/images/data.png | Bin 203 -> 0 bytes kratos.gid/apps/Pfem/images/doRestart.png | Bin 258 -> 0 bytes kratos.gid/apps/Pfem/images/folder.png | Bin 262 -> 0 bytes .../apps/Pfem/images/gravity_vector.png | Bin 445 -> 0 bytes kratos.gid/apps/Pfem/images/groupCreated.png | Bin 422 -> 0 bytes kratos.gid/apps/Pfem/images/linear_solver.png | Bin 294 -> 0 bytes kratos.gid/apps/Pfem/images/logo.png | Bin 16971 -> 0 bytes kratos.gid/apps/Pfem/images/logo_1.png | Bin 6332 -> 0 bytes .../apps/Pfem/images/meshingStrategies.png | Bin 246 -> 0 bytes .../apps/Pfem/images/modelProperties.png | Bin 1938 -> 0 bytes kratos.gid/apps/Pfem/images/modelling.png | Bin 268 -> 0 bytes kratos.gid/apps/Pfem/images/parallel_type.png | Bin 335 -> 0 bytes kratos.gid/apps/Pfem/images/parts.png | Bin 287 -> 0 bytes kratos.gid/apps/Pfem/images/pfemData.png | Bin 264 -> 0 bytes kratos.gid/apps/Pfem/images/runSimulation.png | Bin 1887 -> 0 bytes kratos.gid/apps/Pfem/images/seeResults.png | Bin 265 -> 0 bytes kratos.gid/apps/Pfem/images/select.png | Bin 289 -> 0 bytes kratos.gid/apps/Pfem/images/setLoad.png | Bin 283 -> 0 bytes kratos.gid/apps/Pfem/images/setUnits.png | Bin 237 -> 0 bytes kratos.gid/apps/Pfem/images/settings.png | Bin 294 -> 0 bytes kratos.gid/apps/Pfem/images/sheets.png | Bin 280 -> 0 bytes kratos.gid/apps/Pfem/images/solvers.png | Bin 294 -> 0 bytes kratos.gid/apps/Pfem/images/timeIntervals.png | Bin 287 -> 0 bytes .../apps/Pfem/images/timeParameters.png | Bin 273 -> 0 bytes kratos.gid/apps/Pfem/images/view.png | Bin 1950 -> 0 bytes kratos.gid/apps/Pfem/python/RunPfem.py | 9 - kratos.gid/apps/Pfem/start.tcl | 61 -- .../apps/Pfem/write/ProjectParameters.json | 326 ------- kratos.gid/apps/Pfem/write/design.txt | 61 -- kratos.gid/apps/Pfem/write/write.tcl | 259 ----- .../Pfem/write/writeProjectParameters.tcl | 887 ------------------ kratos.gid/apps/Pfem/xml/Bodies.spd | 3 - .../apps/Pfem/xml/BodiesWindowController.tcl | 292 ------ kratos.gid/apps/Pfem/xml/ConstitutiveLaws.xml | 70 -- kratos.gid/apps/Pfem/xml/Contact.spd | 47 - kratos.gid/apps/Pfem/xml/Elements.xml | 516 ---------- kratos.gid/apps/Pfem/xml/Main.spd | 12 - kratos.gid/apps/Pfem/xml/Materials.spd | 4 - kratos.gid/apps/Pfem/xml/Materials.xml | 52 - kratos.gid/apps/Pfem/xml/Meshing.spd | 15 - kratos.gid/apps/Pfem/xml/ModelType.spd | 17 - kratos.gid/apps/Pfem/xml/NodalConditions.spd | 6 - kratos.gid/apps/Pfem/xml/NodalConditions.xml | 6 - kratos.gid/apps/Pfem/xml/Parts.spd | 14 - kratos.gid/apps/Pfem/xml/Processes.xml | 10 - kratos.gid/apps/Pfem/xml/Procs.spd | 88 -- kratos.gid/apps/Pfem/xml/Results.spd | 34 - kratos.gid/apps/Pfem/xml/Solution.spd | 17 - kratos.gid/apps/Pfem/xml/Solvers.xml | 64 -- kratos.gid/apps/Pfem/xml/Strategies.xml | 248 ----- kratos.gid/apps/Pfem/xml/XmlController.tcl | 723 -------------- .../apps/PfemFluid/xml/XmlController.tcl | 2 +- 105 files changed, 1 insertion(+), 3842 deletions(-) delete mode 100644 kratos.gid/apps/Pfem/images/2D-icon.png delete mode 100644 kratos.gid/apps/Pfem/images/2D.png delete mode 100644 kratos.gid/apps/Pfem/images/2Da.png delete mode 100644 kratos.gid/apps/Pfem/images/2da-icon.png delete mode 100644 kratos.gid/apps/Pfem/images/3D-icon.png delete mode 100644 kratos.gid/apps/Pfem/images/3D.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/2D.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/2Da.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/3D.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/_2D_.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/_2Da_.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/_3D_.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/analysis_type.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/bodies.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/body.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/boundaryConditions.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/cancelProcess.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/contactStrategy.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/data.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/doRestart.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/folder.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/gravity_vector.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/groupCreated.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/linear_solver.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/logo.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/logo_1.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/meshingStrategies.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/modelProperties.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/modelling.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/parallel_type.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/parts.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/pfemData.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/runSimulation.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/seeResults.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/select.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/setLoad.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/setUnits.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/settings.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/sheets.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/solid.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/solvers.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/timeIntervals.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/timeParameters.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/tree.png delete mode 100644 kratos.gid/apps/Pfem/images/Black/view.png delete mode 100644 kratos.gid/apps/Pfem/images/_2D_.png delete mode 100644 kratos.gid/apps/Pfem/images/_2Da_.png delete mode 100644 kratos.gid/apps/Pfem/images/_3D_.png delete mode 100644 kratos.gid/apps/Pfem/images/bodies.png delete mode 100644 kratos.gid/apps/Pfem/images/body.png delete mode 100644 kratos.gid/apps/Pfem/images/boundaryConditions.png delete mode 100644 kratos.gid/apps/Pfem/images/cancelProcess.png delete mode 100644 kratos.gid/apps/Pfem/images/contactStrategy.png delete mode 100644 kratos.gid/apps/Pfem/images/data.png delete mode 100644 kratos.gid/apps/Pfem/images/doRestart.png delete mode 100644 kratos.gid/apps/Pfem/images/folder.png delete mode 100644 kratos.gid/apps/Pfem/images/gravity_vector.png delete mode 100644 kratos.gid/apps/Pfem/images/groupCreated.png delete mode 100644 kratos.gid/apps/Pfem/images/linear_solver.png delete mode 100644 kratos.gid/apps/Pfem/images/logo.png delete mode 100644 kratos.gid/apps/Pfem/images/logo_1.png delete mode 100644 kratos.gid/apps/Pfem/images/meshingStrategies.png delete mode 100644 kratos.gid/apps/Pfem/images/modelProperties.png delete mode 100644 kratos.gid/apps/Pfem/images/modelling.png delete mode 100644 kratos.gid/apps/Pfem/images/parallel_type.png delete mode 100644 kratos.gid/apps/Pfem/images/parts.png delete mode 100644 kratos.gid/apps/Pfem/images/pfemData.png delete mode 100644 kratos.gid/apps/Pfem/images/runSimulation.png delete mode 100644 kratos.gid/apps/Pfem/images/seeResults.png delete mode 100644 kratos.gid/apps/Pfem/images/select.png delete mode 100644 kratos.gid/apps/Pfem/images/setLoad.png delete mode 100644 kratos.gid/apps/Pfem/images/setUnits.png delete mode 100644 kratos.gid/apps/Pfem/images/settings.png delete mode 100644 kratos.gid/apps/Pfem/images/sheets.png delete mode 100644 kratos.gid/apps/Pfem/images/solvers.png delete mode 100644 kratos.gid/apps/Pfem/images/timeIntervals.png delete mode 100644 kratos.gid/apps/Pfem/images/timeParameters.png delete mode 100644 kratos.gid/apps/Pfem/images/view.png delete mode 100644 kratos.gid/apps/Pfem/python/RunPfem.py delete mode 100644 kratos.gid/apps/Pfem/start.tcl delete mode 100644 kratos.gid/apps/Pfem/write/ProjectParameters.json delete mode 100644 kratos.gid/apps/Pfem/write/design.txt delete mode 100644 kratos.gid/apps/Pfem/write/write.tcl delete mode 100644 kratos.gid/apps/Pfem/write/writeProjectParameters.tcl delete mode 100644 kratos.gid/apps/Pfem/xml/Bodies.spd delete mode 100644 kratos.gid/apps/Pfem/xml/BodiesWindowController.tcl delete mode 100644 kratos.gid/apps/Pfem/xml/ConstitutiveLaws.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Contact.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Elements.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Main.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Materials.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Materials.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Meshing.spd delete mode 100644 kratos.gid/apps/Pfem/xml/ModelType.spd delete mode 100644 kratos.gid/apps/Pfem/xml/NodalConditions.spd delete mode 100644 kratos.gid/apps/Pfem/xml/NodalConditions.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Parts.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Processes.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Procs.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Results.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Solution.spd delete mode 100644 kratos.gid/apps/Pfem/xml/Solvers.xml delete mode 100644 kratos.gid/apps/Pfem/xml/Strategies.xml delete mode 100644 kratos.gid/apps/Pfem/xml/XmlController.tcl diff --git a/kratos.gid/apps/Pfem/images/2D-icon.png b/kratos.gid/apps/Pfem/images/2D-icon.png deleted file mode 100644 index 94bcc789f74208e4fa8615c9cda8fa2012e7ba8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3-oH7vA{>q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6&VEhgt-3y|6f@?a$^6Q6UVPbg*UHVeelWSSBARD^XG1B zZd`Qj>VsW7Pk;RQ)yK2K-a440Ue4;?TF`h1tAr-gQ^jY#9aNuAz)Hy9@`S1Vj z0+W}MGY=>$JAUCdx*c=nW~AnWi0Kj;ifuCDZ521z)~yznYH|zpNOb4YTzFvJ+~A6N tmz-BPE*2~3z0LiT;q>eN^EOO846lnBr-rhwR{+|>;OXk;vd$@?2>|aWVG;lU diff --git a/kratos.gid/apps/Pfem/images/2D.png b/kratos.gid/apps/Pfem/images/2D.png deleted file mode 100644 index b7ea880e06699fac5268602666d82352aceae74b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4975 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 diff --git a/kratos.gid/apps/Pfem/images/2Da.png b/kratos.gid/apps/Pfem/images/2Da.png deleted file mode 100644 index 177ed86fc7ff3f99c095bd9ae369293743b67bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6018 zcmV-|7k%i7P)m949e{<8s!iBui3Gb~hwm zvPV@m*-CaPlQ@@CajKk!iXCIiiI2n%#s<7LH&}o;By=EjjHDS!Gt%5wckdrUgL*Da z52HEI`&CUz^X9$o*I)nM_kHhs7ZF7fa?!k#RDi)f@8<)@-ae%SU_0cuT-hE^abBO@cTS&w{v{l<90YdzZMt3 zJMvheT|rSv@6d#!`DyZ%EzgKAZ~$ab(0jv4S{FCauB%q&Ji8hq=;pz zC^;x(fy8%?MUjUP^ies{?syCnMj&zwq0TWyR1So5Ltp@oK#boVry7SM!cg5XRSW@Q zErQ`GaVSwpP*BL%IFsG+>=>(3s0yGl)=JX6 z_F;IP=B%h+;rzz9zh_fjQ$`$)jlIet6VMoHP*l4P8e<*QhH9{!GQK(u`rx+pVeI-b zj1RTK@3y9htU9Rll`vE^0RVI*3vZ+sB2R5dUi}As@Y)CAciZ3?>43}D3x}mGiwP1j zn*k5aOlgH zKwq{5E^7}ukNy%q*GO^~O7ncAsd`s8JqByv8JI4;4);WV_NgF}h>tT%Q%4KtEl17D z$DuLS&7R3K)}e9p9&{f4ImUWV$mdN4HQJ4BwcgNZtC||rGJ&l85u;{*Tqx*y!=8l6o=YSTJH(XRb z6V4=t9NgX@f&tHsc{!>3^tQa1kr&Xg;RhgWUc&XvwwVD1);=!-~)T3=F4C`FjcfINbrn z;KkGoz}T=k0?1c#q3yd;<8V1(?LUp;x^-z6eC4u7VY>7>JT6DduPp=vaM`W{0Gy+p z2zVz?V^J4YL#Zu=N>>hrN|zGyEZy`YocZHF&YGNfL4@5MjN7l`7y^-rbC#LY9e`G? zNNL3eF8(ntafDz1qt}nYF>)1-k*g6tQc3-KPi-(e$AI~^~Ane@@)c$#R-NGk(p@;FaS6` zd`L~D3PXLD(cpDNv_Qv5C;D1mL|^C0xMgu{FXmM@VEIG4WedNwemy!q{!`imW&mJ! zd0}t=2)*qeL9bDvYQ=U`H$9fry{elYgQe>bM$D;=^#lSuJU)KLNDebK=Q!TS=}vtl zv+vv=LjQXlW}JU(Cyu`I&A6lqC(yBdk09W6$ZoCK0K3bJ%g6TO^!_K|aU?g6wfKQu zDJPA~!(%2sa4f`x)yTNrA2%Q*7rhtWnEc!F5^Yxy zY;*`GUP_KUx{`&MSKW}3dU(A-xIBr!UoMY@px_u0p$#E3b+=bf(E_V=??j!PuQ=LZQ zklTnjy3)n6^7mZp%IfE_bRLqGKQF&9Ga5(CVPmCHbFwr}vN4l%!gT$->@szC)TgzM z9Lr8F=_DjKiBrE~v#k6hT}QyqlAcY~b-mso{GM^ynuJY<{a^r=&2dwuQgK+Y_Up3B z3|~Evn0&ZAdGeH*eZQBk=bWipx$$3Q4+Qp|dl_S+L%5ycvh`8o#3N1F!UtuQ@i@%5d~9#d5rI?b zW%k0-6Q3fvHprO_X@p<^=im5NPHGUjS~XQ`=5H&FlMHD9;OuK(!}!ER&XFdWiDv0G z#WzOB#oLZFZHIT~tY0H{&^E2ZD2c2c&oowT`d5_JKadn@u3tHvvySfkrH{x9HJH=C zO-j~w$LA_(3JZ<0{hP7AQ|YYYjUfkS@@PfEWY3U8t# z!P*_N%UFAlr|p>qk$__oSXY%!sPmOrzIjhlOISKSd=|Zz-bF6MP*N$o!Po{`;P#~d zBttHnNVD?M-zK#}^L8MOI$w!~P4c7LL+$TmM!RN%(2S)u_~gbP$|j8v4B*@w--OlD zn|kMuQOs)oa4fv{+p?cO;B~;%aWu_ui)06JjHNYbdgNEK$DTY6GcLZp3lrAioYpiN zjRy7WzLk_u*K_)XjMbat7>FzbF%!68rwh%+K>DXJT6B{chb03$gPW^ zd=WnJ;J+nho*g5d7`XCo+Ml0f+BvTL zFG4Vo$+<<7-EoBiBFCk-J6^tMLsFyxfO$(E!n`F9-EtjT|FR3?!xvMmzN5=fq0~ZS zs6%1Jilnz_nU1dG&%rU;8S{R#+8rkZ3PlDq&cb!yOv#JSHZ0$~8v(BaUdK(JD^;5* zO~+`@F$`zHMwlD{L_$bf<{Vco-;!0NN%b=;RJxQCC7d*Ehku;W`Qd~R5Zs(|oR%R6 zhEsteIgIt5K-=LTXF+2_s5>4c3=4+g=G2Rr>6zuuIi5A2A{apT$=|@z`F>WsBVkg< z1UcH4vlot$PF($9x9l}mY4LH=XQ(LT5T>u?MT`%g&)Pc9S&hT6id*`9HcXPubQb*= zn&BGj&R!EAHsnBcP6pt2+c4I90^>s$VeLJhQ+2=L9CILPaJ-yjUFbWvKPw*GV>iWp zW{=&3zH|GLr#3=YvJj#mAWv;f>WCzlwFjagz&X|pzuOAuSQnh5T?qOd)12{~QvT_6 zj>k>sFm5`RGumLFwVA5LXx0j$siPt_RTT1kL@EM`WPKc-Fl^QYyeP6AB7hv-bbx}I zDvF#Y4%Igl$!Q$Q9EyZ{T%?DUglV5nS$h4)16oOQPOs}OkU zv5xh3KLum;%|q|`pbsCvwj<#@cW&P+$$NVLlalYc(j}-~u@xF)U1Vz$1lR^XM%VG@ zP`-F$#Ce+0>bvUE=fQHy(06O!8FU?gE~1XWtqPo;o}rluZ@~s zTpM`~)3sC2LlgvwW++|oKRN*3HN`CeAP zUh>`C`F?~(3MZzaa+M@aW2ljkFT3J68PqrN1fwro5;c9G^;Jo0pVB%E%S8yj^JrqL zK8;nYL71EE$nUn{{98M5djFF+z5hwH9o`LV-x*l@&xG<=x<80ok7$~Y5Bel0AIEG& z<;%jz__tZ<cI&ACz{p?Z|zl0kD;{wLCMP>zIrg>-8l2qMPc2ux4vmvRl~XvsQDRoY z&oC&ijlRCx()|Hk)*eY~uWH;T5%N&mpOdavRpU13N|(%-&tYkk)I(#egGyT_F^`U&CAV~7X^25?hoXjvsr7e?8#dM5x!a3R{X<3Ey zSHvvecmCA~AK~V2FUva2-WE19kuVIFtlxzd4?l~tMW2ehLNmM`pIHAr2{FQdk09Sj zr?fFuG~FH7g&-iidw5a~s)ktuwtb*alh>a?YohpEA$Wx3tTm(_}L5;}q4bk(d_eXx9xP zoe6VXV;_jY2RtdOPv_BJVEF36sJ;YY7%aGJ2dbOC7`1Ho@!v#^`}CiGC90;4r**VN z3nI*sweNJ?9$C6^W5|I``;Y^t)JNFqh7I2b04P+_BLxjre*@-hgh1Ff%O`04=|tL{X_vd=~I_{tY=fTi;g{GKtXmh+6kHqZh?<;qan zSnmn=J!28~Q0eD|1^%vtu02K4^2Hk^8k7&X;Ij5ew2(?$7EzB`hbV#&1T&^_j8&^6 zTC~Pk2aT~VVhIY%DWNvhMqFdT-CvLE+;U2NQgsXZ?67pbk8`g-g}!qyM`)nZ7(2cD zT%*$K_+1I#({8>bxlhHi&rj>&Mc)`RoPcw}$B7jsjRkE{eOQcVsYGKrMmi-v3Sk&j zF8jhQ*VEE<2-g1eY(PET0iLeuCWczGE&!OZLC)~rQg}S1sAi4C8J#pe?@!Y<-;m@V zYI_?#r$u5aitE-*rn@XN)<>x+MZvt~u=bxu&}R=beZ^tgG5WY(czUdSDqVT>p54I5 z5qmuQ-L_Euvt&U5nNFOvcE=5s(kQLRVTRp&Nvigp7720k)CMRurSQ2dD6RiHNsHuz zzEJsaKcoKMf5PPh|2|`#)P@>VH*H6C)Ak!LYZO7B1N!oY2tP;ef$|X~)s{p}pBQQd z!p<3WjI<*gk&z*X!mzO^`|zbG{(=R5w@s2(FmE|Hr5;s{(!oU2#Xn7RZeNr9mai*= zzHF(iI_0Si(3LENp>kyeX~ud_B&5OQV2boUmnCB0)Y5e%X1RiS%QB>IGUVeFR;-l9 zZ(!Mbw0zUAIe7U^j9x!>qgUpZ{N}K<&-m==>5_vd%}?Wn%Eqmqt}xV zJ5CTF0E|f2=20XHL4ZKnLLm!5zsm-K5e@_+e9&iCs0xf!EEF>#;2j?VFu?$r@H&P~ zR3sFM!0Q+uBETpE0Ty$VY3BhIS8x};gG6IM59{Z3@2>M)9EEMs;2Rsvg_n4Dc zpo`hQTO1Tcm_7EPYg9B8@nE;KohQJVFaEb^o9b2l#cpZqprWCO*PF7LS~|SIVc`gopzGeuBNj9S09nUxy+bevfU?Zobkd zun5hA4H4&wXT+X>$NswI+K2B!6a^|SiYbisojM5tZ*AW#4o;;>CUR}vBfjzK(`2!8 zq_b3C-f%Y+*<6Pxjt{mTb=!Jh-})0#a=>}S3_#+>bLMMD5cIp;hRRj<5r)m90-S@C z5qSUD_2ci^1~2?+>rccNBX}Z4*;KvxDWZiM+mz~(d&?Gm>cKp~?ME1|-8s^6!8&;M zH1Bcm+wxN}<}t}}i30%5J4gX3#AcDlYL%``Z>U_gOsOraibWuX;S?YwZKLjlFdRwi zqA}`-E0>OautRUbl<3;yOgqgzs1D7de2-{@rJOBUy07*qoM6N<$f;{|)8UO$Q diff --git a/kratos.gid/apps/Pfem/images/2da-icon.png b/kratos.gid/apps/Pfem/images/2da-icon.png deleted file mode 100644 index bff5726c279dc6fd8c8954d392e90ec592fba755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmV+*0pI?KP)f0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh7u@%539tXfxty1C0S zEn~>X)^>B3uRRM-1E0001kNkl6JC zK?q&gr(li}amiyaa|PZ~Mzm#)+bGmzF0BJ>4yxPL4zRB1HtRg#IqZ?zdhY81K(m<7 msoz`16uJJPF*jTIFTenVtpcb7%cUUz0000q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73l`}gt-3y|6f@?a$^6QsPN_!$FDtk{K`-_dF|?hA3uIA zE1qs|oi~5(wrf`(?Am!cBenMv;{{`&#zapS$B>F!YtDP~9Z=w431IvABl~^*9j3f0 zhV;ZUlaDmM@T%Fe(bMvih!4ZECZE@g{bkJ@Qk{*(E$nO5Cp>o)S^S>S(!pxut8=W` v>;+BIHuFCIP7UeTSa3D@t@Z3$CLRXXe8v;GRkBGy%NRUe{an^LB{Ts56Qp9E diff --git a/kratos.gid/apps/Pfem/images/3D.png b/kratos.gid/apps/Pfem/images/3D.png deleted file mode 100644 index 6b418ad8e99895147b932d4420491f9af67a8c1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4907 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 X2tv_lMH^0z00000NkvXXu0mjfM6nEl diff --git a/kratos.gid/apps/Pfem/images/Black/3D.png b/kratos.gid/apps/Pfem/images/Black/3D.png deleted file mode 100644 index c50b7c2f1c36a141bd7821324ef34bf7aabc60a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4088 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 diff --git a/kratos.gid/apps/Pfem/images/Black/_3D_.png b/kratos.gid/apps/Pfem/images/Black/_3D_.png deleted file mode 100644 index 405a7dc000657a37ba804c25170acf801a30fdd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2988 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 ebVVFH+Hvlm()34EUj{hHRNpF4t diff --git a/kratos.gid/apps/Pfem/images/Black/analysis_type.png b/kratos.gid/apps/Pfem/images/Black/analysis_type.png deleted file mode 100644 index e9518e1c7550a8eba3d04e03eb4d1ed85e7d2558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00DDJL_t(I%bk=lOIuMGhMyx1 z6}yx`5#rE697BqWxJU>60bTnClv4T=@(YS&4Nj#?K(~OPrIdz15j#{f1VlQd5NP2R z1YLyoaXD$P#~UNw>74g{&-=aSJ0BPB`Kiy)z#4D{ z`~)t6dEl*j5klBkw}A!VTT%5B^@sZUmV~ovZdum@TO}ORiY=>Ph;9a4qF*5rlUzM?mw%a#`G&w8*xALuP^bvhdFUa{iQZ@*mgAN<*=HX z0ZgS8LkKItIj|bV0ayb50B>^AzoW$za0on9t2x0Y@L25w$G{_?8$!rmvs%>HcL~;s zcoxmlGi|k<2b$_2Mjv4%^-w)f>xn@vnlGo$1NBRSEvG}Jmeud-ZqXb(i6h^;QQ^Pl zr8-oK`J0XPiyZkH4Y9q$ZV!Bu3^jEDdb21%W{HFi_ N002ovPDHLkV1gB`(YXKs diff --git a/kratos.gid/apps/Pfem/images/Black/bodies.png b/kratos.gid/apps/Pfem/images/Black/bodies.png deleted file mode 100644 index 76b337649366a9ff4dd9081b308c0c31f36cf116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00H+&L_t(I%bk)xXj4%X#((eL zo8+Z!Xbp%;bPyfoTA2&qE5bkhvt@M?)e289Y0bW%Yh5u~Cb zJc%wsKyXS@a8L}^Hs;;ua+OEv>)@I0x!?EQ@7!|^0M%-h{|z|i!f5u%By* zT(up?x$iiRb{wa(a&KYpwX+jiYi$83pxI7j0>A@OT5Am;?6?{+uB*VLIqv~l`F#Fp zOv#+Oq&z|&3G6X02~QnRdXx0@;y z3d_JPVAM3J1Jr>>zVBboPL{p_M}R}XXP{{wIjGLh-`D}?SM=6@_dL&=1r7k0fa}04kW)&HpFVf-wJH4yPyx!o;r9=2=hLa7 pHR>;4Wuj^?m&=j=YBU-E`~m6enle>t<$nMG002ovPDHLkV1kg27`Olc diff --git a/kratos.gid/apps/Pfem/images/Black/body.png b/kratos.gid/apps/Pfem/images/Black/body.png deleted file mode 100644 index 6d2de31d2ded8fc5d8f18a914e7a83e7a3b92230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 zcmV-T1+w~yP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00gy3L_t(Y$F)}7ZxmG&|J{$- zo!O7>7u2M?&@I(=`IK5V#e^sr0zm?%5nqV-FG%2#2VbqR555TrFDAy4XyS{aU>YbP ziiY5(wNPN&rEZZA+u3Ex&dkot9Uo@9U7%fR0_SCB?)jZF=brOB_gpeJI~$9~@#4gF zT|$WZ@F8(s_uSdD4`ye*RZs0Wjt~NX5JCvyIF9SO-l8YAZCjQlgs?2jwr$68s@1CZ z;;9A(2FQ^kN4^*w#EX`Xk00lpa{!Dn2Y};%F*wd5gfZsrqe0sUUep4ONbZT30W9R= ziN8Bfeml-n;6|dECA_r`oqJAGntIv=L;xGeJA-j z^M_k=xiS+j0Bmk?-s_I1BmP?C0Oy?b_4U28b0+{z*Z;hF^|QgjiHQlXh5$;X((ix# zVe0zYbUGXg0jTKu8RcSai=Vg-fD0od)Qh^J>(i5yCr_U? z4CASS7=|%?@#4_XkXkNRbbU&#em7-U?h>W@>ZU$1t9$w9oKx@3tXA_=Q>9XA$#QF& zmYWd{kv>dmUIjN`0;k>U)}POR*TxU?Vrw_YeJ?-vowpPV?+ z)zu}-ave{`oHZ%WbDtPtUHSRIw(}4j1pAQc1-Log#+q-ku zt~pipb51!|RrTwkp^=dh0Apig+moFaZkIQ-%5SG53^0XIIJE?(%hg}A; zdkpbpPF24-bLQ78S2k|k7>!1&hEbTF9vvO6cYi*g&rIJm__{AgD;vUEdy7BlqmONI zw`^Y5c-3W%ndHw_qfjUm3WX&L_0RqLk1LgV+3^uRuCZ~=uJayvy8G$EX}%&+RrRr^ z6^zD{c-a=C|7$FnrfEKNG%hFH;~ycUK69HlPCOpBSKxP%*DDc1NOs#ciE|EAt>?#4 zbA9aCF~%5UtdTH{PQ&5w!TtN++OZ?NZu4@ED3DO3{&cMlwa4~s_UO^0s;Z8UkKeg- zM^#mCqK1OOwq$ZcCKHQ9ve|4r7JE>!-%a6`suxXJGi(<6byxefdBvtSQX%V6QN!`ST=0aa%_MCio_yv zXtg3SR-5ud2%gL30Mw^-cW37c((bHQ=xXKJ<9qS)kjv#>=EdygT_^tom)UW<5)LaJ P00000NkvXXu0mjf5ju-s diff --git a/kratos.gid/apps/Pfem/images/Black/boundaryConditions.png b/kratos.gid/apps/Pfem/images/Black/boundaryConditions.png deleted file mode 100644 index 7a53439e5dfc77a9560a44fc40a5f60bc7332481..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu@}G$@BXGpwJah7sn8b(`P5|aY)0&9vbHfR1N~^xMPI~R5GPlV|DBr_R zwIS|p6{CoU)$7|X3=QlJyF2ETCX2tH+mOf5XDPZkP~gn1!K!_l4vllZSMW6<3dUA1-1BAx{o?H~0l+U0U_2E(lUs+YwLtbdpMzJI7lw>X|5 R>@3iK44$rjF6*2UngE@MdpH09 diff --git a/kratos.gid/apps/Pfem/images/Black/cancelProcess.png b/kratos.gid/apps/Pfem/images/Black/cancelProcess.png deleted file mode 100644 index 6f0580957a8bd6528433de84344e100de1f42522..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1526 zcmV{*M4*=O%_>Pt$u zG@3K}%${%EW@asMcNUZT^ttmaz1yVoaU87dJH`O+p2rSu`L}y+IN*lkSOPH2^1D5I zZsfDuw}`yC)bj6r{|HyFW~htgmCbOGyqG!W8P?ew;3?&?8SYLp$1UNOzzs74E3jlZ z`TcEo-h%vW`ma9o>`b?&?pXk{3e*s<@A%#TZF>Ya&=|3zK(ri-5=Dg&O7oI?^Y%xMizDv1 zD^hwpi6Y`yviyYuXoujdz*Td+sACe*5Cfr6H;qbcC?N>_n|e9?^+Viw?><6L`M)Sp zAgFY;7!?i5*ys@7{m%XD9vwne5e*p{V(vu|7Zg!c>lQ+u*tfBdsi^~u_4o4mox>cM z{305Z(36D=l7Xt4dth{QGvB)ZZg%uGc<8}H>>e2+sDMTU!6jrtf}$Ff7`t2F#y+Md z#~J%jZ{_p7JGQa^tG5w?5MqX_l+d8uFt&wn-gl6Jpa2X6<)Ooe7#kTv1*B9+RRKj~ zP(ln<>+SF3-idvTbU-`dcT8ls21QGk>>S;~H>M7-sfraU__q&FaO2393@lBpswhE` z5ULhpKoHh?_U_om_&v8~&4VyJvXuuX?_iUz{>?y8uHU^Q`&L6`a#iWpxM&sp_V?3V zc+V-e8hqOg+j!v6?Q22-e)Pwayf8hB3a9|8hzj!X$yfa18yC9|4|5tD8r(C!mz{k* ze9-47Pd(4`&&*(!Pp~4@Cz*-{LdZ?q{%!a(-t_@xH7_pyeRQ5|9#_N5@HNc`^jbMG7e zixYoi=ENy9Xa!tNYgJV=MkMB_))>(ky96kj1=Fv*eog4?r7O(7a2g3UM6`x>Hq8=XU`uO{XcEa~h?(6bv+vKz@ z5jvw<%NwYn3=R!&@Y8$Ng}&WNYyNlhu3_$)x;<;DQuif1Yuu=TL4@lzf0zTG{K&e{ z$7j#-@X=>jSm%WM!mjNcyzfg;CJf?U`B|gX`!<9?|3E+EAKlG{b*y{z^c?4A&e3YN zc=U`xEEiU0wnG!LOg> zUkh*Lxphic?&BD0$Co~M>GWAnU4EyUcx>(h^JgxsX^G}ilV2S<&iSj$74(O{ImX3> zw^yC7@69f&j2(FK?`N33bcLtp|G6%-{j`>r`Q;;jVD|DAe*EZh{{6;VYtEHFpMTT; zb9pf%lTnyqMb3SbIjNOMmaxJ|Mb4E|kw__#S_!lK-in;G7v;Q^yy}Z&By)!Dl|S+@Y* zz4%JE(FOJ7Rf(iGUB8w7jeVq)uvBD|mL-W5R@O~cf!f7dB|y8LD(kCGZM`T#(rtmS cJ+Pnu0f-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu?NO#C8|RfXSXNjv*GO_f9;>+n^x8qAzyfJYUWs zEuBMpYYwTcIHZ-)B-L>Khow-GkBH*E_9v5Ozu{x@*v_bykkx9Tz#zE6Hb|DscEr~7i~}8dAO8QZ7j2p) zA^ASRlwnn+E;I9CFPmS7B_$-965BQ;1a6o#apFea>F@sk|G)S{_sn`?XI+0Oi=L4Xsnj^a!Sli#u-@q!dQZK@5CHErFbKDn>6t^}u oK2(#leZ|AWV|7DFG?IZKv{iSL(>IR{pqm&xUHx3vIVCg!0BSB(5dZ)H diff --git a/kratos.gid/apps/Pfem/images/Black/doRestart.png b/kratos.gid/apps/Pfem/images/Black/doRestart.png deleted file mode 100644 index 4f5a443ac692102bac2aaa2ac8cd8a1df8d539bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu?M#_aW0FpwKc;7sn8b(`P4bZ(O2!yDIb&bhjq?RUn>u32+mc2xb}Xr5DZ WZ~d3Om4ARPX7F_Nb6Mw<&;$ShbY&s{ diff --git a/kratos.gid/apps/Pfem/images/Black/folder.png b/kratos.gid/apps/Pfem/images/Black/folder.png deleted file mode 100644 index 9b967fc382f65f6848cad5df68f8749ba232a7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu<~D@u7sn8b(|e~Jpftp zS*Fyunz{PYo2~{uhbdWNW}oX_l}=vrl{wgU(@$wZ{I*x+mm0-^Vh8{L diff --git a/kratos.gid/apps/Pfem/images/Black/gravity_vector.png b/kratos.gid/apps/Pfem/images/Black/gravity_vector.png deleted file mode 100644 index f4fa5b90a6bc0ee0296a61e511286fa7a0a669f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq}Y|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfBW4*PQ6sJIP9Z>{gPtyqAr_~v25;nLGUTyQezjiW z;q(PgJ`Swh8yLQp8!(DW*Bs@DH(-`!mEOQmSZval;@WAq$E8vA^_&~~BFcFF%$<;P zoXJdOx5OLaH)~XW$0Ru$MKq|D%@(+meD6%54Fd-Q(+-KgF7*frIoBr)39-HtOrE9v zSfwT~artg*$#+>C&(7^*y1^7N@ybf$cWZw)J`q@+uy60rsZXr?cKz@)VyRmbIQt88 zrrUYe{}cA@+j413$gg0aZyv zK~y-)rIfErL{Sihzp)BiM5|?!R*M+?k!*s+X0g}|wrv)(e}L7Z25rIyQCQ3yL|DuV zDkuoTy5+OnC)dmK8N6_LbMKj%ch1bbhsu9f{069tz-o5&1e`_0d+9q-6Wmruz%?+F zL2JN^+Ha(#Zm6H?MuX2$@@du5&p~xt-EMkWot$f6B_iI{H{cnVRtH(|BtS%50=Mc( z$zqf-SkJIybyn>q`>n#&ah{~3c9OlW?q^sPoF^Wn=TL1|a<-BjBH{|zR4>#Xa05J~ zU9MALd7^fBB9?$X;02firhu-xpk4sy$#uGvb5wL-kfcp!_I@F2sJ6=i`|d)LQk@s_ zI%W5t-z|=aN8nZ6N#~CrRACpmFB0^DgEDJN9aqzu=nv99EPPMY;a_9lX&C#iI;tJ} yf>A#u>sCciMI4t6X#5pa%z*jovxtbhI=?R&?_EG4ml`bq0000K8=f4h63`&GyEKk=s{c)6Y8%brlA4mzZb^>@TE5sb0~g!8G}^>Fdp`tPxkv zbt!3Yn*D2f-fvIq3qC=TCjM*(^O^-uJe%Km)6{~$Xi@0HCl$3;ZSqQ+zBVcqeKHAq zDpeZwmbZ6Lar`!~zgv#TdZh99J2Rbo@HngTe~DWM4fGF6Gl diff --git a/kratos.gid/apps/Pfem/images/Black/logo.png b/kratos.gid/apps/Pfem/images/Black/logo.png deleted file mode 100644 index 4d0514b9d0b880796d6735afd37979864a5486da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19177 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 Eg4rYl#{d8T diff --git a/kratos.gid/apps/Pfem/images/Black/logo_1.png b/kratos.gid/apps/Pfem/images/Black/logo_1.png deleted file mode 100644 index cff91a03d148a063b8389f40d3691bba95f3fcbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6332 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 diff --git a/kratos.gid/apps/Pfem/images/Black/modelProperties.png b/kratos.gid/apps/Pfem/images/Black/modelProperties.png deleted file mode 100644 index 0662b19598d4a6026973e3dcd0f3aac8b7aa69f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 zcmV-O*)!`~^UXJFuMsn2A($N-8m6+mN^LO=G<(;y0n9A64NPO*EIt@uieZEx2m#gD zw{z$HJlWeVGFDl$pZx3{mdk6=ph&c=iW(r%uv!GGeJfxg#I`DCMo_~vU>d*_RRvAa zpct{g|Al9fUmyF}20j?5U#VGiAOo+qbHK3PAJjGgt7<)XngU7)0Z=rgBuldk_)R_s ztOdt=T(HQlDnT4#h7(5!h8c(xLa>_o3b^WyUX7aOa|4oS~AC_{8Tcu6pfq(CCa>oM2|? znj#n~LRZ&jmKIl7Tv}z@1HF9zmFIFh2j4ox!1+-Mg+|h#ESHyXq^K&QLV~#H%`JP3 zBUh$! zOKQA*^aS5{WIToG%1l~+9;$!ADQ5f|2n}tM~?H?!E5Up5Mg3ufxn)2q#LU#gT)dqaad|xEsk)hr<t)@NK=i0 zNDZ7rR7n!&@ZNKJdX60(n`!fo``cSN)3gbz#3Zhvv4P#)F+?t_aeQCYEVjJlUOjO zre=9>b(Ii|naNoIu6$bhYyi{Gc0>fM-kBt5AkAp49tA~7E6Q^DCLs+mWz7==s{_1a zJrkYfIaOphX=-T5GJLQQK}ln7TzemiccNPyuzKUSUJB}*kZ8YpMRNP^?xCf%KnMX1 zDVi!F%PKY1EZfu^sCrq;9jM-?YO~U;Vrd2>^$fiF`T_n2Ef)TUs_Y9`00000NkvXX Hu0mjfgSkh@ diff --git a/kratos.gid/apps/Pfem/images/Black/modelling.png b/kratos.gid/apps/Pfem/images/Black/modelling.png deleted file mode 100644 index e67b0a10fc9698c5b27b79ff14eef241939d84ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI!Sw=`)bnoe@dx1jtJzX3_EKaYTY{+%ULBRDt|FxA@ z4n=MF!sf*FTIRs)3NC%c8x>64=LH1zIC6QfRyn)<=ENQAUbDqYwB41wcVPbh1N-}z z1YPACOToK4eymMI|c{G zBC+N<%v+s-e!4L`j9Fs$>#0vJF))NN^f@x@{IYfC>`%)YtF!;~?ue3({vPb|xleqp zaa!vX(>AHMXN#UO@9UJf-8c88!+|HfPDQp4X1_TrwYcS9>-#tcZU*s5v&HATs6AtJ fzwdGH?I(uI8*jJIFTMi|3I+yGS3j3^P6|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfBW4*PNnQgLg;b!>22U5q5R21SCvD_Curyl?0I&HC{DnX9g? zx;68<-r|j$3wU*O_^wVrE63r$9pioM+eMbM_3^=J~67 iCYCSWI)9Bpdj7Xpd1Y%Zgxm(Yox#)9&t;ucLK6U}*lkDv diff --git a/kratos.gid/apps/Pfem/images/Black/parts.png b/kratos.gid/apps/Pfem/images/Black/parts.png deleted file mode 100644 index d25725f106564f7d35db32d8c482d9d68f5c0adb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Muv|vffe)L+@3!7X5)Sx zPifDU?VhWBZd=S@T5QDMu>0sm#$T$%JWUCI)fkJE-#0FGy~Mn2Uzw9<=aNU#&p4k= zn&dw-jCnF+@_G9dhc}b%G^}&~lr&4laKmShqz6x4ZJ!`gnU<8Ua#nS&YOc)mY@gDb zYR|sJo@Ud@5_*vIM6zJ3N85o_XWEx7cbnvNUPtNvp1N@UbBCH`nf6>f3G^0&r>mdK II;Vst0D_Qn(EtDd diff --git a/kratos.gid/apps/Pfem/images/Black/pfemData.png b/kratos.gid/apps/Pfem/images/Black/pfemData.png deleted file mode 100644 index bf9bc6821ea1b26d0d6ee2dbd0c6ac8c1fbf120b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdvy70U^6%Vo-U3d7N?g^UKqq|DB^nlUBbHs zudS|>CVW%gpe^{Kj!AUuA17B;xw~Q4u3eut)9YH(ezD2tTJqv=NG46%v&YiYFYdwo zwWrj#sUP5ySb8DqQjx%cGVYx9Pf8{&6I^ia*ldO8=e{lC@Yo&RI(c83`rM^840%EK z|2*{Cmf!gPv)eXn&&yhq%e5G+9x!L&`qsr`}&c_U&^fKAkRDYi| z&9>0M@1<`3j5e6ou@+b`5SSQ;)|`taWB1!}hzHUtXfw=wN&`eFCSN1U%t o^xTAc!A7xd+qb1(zgExiH_%V~*GunjKrb_Ry85}Sb4q9e052wu`Tzg` diff --git a/kratos.gid/apps/Pfem/images/Black/runSimulation.png b/kratos.gid/apps/Pfem/images/Black/runSimulation.png deleted file mode 100644 index 37a16063afce854201b90ba80108f710944ee371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1552 zcmV+r2JiWaP)gp4o55X1oqp@ah$jvV+; zI3VR3q#P|-N`w*!!AXo!Ac=v1u?!}0)+B4=AL}0*&+g3YDh}Q6%{<1+My91!zwVjt zZ`HS|tE$D_xs%*aeee;hy*{JOaj-Iu%mLgz&mG+Iw|nk5;D+N^0x-<-+MYeTIP}nF zk)_pv|NQym+`XGYT_m4uhKuCG%rVbkqoVE5^f3HFf*_UONNuzk3Mq* zdEwL|E4A{)t;8g_}DW$A^s)(Q7yhE4>4d5s^A)v`K zyJjRpnSCC42^g_L|`zX4iX1UJwav8qC}%teW!LI{Ok@@QUfa$Fp7$6b+P?Ienb zW6AOk2hb70Gx+9BUFNpTUZ?kJ=y4m}$l^y^K-A)U5@yaz+ zmE;cQs49`5NEiZ#n(FKy+0opPWZ9d|ne0S<@}uvvL8aOE)}_mwc=0vNjIV#^5Z~MX zNb}pp^A|xB(R@2h0;-ZVuDccnG{#I%$UdMU_fEINb3ZuN0tI;I^j`>MZQgn9y_S9d zdgen^Km|}mRM4907Pz+8Bn$<4;>baEd|_(Lj`O?cQBeZU&b>Q^0$o}{M6v^mBAU;S zqJdDTZentAu6pdwcInK{Ff}p3k@<)2=|JB<@EEfjH{k9(xpTf*f8*ufA(C%HxdbGH zC_&Jm?W+X1IOfKlgS*%D+PZyn*L-V!a&d_pH|`FBRkQOd<6hlpE6!6-9^k;{joeSW zW6rOSzk!Gl0=T!ej;e~r*rYfqQS0y%`}p$QEce@f@zP0FdwoO&F&eGw9Xe)^2 zyDuWdFzVF~=Pz91oEui<#J=#QdH5W_zdZ3esU!}ylD$N-mMTb9#saRYN|?y0Q74oj zf{LjI0&_*l|qJ&JpdTq0-`C4|s)nFwr}o8{QPhv`mFb9;G( zSO54vOKSrFdgf!Gf4FizYg(eHln;p+Oh&@16eo_NLM-{%N@mzMzl~{ub01tnM3~vo z;myDOla=Kaj(%-_DZQpokvR6vgUO#8Hvjp2qJ7Pv3SdtP3(PiC(rEP z!(eT|pg&;a)MRtkzk7X7ymE^EYQLpvtEmpP9w95=;}~+HcL7zd_Xm7&Y8aPazxXk| zm0m7yO40D~>VOl!I^BSloHrC8`Dgk>{NL&ljQ1Bm;qt}@NakEwzQuo*u4M+c%>nTC z-NRF7jitM3t;O9`fC_^5m#fBbHei^aof~wKQ7y+iWlK_)wr4$jZZQ^dSJ?RRNMV1JC~WTl^R6xSq&^6Da-w0000-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0ARD5^By+fVLd4lcOX`a ze*w<})}Uo4Smr5rFFDI|PpKg`mBsm$(cz_nj7}f;HFX_W<&QoVR-O1*UxC4P!ku@G z8| zZM3rB&egBZDx6f!7W}!U=iQ=J@$u!SIuEY7)hMdYwxjFBhx0yi#l{~eR6Q=WQD8hf wul~{wNzMx?wzIZFVdQ&MBb@0R4t-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0@KX}$TpwJah7sn8b(|f0E6g;fJ<2sdRf@X$s z!}5Zej5iJi@A$;#^H9k+AcZxJ!Cb$$=6GSl+hZXLOU_@vZtwCg;s969-Z|;ZD=s~n z-=Wj6|I;UqC7V2w4+m~!v=R86k~*b9vZKhsmN8gNTI2$=Te97GO-CJplK-b9dR=FW zdDxn5Jb2;-n24c|;Wr+!pB5awd0tFS&tX9MHsz~8zH){3lmi;v!-yIEK1)5Rl^ zyx(-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu=0>?di3rK%qsRE{-7cjsN0{|_rN%P S^8ui189ZJ6T-G@yGywo>?qvi3 diff --git a/kratos.gid/apps/Pfem/images/Black/setUnits.png b/kratos.gid/apps/Pfem/images/Black/setUnits.png deleted file mode 100644 index f9d1915052b4ff4a2d89939e57ad3838e2265810..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu<~?eOvJbpwMPd7sn8b(?=(7C=coIPEN^}(a(b*EO$YD#e{fAD7KW2wal|3A&H*^#9yXD}OMo+VuGO{?nJv0-ev`>FVdQ&MBb@0MS=%82|tP diff --git a/kratos.gid/apps/Pfem/images/Black/settings.png b/kratos.gid/apps/Pfem/images/Black/settings.png deleted file mode 100644 index a42cf259604e9f8ec8f74937214451954c5da67d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPdvy700N_KCj2TLs{Lr0S?_dpN%q|y wr?$TE>-s1DAnWsC`2g$dx-B0}PwiwbU0Zbi-1~LgfqrN3boFyt=akR{02IfJ{r~^~ diff --git a/kratos.gid/apps/Pfem/images/Black/sheets.png b/kratos.gid/apps/Pfem/images/Black/sheets.png deleted file mode 100644 index d1d70413c8877e177e24e57789649cb6c5be2a48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRt!3HF+tk*dLq}YQL70(Y)*K0-AbW|YuPgf_W*H$)%jlqEjXe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Ey#L_t(I%Z-vTNL6tZ#(&@I zYN8e>5hetJgNq^lat`)s|5#3Lw*6AU(h)&;r_$?p=b|Uh6VSkL`x-&$icd$N3LPpY4yfx3iE+O4vJ+ zo|Zv?cfd7Z1h@c7Y}bK@z?kj+0?u7v9vA@rhBgznYrrHhDcc5Cfp*DM4}jZ119&g# zb!stlz)%7l0gLg&v7|q#ai*fdAaE7<(1C{k?Bz?EN0sH_CW1L^W zPf5*aG6TGbMz6AhUbp=%{CXyLE9F12y%i@=%iB!D_FnjJG6&f49|zz9q>?JA13SP; zgw8i8=_G1uz-)wlI|B3oC0oBLZ?FWePI9q002ovPDHLk FV1kGi=C}X= diff --git a/kratos.gid/apps/Pfem/images/Black/solvers.png b/kratos.gid/apps/Pfem/images/Black/solvers.png deleted file mode 100644 index 72773b5db5c6fc90648ff7ed7a583943b4071c5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEUAkcb$ibPmq zqwXg`t@#UdwDh$;u%0UFl2Hsd&|O*6ed0dgVonl%6M{8|!y1*yv#-alvxO*V~nAV&&wwM@{|m@V%x| bTvp-!HqFZFZyv1AKmqCL>gTe~DWM4fCX$=^ diff --git a/kratos.gid/apps/Pfem/images/Black/timeIntervals.png b/kratos.gid/apps/Pfem/images/Black/timeIntervals.png deleted file mode 100644 index 5555fa5d7a2dc92475bb3e0405afd0c90652e641..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu>}jqg=;J1_nk(PZ!4!i_=@DEc9b`6lmM8n9&py z-Kw!{)xkz9$DotaCJ#dcA|@?c>8N1X5gZ#W!{mEzV#2KIMtNiLZ+hEjD_NaP%P&{E z|7O2&b%D?1EfYj0Z#;1{ic#qAW;QJbdz!tv{p`VH53U2}ru%okzW03R%-ZRj z*ge-SNj+Bo^j|=eiDkp@c-z3>Rc^ryTjYdQYL{HK@_aOpz5D_*L-vEa+v6H$8*&_2 zo?cUuX~<}!QYbj1wEHq+%B`;~8(8Zab~7?O5c;82nqiUf#p;IJmhi=q|8khFq?JwE zJ^9q_nxKX&olkN!cei!veN>uwtIzhxCFU5W?FTG3u-`kAQ@Z8;G5y-zFL<;jF_eJ< N&(qb-G2cowj^(N7a$D;Kb?2i11Zh|kH}&M z25w;xW@MN(M*=9wUgGKN%KnI1Mu>|??Mz@INV%trV~EA+ty6UUSR4gf_aEn+P~B|F zBI*5rAKyV3=tJ(t(7`W0Hb zcU4<**W0CU%_L9HS<9u6t7CpZv|&m2f45EF0$eW;$4#6sP^R8IoC3gj@*|ycT&YpU4 zhyLj=ElliMc>H4J)F}rPChuC%@53bysPYPZU4x9aNSS;FV#mHfq}r_>FVdQ&MBb@ E0NKNjt*v5{GByzl1?xb%bb<&r z3N|9aDpjh)B8XyRC0Gc$38aXEQBRsXFids@5B%KMocrH7b4N6Q?HQmN;g+P;de1#* zKz<8!OPZ221$0O5KPW@00>wy;OZpwPBCr$rGhk8DVfw~*wm;c!inwCCY`Y~+*>+#p z0o&UNHy3sicq8d1;&Wgq{D-MYn}Hfo$~MRY9k%lk7l9YRXGy0qRT&rt_JAL@-%I+a zC@x0v8}JKg3+2CO#2o-$0$+hO;B_uF+FxKdM4AIGZFglvzXV2sKfp8KRnlMrSdDjm z4m<@0fs0Io0#E^FflW#4Ioqv3JJ1td6I6kp;Xev;(qKck1?-8#1e1| z)Fh4At_69%-uA87zRsNE)b~HIy~16vyHTw(vuP3+H18PLd}70CB$0!A8^f6951J07*qoM6N<$g2lJV ARR910 diff --git a/kratos.gid/apps/Pfem/images/Black/view.png b/kratos.gid/apps/Pfem/images/Black/view.png deleted file mode 100644 index 84569e82d3cefb2d7fe1534d686e120de25649db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1661 zcmV-@27>vCP)>Oc7}`HbDs0$$rUTD&e=J; z=RY(5nb}=&ch;i&rRz7@y#Ih^a~v!`8)E=>Ph$tS^zNQI4!Ges76A;iB-_7#f}@WQ zi_CAf{6{}|i;ay0>LTgSX1GZDnK|YOtoby+V@zW++?{BSTf{Ab8)gPpV$pDt{9CUc zM}B^3%0KzwlTJ(BlLBTnP^E-9SZvFqc^9ymb%K{AV8j@c^|7Q_UtJ^ggc`63P6%l9 z*MDqq=ZE(Rc3Y0WQ%#ok{=|i8Nnd{>C zspt1|`h{os;EN?LoPD4B>syJ}io@vad3qP$`|dYc+}PyJpPpfDqlHDQd9Hdi$IDiZ zg9uil8kC~w?Au4S^ZMbha(RB4_ujcks}<2g2_exEihvf%?A0%L^VjDX{Zb#tUVjk< zG$pV<+9a?A{r0`mq4MCEUsElZw~`1+*!Jl+~bXEB`ICZr7MVL|9g+2okQ7` zmaAAQNUEB+6^N<`PEonKYQv8Y1F*WZN+?1q4lymZXvvK+fi=Nh1O!4ZuNo8=$J}a{ zn}cYIaup4P5NZyWZ!ISUb`96A3Pq@0+;nv<3yMMwAR;Ny1VU)=ElK7GDpjBaP2j5B zZbkM!xvTxt>U$ADyTSVhdYK#=WNmeg`hSvqQYlm^RdL-F)u9MXFD!FtY$v__{q1PZ zX;OhB?NoX88_%+4&W(T0w5`qaMdXoItE!?!f#g)uqTsWuHv#z0vBOz=?EtSVmJoRQ zg#(<}x0iq4UFX4rGRxZ_(nzgl*Q8M(WUf_}7$d)*nr6Jemp5K{k)g329pDw$&mVt| zQ_oETFgY~H(U*@Pcx`nJ?v4tO`F8|)dwRx~Z>_X9dcb2Ud5`UUjAPI2W4yPAxvdu0 z7H{M34EFUgIXuLG3J|y_*iQ45=)2bR(+*KS9(k39G;igBVPvawh`NKs%y}RD^Y4nNF zE}1@jx~%uW|FgY)<~%nxwmM{64~+rTEvHPh)GZYdqSeKuQp_KU-j1=S`J4A2@XopS z`DpPD*Vi{WH#5uM&i}pJLGRu8kFTuW%a@0oyD?&|TxF{Kjaj*}?8xOR&#f%eI2%${ z>zmap=W~paqHo)_e8SJA5`!|`dz$y5bSJV7>uZY4IxhkbH8%&z-pfI%hsQ@480^m$ zl~~p+Sz-C!WHnG#PHP3K`&7PPH7W4Y>yt@Miy5cCe}ex3g!j6BVzO*P00000NkvXX Hu0mjf&J-bp diff --git a/kratos.gid/apps/Pfem/images/_2D_.png b/kratos.gid/apps/Pfem/images/_2D_.png deleted file mode 100644 index 0531136c8b3eac97e91235137b71f0565ff7e7fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2931 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 diff --git a/kratos.gid/apps/Pfem/images/_3D_.png b/kratos.gid/apps/Pfem/images/_3D_.png deleted file mode 100644 index 405a7dc000657a37ba804c25170acf801a30fdd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2988 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 ebVVFH+Hvlm()34EUj{hHRNpF4t diff --git a/kratos.gid/apps/Pfem/images/bodies.png b/kratos.gid/apps/Pfem/images/bodies.png deleted file mode 100644 index 76b337649366a9ff4dd9081b308c0c31f36cf116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00H+&L_t(I%bk)xXj4%X#((eL zo8+Z!Xbp%;bPyfoTA2&qE5bkhvt@M?)e289Y0bW%Yh5u~Cb zJc%wsKyXS@a8L}^Hs;;ua+OEv>)@I0x!?EQ@7!|^0M%-h{|z|i!f5u%By* zT(up?x$iiRb{wa(a&KYpwX+jiYi$83pxI7j0>A@OT5Am;?6?{+uB*VLIqv~l`F#Fp zOv#+Oq&z|&3G6X02~QnRdXx0@;y z3d_JPVAM3J1Jr>>zVBboPL{p_M}R}XXP{{wIjGLh-`D}?SM=6@_dL&=1r7k0fa}04kW)&HpFVf-wJH4yPyx!o;r9=2=hLa7 pHR>;4Wuj^?m&=j=YBU-E`~m6enle>t<$nMG002ovPDHLkV1kg27`Olc diff --git a/kratos.gid/apps/Pfem/images/body.png b/kratos.gid/apps/Pfem/images/body.png deleted file mode 100644 index 6d2de31d2ded8fc5d8f18a914e7a83e7a3b92230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 zcmV-T1+w~yP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00gy3L_t(Y$F)}7ZxmG&|J{$- zo!O7>7u2M?&@I(=`IK5V#e^sr0zm?%5nqV-FG%2#2VbqR555TrFDAy4XyS{aU>YbP ziiY5(wNPN&rEZZA+u3Ex&dkot9Uo@9U7%fR0_SCB?)jZF=brOB_gpeJI~$9~@#4gF zT|$WZ@F8(s_uSdD4`ye*RZs0Wjt~NX5JCvyIF9SO-l8YAZCjQlgs?2jwr$68s@1CZ z;;9A(2FQ^kN4^*w#EX`Xk00lpa{!Dn2Y};%F*wd5gfZsrqe0sUUep4ONbZT30W9R= ziN8Bfeml-n;6|dECA_r`oqJAGntIv=L;xGeJA-j z^M_k=xiS+j0Bmk?-s_I1BmP?C0Oy?b_4U28b0+{z*Z;hF^|QgjiHQlXh5$;X((ix# zVe0zYbUGXg0jTKu8RcSai=Vg-fD0od)Qh^J>(i5yCr_U? z4CASS7=|%?@#4_XkXkNRbbU&#em7-U?h>W@>ZU$1t9$w9oKx@3tXA_=Q>9XA$#QF& zmYWd{kv>dmUIjN`0;k>U)}POR*TxU?Vrw_YeJ?-vowpPV?+ z)zu}-ave{`oHZ%WbDtPtUHSRIw(}4j1pAQc1-Log#+q-ku zt~pipb51!|RrTwkp^=dh0Apig+moFaZkIQ-%5SG53^0XIIJE?(%hg}A; zdkpbpPF24-bLQ78S2k|k7>!1&hEbTF9vvO6cYi*g&rIJm__{AgD;vUEdy7BlqmONI zw`^Y5c-3W%ndHw_qfjUm3WX&L_0RqLk1LgV+3^uRuCZ~=uJayvy8G$EX}%&+RrRr^ z6^zD{c-a=C|7$FnrfEKNG%hFH;~ycUK69HlPCOpBSKxP%*DDc1NOs#ciE|EAt>?#4 zbA9aCF~%5UtdTH{PQ&5w!TtN++OZ?NZu4@ED3DO3{&cMlwa4~s_UO^0s;Z8UkKeg- zM^#mCqK1OOwq$ZcCKHQ9ve|4r7JE>!-%a6`suxXJGi(<6byxefdBvtSQX%V6QN!`ST=0aa%_MCio_yv zXtg3SR-5ud2%gL30Mw^-cW37c((bHQ=xXKJ<9qS)kjv#>=EdygT_^tom)UW<5)LaJ P00000NkvXXu0mjf5ju-s diff --git a/kratos.gid/apps/Pfem/images/boundaryConditions.png b/kratos.gid/apps/Pfem/images/boundaryConditions.png deleted file mode 100644 index 7b97fcbe5af481da5ebb22b0dc3e8ba46e9fbb94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kD|KrE6KAsiVu0AL$p1yYVK||f-T{};oIDSo8 zKC-!SQB-*IlgF>@t@9@KubDr0TSjWHQ^l0sK<%ZTE{-7;w|Xvk^ED{&uv|DN!qT<> z_xv!eLx+yIm>pRBa!JRZ=&DDSGr!3$iCUY;E90MFS-j22ak|U?Bdp9!pL~6UGYW2f zkIrgVcoyp4Yq3S7K)UwY;e}hDnr(VgaN&w@^;Bma&NIamZYk_bt8RAKU;jubfuW+7 WDe)uMZgUgULs45r&UR_gCdatg&aezLAYG~^1 zr}ququdJ#@*4D$|$ZBL=L1A%ccOSG8PN8*!ib`th8W1(8S`@mWu?5|PAyd1WT5ug? z+WjFmq@qe9Q#3YX2k$fM(ap53-m>xvIHGoYdmG=@Ay=p?VF)6L3ahTEsjY9p;;EfI z?H!cTG6=S{Ex!Q7;R#XojrSnXIux40cR+6#sYcZH4>A-gO&gIs#Nx6z z{MosAtE?_N-Q$L*SCKrR9|=(+p#Xm6e^hYPG7=+OhFTkw~o74=a^wl}a-_I%b?Q zNu)9!U)a^tXR$0oDk{Zd$@=;_pD*O_1WY#9Xf$!S0=ZmiGMP;?W?)usPv3w*Ae^0h zR8(AwClI%`w;cxsLJ2S{=ix)MLZO;`FlD#f1wzrwmmBRw(&*R(iA*z_=Y&GBL@Jlb z6;xUm7K>LXRYI|p*41M)PDy1747Rng2{SS}ArMJsXXm&)fz56oqz|DRTa44D-u^+Q zO1rbOo0Xlrx%ryGWXlvPJfU5!)hm=53azWNyLWJq&SY`8JRylpO-s+@@%Y&}`5LWm zZEbCJ)vDI$usA%AFM4R6G(7{z=I}HcU20ke2GdGsFee@u zhnVak7RR!3<5Ji!z@6{K*6Hj^%6J z?z*ch3}%be9wc4zak?X9Odda-_3_bE2`3Pnn~)Sd>i&Mr48}FYlNjRC@WbS%3BIM& zN0`NVx9?Mu&zQ|6rIKEMm)`1c5Fi8Y^Uhax|5IMS&;eBpMngOa;Tc{9zgXkt7Z`hS zbmes#atnz>wzt2!wjMJ+5EqMJA1Fk6lBgBb`Y*zcy_j=C#`T3X|N2Cu&bu0Oyz%GA zX=EY%Fnqqz>-@VnPhydw*}mcF$pELXJ>$MQkfE`j2ocU-T=##QdeIHrfJPfSywvLJ ziRaHk&OrbcYv_{E^jq2F5@8{;SQ+&5hHX;G+|)yI>C| zVA_l5n>Uy87gz2+mpBt3#y{NAeK=?QH3Je8VY)oqLd`h!V=?M;);U>f+oNc-7xKt_ z?FWZ}S8h^9qw=1%W8F<1l_TD-2Gc{^;VBfOf zhB6=sn(qI?o07$hjT7O_~B0m$gcjQvZcNAtM$ap+Xq6E{SMW)kS>HK0uN2E;N3PYmcRa; zQojG=9ldU(E2#g^N}prpb+@q20kD? zJlKhh?>?MB^o6?pK1&)xICapx5fyZ>iFl}UV0`M>Ny=THgv@|by1)-Nz?W48Wg#&* yiFF_Caq;T&{l1?+^~?0by5egfcJPhW!tpD0!;@ diff --git a/kratos.gid/apps/Pfem/images/contactStrategy.png b/kratos.gid/apps/Pfem/images/contactStrategy.png deleted file mode 100644 index 458ad983791c49707b347d788758d04b3a5a8ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kD|HVv58 zW*^UriT!Ju8yBrzeelHbYrA%yo4Qej%W2s;7%% zNX4y`eowvw3Ovl4H#`6Se_rfsfWleDAh(UFhk5_MyvyjLc1n(|Gwvpf?JCZO-~UcF z^-fxP*5JjLM+>?|Ru#M7?z9r(GCdFzrgBK}iVS)*Z=?jpE!PPV*i?`@aB&nzdm{V%HBHf+SLbT#nb28 z`+|&g^K@|xskqhC@5#lWz;k5R&OiT;Hmwa>CU?d#Wr6CigFh1VB8~>~DNZ~kYPU({ yn-XW1K_=58k;NiyM~^V^y?#|vSF?*nf+6h!!{x8SH`#$EGI+ZBxvX{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kD|HScYhPugR#nYALBcD8e6&2px+_-4|+-)B} ze)aLJxOVkHMr!ZG{xxe?AKbO`^p7iMAPX`)T^vIyZuLxX=R07)!Lm|s$CLm2d+&5i znf#qeN|&4IL6~JLSK3CI3!T-B!k&BuQ=Yh_&MbDmc+>TpP2c90t4ZzGIfgYVAs>J7uV-LpaFAep#QQ|j0%#|Lr>mdKI;Vst E09Ht8kN^Mx diff --git a/kratos.gid/apps/Pfem/images/folder.png b/kratos.gid/apps/Pfem/images/folder.png deleted file mode 100644 index 86b16d281bfa4759d2dde7f2243d6fe82046f03f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kDUs*o#MXw)e+yrXO_jGX#skl`#!Bgmf0tbua0ao8n|DPXYU0ZP? zX2WeQE`?v*?Wfe2YaC)vf3$Ya;mx6w_N?)14e2s{HXj~~DOU%UF?|B3x;{y%yA>i>!3*T5Jg4gw&y zvV7$Kvf}A*7qGw#x_<2;Lv%zl-1G(Ww!_&=SJX0?TWG>9ee&cDoXrGdl$Fc?YvAMK zVn|5x1k&6@c?oR5(xFaR=O nJt?^lId8xW2%sc80|XcV!t$A>pv(CQ00000NkvXXu0mjfd404Y diff --git a/kratos.gid/apps/Pfem/images/groupCreated.png b/kratos.gid/apps/Pfem/images/groupCreated.png deleted file mode 100644 index 628d643f7ee5d8d1794fc3cbed3b9d7825354c05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%B?S0{xc>kDe`5cd_3MuX1-2OKCV%|+b=S_**RDQTyZT^r z<05kEJ2i$||!Ufq7? z#h*FP-`z`HX<7VkRZ_yM4Q(ogGej@smG0Kw-_gObis@C@!ekTW0I9}}?^g3B+<2I_ z;pmOeg4HaEC%6u0C53jz?vk2Yv$E0o%!ATj_c|t6cWjObNcyz2A?aNzkMFl73$j0~ s{@r@kd+(%NvDtfH);gx-{Si%IP+ZF{Ec#l>80dBePgg&ebxsLQ0A_pEa{vGU diff --git a/kratos.gid/apps/Pfem/images/linear_solver.png b/kratos.gid/apps/Pfem/images/linear_solver.png deleted file mode 100644 index 286e690b2c6cbff7ee337ce8f4536114f5d5eb98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 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 LNkvXXu0mjfG0@Y= diff --git a/kratos.gid/apps/Pfem/images/logo_1.png b/kratos.gid/apps/Pfem/images/logo_1.png deleted file mode 100644 index cff91a03d148a063b8389f40d3691bba95f3fcbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6332 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 Q{mBBLpwKIVzz6960gDBsi2wiq diff --git a/kratos.gid/apps/Pfem/images/modelling.png b/kratos.gid/apps/Pfem/images/modelling.png deleted file mode 100644 index ce73a296ed890e2eebe2bb8512be205cc81eae06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtRgSw7Oov!bkc`p1u7PaMB??dpSx{cG&4 z^D(u0Gh@xM=>|ZBHJ*iZfrY1k_vP>EaktaVzKiYrX~r4%P$**8Ho#_vbdO zT~Ye)fZasihW$SOybkk+EZVutcMpeP@8Ml@y1c^|N-O~`$cQimh1i3|Kx`IL16^816pS%k5FOD17hJlchV(!@ zdEy!aHp4&w_kXOJ!TuKCaFCobTs~jURL#+qW0pxlC hl$`@8$<6=)1^^*r;Rxj2lk@-p002ovPDHLkV1kmreaQd- diff --git a/kratos.gid/apps/Pfem/images/parts.png b/kratos.gid/apps/Pfem/images/parts.png deleted file mode 100644 index dc6960759fda449594c8a77d0b406259285b84fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*mfD!lo`@oOJHeqFoz;QYDUnj07Scvf7y z`k<_MdPZvR#Qrsgy2(!-zuL9)G*JDfYnK#&+67C3{DOg86u_Xmc4iV#GS$>GEXgEbHGRD(dOGFG16Ot+}k=e9PRrVm>D>-8UMI{;;aH%%i!ti K=d#Wzp$P!7HD}iV diff --git a/kratos.gid/apps/Pfem/images/runSimulation.png b/kratos.gid/apps/Pfem/images/runSimulation.png deleted file mode 100644 index 32ca7ce81a24f244b18449968c113dbb0c7ad6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1887 zcmd^9`BT#e9*uxV5g2r}O1CO?TB`_Jz_pdOOho7cDvO95T3WCia+45*ByuGrKsW;g z0)!g_gd{+YZ%%S@g(Hv>+^3*^H0n{ zAdsb(r@Nnl&;A87W5c%C{HfGHHZYGM*!{#vSZWwF0(3Jx@o|K$SA1AhgkMBhI2@vg z_znaz+V;KU@A2WohZ1~6MkcDLq%1GLu&ko0oIorr#^cK?F}XNgVM$dr=~;SKacMd7 zStd5GAitovwyv?Fvbu)Ukb}*yB-Uo5Fodca6dFscsVglbU~_R<**Vp<_2``3H2AZp zsR(HD)4GP{+`NMN#+HJjQdmk_9}o||8ojm9QHl2vLAslI7oP>~Ev)$8@b zUJ0AS&%xx;yP542T51|HJ|RgU6hojXD=Tj~T*1P^Vo7OvVNt29Zy+%Vs-1n&*whMe z_*|YaIwp?G7fNOFZU%dQfB)d%psj=2&0zH~*(`w9KQJVd^-<|P5^0}EER#rOF|i4K z{eu{6{?^tzdEbCqGc__g#$W+O#rQNh^6l!{xJtdgzCoeV8B9Q-7?nunOcs#x6#nas zwyLVSuWx`@O_CUN3@Kvc5=A1(n>Q;R9TdgzNUun$RE|^W-CJ8*dwP9*0z@R1h$S)( zmrtX2PfgG8_=33j#HH8&-PqXF>2yM&h)_w?YPFf!IV$yJOlV%LZxQ0fbE?f<%Eh#>q<>S zyj@*ob9jp3Q8vJfjEWu|Q{u}BJihQrbgWn+g{7puVXzr2&febM$e40*@ug}~L+@tH%*+mtj2SFesnnaBI!Y&fZhoPI zLR(u~FU42PXlJ$B7XZKoxO{S3hjLuSV6yl2^l|Y?^9ze2v2=cZVRd!Q5P0jd^Ay9A z{14{mbKh|OT?eE=3}zU5;CC&$f4gaicq_NMB$6ZsY8*5#_C*RLjH@A=+``4r6Kd&6AhA04tyx)*iNlrmvr z7ph*GtURKq9Sn$Sh)f$();Cjz`@d*Z%Em99|1zwtY1xGEAt1fJ34O|pSgn1qQxuYA zem<4?8AX8M1A=zhf(e*3tw^+i)-Uv7FA-DBa=47R;u;&0^Fhyd`1%rkbeF160vL&L+~-cYnZ=&rSk zRfVS~$m>7fkjbZqUS2jck%7OMTXLiRL!Py?_PYl(TVn~wOr&8;?Ck8ky`|ujbIqtk z@T^mi{{HFHo9|cp+b=nhoSmH1j{kaa@A!#I3!_Iai^S!N#`3!ku5e6&1%%H(d-gi` zX;aIlGJJ^M;Ygm?%0nHNq2F9C&TwYafrtr z0f6b?>JA-sHB{Xk_o-ri;Qwqoc*N#9a@>Mr2?wY%5UX3Rp1a?3tdIQSJOK@~x!{Tg za0!=lf3_gp4X}!&fwgNcb8ghaQCp7I@rI+x)USfTkH0c`{^k+lOk`-#=4Yc0R%HQI z(B8e@7}++;`rFVy>@xePQ!Mz{Mhsc&1UJEE4JV2 z6=XX2SaE90cMcY?B7aoG&9lZ>yS~N4<+Nmb=QHV}2}qBBB39bXyp7P9Q>X1E->7O1 bTZe*nc89JAvX6Hd$^hi$;p0ws3q}12Cx(06 diff --git a/kratos.gid/apps/Pfem/images/seeResults.png b/kratos.gid/apps/Pfem/images/seeResults.png deleted file mode 100644 index 85f3442098fbcd7f1817d46cfb6ff8452023438c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%83*`;xc>kDUs*o#Ws{Eh#_&>R!y_tRg|6l3{7+mX^944iGJq)y$ N!PC{xWt~$(69CF`Z>9hM diff --git a/kratos.gid/apps/Pfem/images/select.png b/kratos.gid/apps/Pfem/images/select.png deleted file mode 100644 index e1cb04841578dd1b4031d1a4afd1b3636ed75b57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmV++0p9+JP)4>OVVfT33Vd z@%4j&qR7YApPjZNA6c!d!AwbbXl0FdbC^ z2t$GJZ=3f1ryZhXs%*+CSdRS!z}K`Z+rBHNnQX#A(m?6{?=D<#B;zF@A;8VzAUKsc z;SoOSZ_o6l4pTte2z0{e>>L niSW*eeIRV(+1uw`egX^t#GeBI23e@V00000NkvXXu0mjfwZM5T diff --git a/kratos.gid/apps/Pfem/images/setLoad.png b/kratos.gid/apps/Pfem/images/setLoad.png deleted file mode 100644 index fbb12ba2a43030e0644567e2b3af8af892d1a992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%nFaWSxc>kDKPtTW#PMs&@{tq!*F1Ur>e|%@^XG1BZd_!j zo4jl1X&=vuwW|->Tj!M(PyhJwYes4>P|LI8-TFWigi3<^f`MFA!0>4Qej%W2tfz}( zNX4x={df5q6gb=*16_1q|BW|$k-ziiH7oJ^M;|8hL_AdYzTzQfDbIFS)J1=p*TsEP z7z7Px6v{C+&DUA-c4-RpCf#QrbHB)z$n9LXG4Xps*yIh1>wZ=XCor%XGp?Q%`f?i3 OA_h-aKbLh*2~7Zu(0soD diff --git a/kratos.gid/apps/Pfem/images/setUnits.png b/kratos.gid/apps/Pfem/images/setUnits.png deleted file mode 100644 index 95f68e36218081e291016b8bde67b00d1f78232c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn3?z9rZ$AN~BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%=?3_Oxc>kD-^a7!tK!JnVfyvSJ_P_r--)>wW zQ*Pwr@Wf&rD@RIFu=kUSnCJ6F=I&TCp;IKQdGUoeYgQJX))EoCt(T|zz+lG`q1A@5 kpO;4Hh1u_aCYr!-ON=q^{2h@+KpPl5UHx3vIVCg!0GY{QoB#j- diff --git a/kratos.gid/apps/Pfem/images/settings.png b/kratos.gid/apps/Pfem/images/settings.png deleted file mode 100644 index 286e690b2c6cbff7ee337ce8f4536114f5d5eb98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!fo;{cx!*Z=?j8|o%Ug*W?nR$ROK;N!=yCyrlJmXFLx?S1n2 z)%>~JCibt{we$4a)d%gZ^U8{+H#aWQoy7AFsJ+wE#WAGfR*%1@&|w3PWaEV9w}1X` zRXkU6E7@{`M-K}_ecOV>|1)i5G&*k2wC>w0GHKmkrOr^7rISuZKFrv{VSdDp>vYwX zyvK^$ydpUpHqH2H62-uMK_{W&D{G1ST#eLuopm|a8de-uf0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyGf+%aMgRZ*BOh5YEo1TV^^uRPT33U} z$JXTI>OVVfy1C0}WsP=om#wS8Oi6gw)!>7HqMx0%9}^Kx0001cNklS6uPqDeByuGn{B6g4E;N{ ej<+{_1Q-BWTLNZ_w>zT%0000;M1%4Rw>F!kc|OE3RFA z@bTl<6UVP9%SUFU_C9(1YX0196Z_Zf+If2I>Vx*yd1b}Zn;RGDPU3k7)XrJp5n0T@ zz%2~Ij105pNB{-dOFVsD*&i{9a9hY-R(tycDAeZZ;us=vx!2!YjKz@U3%5|_%ir_2 zm4145R_AzAkOsq_%%--#>Yoc1DCAkcw+Pen*>ycpElgl)k=pLo#eqV49a}{&RTX$W z6F40d#-t!Jv8GY%Ak!4r1>$;(tY5X7HWe>=Z)&OVY6CahTUGHoy*JD9Gu~u|nmsG! nI(t0jspR+XJN-(&JYYP0kom$I&Ae+s7cqFc`njxgN@xNA*pza` diff --git a/kratos.gid/apps/Pfem/images/timeIntervals.png b/kratos.gid/apps/Pfem/images/timeIntervals.png deleted file mode 100644 index 1f167f758d08e6f2c4f4e6af02529182eded7c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Po3?xrFN1X&x1_3@HuK)l4j|y)#)J@^*J&=wOxg z0CG4BJR*x37`TN&n2}-D90{Nxdx@v7EBiw(em)Bp$zuB%K%r7k7sn8e>&XcYY;8?! z0n-u|FiZ*EyPM(AjA>G{%ovY6xRQ{NaFJ!>4JiqUcfQOU&qzpAOnu&5vijcM>X%Qh zFgr}!{( zJaZG%Q-e|yQz{EjrrH1%83g!*xc>kDKPtT0P&aw)>Vvy>o}Sph#@;%wta$qTx!bN? zeQ@IVHD&q8=Eg-IKYqmW^`k;JE~fJshW{pp&lVf2@xbj zNQfZB`w>Cn5%PY&CEn4rh*0Kuiy4}tZHUpe=gfbx_nhy$=l*o>58wUr0{neHvOQ)C z002I^c>{QNkDdQFhxYI7BWphq_vllY&m&l1TsSNllmG^JhsFIH>~a$ViU8jQgThkc z`@mNLfIs~n;CIjG!-o&)8R*LDy4w22lG5@tWG02$LawOJ!xKzHhCRfhQ&9D6Wt7&CrYkT{(+05ba z==9d*WfQfD#%6O22BTD_?C50n^!7(Qjnek^J=ee7+}wPYl%iCsmrbUb*;!S$R<9pv zZD%yM&^Ih1zUQDI@RPN$bE zlorbti^K0=bjf52dTYn}`o_TE(7=#RE>}iHLxyz2ZS4%PL@E#nA+hmXo`BNWJTdvo zXq>QGtuIH$lqz)$Bu@8Szq-06k;riQ1f6cUlgSo~r6nZt;LxyKp^A=)eHs}p6p9o| z_1@)Q3U;}**Om{kyZ(WD^8Xls@Eu$b0I>h;O`!KZ_=H~(_{n3CJ+|;k>47_kYYyQ) z#+N-fYL8f{p1Ke|C|vtEWcjXP>JPk`M08raJ{Xp+4d*%TUX1XsB-QSQXViUbSnHHs zN*l!XlwfyK6W-1LRuFu92i5d2|A)3qkC*Q&H>e`>q?bE#{YkKu_xaDiH>MlDEWhn- zDspkBIPNZ^vPh;e+oj0Sxs`_sh$n*dcxWcT&hW-w(ksD zVCEuuxRI82@H9I42Eq!6eesk-bxq|x+A(kR&m078`Yr^Zli#kIH;D4=kx}*-|7s0M}O$xukzm;d(c-47?*sXQ~Q!ic%b9VxPh^x-H zNFrb<`k0$mK!Z|_+rCXj_D&y*D7v!f4fQy?#Dkrlja>aQ>U=0wo2q1FKUXRp{sKerr;KdU}dK|Fu-!M`kqTLZcH z>q9e9yGb?wn09#`;r4RnQ%b227 zjcM$2bXZ|MpIrx+9ZGZeQ=h7eguzD3q(85EYRFFWOxEX?pjXV$eFH^{J!|EtUEsE< c6R;nkE??yM{5Unb_d)!IlX0)X7SUH||9 diff --git a/kratos.gid/apps/Pfem/python/RunPfem.py b/kratos.gid/apps/Pfem/python/RunPfem.py deleted file mode 100644 index 976068704..000000000 --- a/kratos.gid/apps/Pfem/python/RunPfem.py +++ /dev/null @@ -1,9 +0,0 @@ -import KratosMultiphysics -import KratosMultiphysics.LinearSolversApplication -import KratosMultiphysics.DelaunayMeshingApplication -import KratosMultiphysics.PfemApplication -import KratosMultiphysics.ConstitutiveModelsApplication -import KratosMultiphysics.SolidMechanicsApplication -import MainPfem - -MainPfem.PfemSolution(KratosMultiphysics.Model()).Run() \ No newline at end of file diff --git a/kratos.gid/apps/Pfem/start.tcl b/kratos.gid/apps/Pfem/start.tcl deleted file mode 100644 index 59ef0f5ca..000000000 --- a/kratos.gid/apps/Pfem/start.tcl +++ /dev/null @@ -1,61 +0,0 @@ -namespace eval ::Pfem { - # Variable declaration - variable dir - variable attributes - variable kratos_name -} - -proc ::Pfem::Init { } { - # Variable initialization - variable dir - variable attributes - variable kratos_name - set kratos_name PfemFluidDynamicsApplication - - set dir [apps::getMyDir "Pfem"] - set ::Model::ValidSpatialDimensions [list 2D 2Da 3D] - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - set attributes [dict create] - dict set attributes UseIntervals 1 - if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } - dict set attributes UseRestart 1 - LoadMyFiles -} - -proc ::Pfem::LoadMyFiles { } { - variable dir - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir xml BodiesWindowController.tcl]] - uplevel #0 [list source [file join $dir .. Solid write write.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} - - -proc ::Pfem::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} - -proc ::Pfem::CustomToolbarItems { } { - variable dir - # Reset the left toolbar - set Kratos::kratos_private(MenuItems) [dict create] - set img_dir [file join $dir images] - if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { - set img_dir [file join $img_dir Black] - } - Kratos::ToolbarAddItem "Model" [file join $img_dir "modelProperties.png"] [list -np- gid_groups_conds::open_conditions menu] [= "Define the model properties"] - Kratos::ToolbarAddItem "Bodies" [file join $img_dir "body.png"] [list -np- Pfem::xml::BodiesWindow::Start] [= "Bodies window"] - Kratos::ToolbarAddItem "Spacer" "" "" "" - Kratos::ToolbarAddItem "Run" [file join $img_dir "runSimulation.png"] {Utilities Calculate} [= "Run the simulation"] - Kratos::ToolbarAddItem "Output" [file join $img_dir "view.png"] [list -np- PWViewOutput] [= "View process info"] - Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] - Kratos::ToolbarAddItem "SpacerApp" "" "" "" - -} - -::Pfem::Init diff --git a/kratos.gid/apps/Pfem/write/ProjectParameters.json b/kratos.gid/apps/Pfem/write/ProjectParameters.json deleted file mode 100644 index 180da658d..000000000 --- a/kratos.gid/apps/Pfem/write/ProjectParameters.json +++ /dev/null @@ -1,326 +0,0 @@ -{ - "problem_data" : { - "problem_name" : "problem_name", - "model_part_name" : "Main Model", - "dimension" : 3, - "time_step" : 0.001, - "start_time" : 0.0, - "end_time" : 0.002, - "echo_level" : 0, - "threads" : 2 - }, - "solver_settings" : { - "echo_level" : 0, - "buffer_size" : 2, - "solver_type" : "solid_mechanics_implicit_dynamic_solver", - "solution_type" : "Dynamic", - "time_integration_method" : "Implicit", - "scheme_type" : "Newmark", - "model_import_settings" : { - "input_type" : "mdpa", - "input_filename" : "Particle Domain", - "input_file_label" : "0" - }, - "line_search" : false, - "convergence_criterion" : "Residual_criterion", - "reform_dofs_at_each_step" : true, - "displacement_relative_tolerance" : 0.0001, - "displacement_absolute_tolerance" : 1e-9, - "residual_relative_tolerance" : 0.0001, - "residual_absolute_tolerance" : 1e-9, - "max_iteration" : 25, - "linear_solver_settings" : { - "solver_type" : "ExternalSolversApplication.sparse_lu" - }, - "bodies_list": [ - {"body_name":"body1", - "parts_list":["Part1"] - }, - {"body_name":"body2", - "parts_list":["Part2","Part3"] - } - ], - "processes_sub_model_part_list" :["DISPLACEMENT_Displacement_Auto1","SelfWeight3D_Self_weight_Auto1"] - }, - "problem_process_list" : [{ - "python_module" : "remesh_domains_process", - "kratos_module" : "KratosMultiphysics.PfemApplication", - "help" : "This process applies meshing to the problem domains", - "process_name" : "RemeshDomainsProcess", - "Parameters" : { - "model_part_name" : "Main Model", - "meshing_control_type" : "step", - "meshing_frequency" : 1.0, - "meshing_before_output" : true, - "meshing_domains" : [ - { - "python_module": "meshing_domain", - "model_part_name": "body_1", - "alpha_shape": 2.4, - "offset_factor": 0.0, - "meshing_strategy":{ - "python_module": "meshing_strategy", - "meshing_frequency": 0, - "remesh": false, - "refine": false, - "reconnect": false, - "transfer": false, - "constrained": false, - "mesh_smoothing": false, - "variables_smoothing": false, - "elemental_variables_to_smooth":[ "DETERMINANT_F" ], - "reference_element_type": "Element2D3N", - "reference_condition_type": "CompositeCondition2D2N" - }, - "spatial_bounding_box":{ - "upper_point": [0.0, 0.0, 0.0], - "lower_point": [0.0, 0.0, 0.0], - "velocity": [0.0, 0.0, 0.0] - }, - "refining_parameters":{ - "critical_size": 0.0, - "threshold_variable": "PLASTIC_STRAIN", - "reference_threshold" : 0.0, - "error_variable": "NORM_ISOCHORIC_STRESS", - "reference_error" : 0.0, - "add_nodes": true, - "insert_nodes": false, - "remove_nodes": { - "apply_removal": false, - "on_distance": false, - "on_threshold": false, - "on_error": false - }, - "remove_boundary": { - "apply_removal": false, - "on_distance": false, - "on_threshold": false, - "on_error": false - }, - "refine_elements": { - "apply_refinement": false, - "on_distance": false, - "on_threshold": false, - "on_error": false - }, - "refine_boundary": { - "apply_refinement": false, - "on_distance": false, - "on_threshold": false, - "on_error": false - }, - "refining_box":{ - "refine_in_box_only": false, - "upper_point": [0.0, 0.0, 0.0], - "lower_point": [0.0, 0.0, 0.0], - "velocity": [0.0, 0.0, 0.0] - } - }, - "elemental_variables_to_transfer":[ "CAUCHY_STRESS_VECTOR", "DEFORMATION_GRADIENT" ] - } - ] - } - },{ - "python_module" : "parametric_walls_process", - "kratos_module" : "KratosMultiphysics.ContactMechanicsApplication", - "help" : "This process applies parametric walls and search contact", - "process_name" : "ParametricWallsProcess", - "Parameters" : { - "model_part_name" : "Solid Domain", - "search_control_type" : "step", - "search_frequency" : 1.0, - "parametric_walls" : [ - { - "python_module": "parametric_wall", - "model_part_name" : "model_part_name", - "rigid_body_settings":{ - "rigid_body_element_type": "TranslatoryRigidElement3D1N", - "fixed_body": true, - "compute_body_parameters": false, - "rigid_body_model_part_name": "model_part_name", - "rigid_body_parameters":{ - "center_of_gravity": [0.0 ,0.0, 0.0], - "mass":0.0, - "main_inertias": [0.0, 0.0, 0.0], - "main_axes": [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ] - } - }, - "bounding_box_settings":{ - "kratos_module": "KratosMultiphysics.ContactMechanicsApplication", - "bounding_box_type": "SpatialBoundingBox", - "bounding_box_parameters":{ - "parameters_list":[], - "velocity" : [0.0, 0.0, 0.0] - } - }, - "contact_search_settings":{ - "kratos_module": "KratosMultiphysics.ContactMechanicsApplication", - "contact_search_type": "ParametricWallContactSearch", - "contact_parameters":{ - "contact_condition_type": "PointContactCondition2D1N", - "friction_law_type": "FrictionLaw", - "kratos_module": "KratosMultiphysics.ContactMechanicsApplication", - "variables_of_properties":{ - "FRICTION_ACTIVE": false, - "MU_STATIC": 0.3, - "MU_DYNAMIC": 0.2, - "PENALTY_PARAMETER": 1000, - "TANGENTIAL_PENALTY_RATIO": 0.1, - "TAU_STAB": 1 - } - } - } - } - - ] - } - },{ - "help" : "This process creates the rigid bodies of the model", - "kratos_module": "KratosMultiphysics.ContactMechanicsApplication", - "python_module": "rigid_bodies_process", - "process_name" : "RigidBodyProcess", - "Parameters" : { - "model_part_name" : "Main_Domain", - "rigid_bodies" : [ - { - "python_module" : "rigid_body", - "model_part_name": "Rigid_Body_Volume", - "rigid_body_settings":{ - "rigid_body_element_type": "RigidBodyElement2D1N", - "fixed_body": false, - "compute_body_parameters": true, - "rigid_body_model_part_name": "Rigid_Body_Volume", - "rigid_body_parameters":{ - "center_of_gravity": [0,0,0], - "mass": 0, - "main_inertias": [0, 0, 0], - "main_axes": [ [1,0,0], [0,1,0], [0,0,1] ] - } - } - }, - { - "python_module" : "rigid_body", - "model_part_name": "Rigid_Body_Surface", - "rigid_body_settings":{ - "rigid_body_element_type": "RigidBodyElement2D1N", - "fixed_body": false, - "compute_body_parameters": false, - "rigid_body_model_part_name": "Rigid_Body_Surface", - "rigid_body_parameters":{ - "center_of_gravity": [2,0,0], - "mass": 1, - "main_inertias": [1, 1, 1], - "main_axes": [ [1,0,0], [0,1,0], [0,0,1] ] - } - } - } - ] - } - },{ - "python_module" : "contact_domain_process", - "kratos_module" : "KratosMultiphysics.ContactMechanicsApplication", - "help" : "This process applies contact domain search by remeshing outer boundaries", - "process_name" : "ContactDomainProcess", - "Parameters" : { - "model_part_name" : "model_part_name", - "meshing_control_type" : "step", - "meshing_frequency" : 1.0, - "meshing_before_output" : true, - "meshing_domains" : [ - { - "python_module": "contact_domain", - "model_part_name": "sub_model_part_name", - "alpha_shape": 1.4, - "offset_factor": 0.0, - "meshing_strategy":{ - "python_module": "contact_meshing_strategy", - "meshing_frequency": 0, - "remesh": true, - "constrained": false, - "contact_parameters":{ - "contact_condition_type": "ContactDomainLM2DCondition", - "friction_law_type": "FrictionLaw", - "kratos_module": "KratosMultiphysics.ContactMechanicsApplication", - "variables_of_properties":{ - "FRICTION_ACTIVE": false, - "MU_STATIC": 0.3, - "MU_DYNAMIC": 0.2, - "PENALTY_PARAMETER": 1000, - "TANGENTIAL_PENALTY_RATIO": 0.1, - "TAU_STAB": 1 - } - } - }, - "elemental_variables_to_transfer":[ "CAUCHY_STRESS_VECTOR", "DEFORMATION_GRADIENT" ], - "contact_bodies_list": ["body1"] - } - ] - } - }], - "constraints_process_list" : [{ - "python_module" : "assign_value_to_vector_components_process", - "kratos_module" : "KratosMultiphysics.SolidMechanicsApplication", - "help" : "This process imposes a constraint", - "process_name" : "AssignValueToVectorComponentsProcess", - "Parameters" : { - "model_part_name" : "DISPLACEMENT_Displacement_Auto1", - "variable_name" : "DISPLACEMENT", - "interval" : [0.0, 100], - "time_function" : "constant", - "imposed_components" : [true, false, false], - "value" : [0.0, 0.0, 0.0] - } - }], - "loads_process_list" : [{ - "python_module" : "assign_vector_to_conditions_process", - "kratos_module" : "KratosMultiphysics.SolidMechanicsApplication", - "help" : "This process assigns a load value on conditions", - "process_name" : "AssignVectorToConditionsProcess", - "Parameters" : { - "model_part_name" : "load_y", - "variable_name" : "LINE_LOAD", - "interval" : [0.0, 100], - "time_function" : "incremental", - "modulus" : 100, - "direction" : [0.0,-1.0,0.0] - } - }], - "output_process_list" : [{ - "python_module" : "restart_process", - "kratos_module" : "KratosMultiphysics.SolidMechanicsApplication", - "help" : "This process writes restart files", - "process_name" : "RestartProcess", - "Parameters" : { - "model_part_name" : "Main Model", - "save_restart" : true, - "restart_file_name" : "cutting_test_rigid_2D_json", - "restart_file_label" : "step", - "output_control_type" : "time", - "output_frequency" : 0, - "json_output" : false - } - }], - "output_configuration" : { - "result_file_configuration" : { - "gidpost_flags" : { - "GiDPostMode" : "GiD_PostBinary", - "WriteDeformedMeshFlag" : "WriteDeformed", - "WriteConditionsFlag" : "WriteConditions", - "MultiFileFlag" : "MultipleFiles" - }, - "file_label" : "step", - "output_control_type" : "step", - "output_frequency" : 1.0, - "body_output" : true, - "node_output" : false, - "skin_output" : false, - "plane_output" : [], - "nodal_results" : ["DISPLACEMENT","REACTION","VELOCITY","ACCELERATION"], - "gauss_point_results" : ["GREEN_LAGRANGE_STRAIN_TENSOR","CAUCHY_STRESS_TENSOR","VON_MISES_STRESS"], - "additional_list_files": [] - - }, - "point_data_configuration" : [] - } - -} diff --git a/kratos.gid/apps/Pfem/write/design.txt b/kratos.gid/apps/Pfem/write/design.txt deleted file mode 100644 index 8716c2cf9..000000000 --- a/kratos.gid/apps/Pfem/write/design.txt +++ /dev/null @@ -1,61 +0,0 @@ -------------------------------- -ProblemType Tree: Proposta (hi ha coses que es poden ampliar i d'altres simplificar) - -Parts - Solid - Deformable - Rigid - Fluid - -( Select: Element, ConstitutiveLaw, Material, Body ) (igual que la SolidMechanics + el Body) - - -Bodies - -(Select: Type(Deformable_Solid, Rigid_Solid, Fluid), Meshing_Strategy, Contact_Strategy) - --------------- - -Meshing_Strategies - -(Select: No_Remesh, Remesh, Remesh and Refine ) a cada opció preguntar els paràmetres necessaris per la configuració del json. El Rigid_Solid_Body només No_Remesh. Habitualment hi haurà un sol Fluid_Body amb una única Meshing_Strategy, i cada Deformable_Solid_Body amb la seva meshing_strategy. - - -Contact_Strategies - -(Select: No_Contact, Deformable_Contact, Rigid_Contact) només existeixen aquestes tres, i no s'en poden afegir, un Deformable_Solid pot escollir: No_Contact or Deformable_Contact, un Rigid_Solid pot escollir només Rigid_Contact, i el Fluid només No_Contact. - -Se sobrentén que el fluid sempre trobarà les parets o rigid_bodies (no hi ha element de contacte), el sòlid trobarà les parets o rigid_bodies utilitzant la Rigid_Contact strategy. Per detectar el contacte entre Deformable_Bodies, un o tots ells han de seleccionar la Deformable_Contact_strategy. - - -Time Intervals / Time Functions / Boundary Conditions / Loads / Results / Materials -(igual que la SolidMechanics) - - -Solution - Solution_type (igual que la SolidMechanics) - - Solution_Strategy (igual que la SolidMechanics) - - Strategy_Parameters (igual que la SolidMechanics) - - Time_Parameters (igual que la SolidMechanics) - - Restart ( demano si carrego un .rest, necessito un Label ) - - Parallel_type (igual que la SolidMechanics + Selecció de threads) - - Linear_solver (igual que la SolidMechanics) - - -------------------------------- -arxius de input: - - -problem_name.mdpa (igual que la SolidMechanics) afegint submodelparts per BODIES creats (un body es un conjunt de les seves PARTS) -materials.py (igual de la Solid Mechanics, suposo que en el futur desepareixerà) -ProjectParamters.json (el que hi ha a la carpeta write) - - - - diff --git a/kratos.gid/apps/Pfem/write/write.tcl b/kratos.gid/apps/Pfem/write/write.tcl deleted file mode 100644 index 99901d142..000000000 --- a/kratos.gid/apps/Pfem/write/write.tcl +++ /dev/null @@ -1,259 +0,0 @@ -namespace eval Pfem::write { - variable remesh_domains_dict - variable bodies_list - variable writeAttributes -} - -proc Pfem::write::Init { } { - variable remesh_domains_dict - set remesh_domains [dict create ] - variable bodies_list - set bodies_list [list ] - Solid::write::AddValidApps "Pfem" - - SetAttribute parts_un PFEM_Parts - SetAttribute nodal_conditions_un PFEM_NodalConditions - SetAttribute conditions_un PFEM_Loads - SetAttribute materials_un PFEM_Materials - SetAttribute writeCoordinatesByGroups 0 - SetAttribute validApps [list "Pfem"] - SetAttribute materials_file "Materials.json" - SetAttribute properties_location "json" -} - -proc Pfem::write::writeParametersEvent { } { - write::WriteJSON [getParametersDict] - write::SetParallelismConfiguration -} - -# Model Part Blocks -proc Pfem::write::writeModelPartEvent { } { - # Init data - SetAttribute main_script_file [Pfem::write::GetMainScriptFilename] - write::initWriteConfiguration [GetAttributes] - - # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::writeMaterials "Pfem" - - # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) - if {[GetAttribute writeCoordinatesByGroups]} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} - - # Element connectivities (Groups on FLParts) - write::writeElementConnectivities - - # Nodal conditions and conditions - Solid::write::writeConditions - - # SubmodelParts - Pfem::write::writeSubmodelParts -} - -proc Pfem::write::writeSubmodelParts { } { - # Submodelparts for Parts - write::writePartSubModelPart - - # Solo Malla , no en conditions - writeNodalConditions [GetAttribute nodal_conditions_un] - - # A Condition y a meshes-> salvo lo que no tenga topologia - Solid::write::writeLoads -} - - -proc Pfem::write::writeNodalConditions { keyword } { - write::writeNodalConditions $keyword - return "" - - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute $keyword]/container/blockdata" - set groups [$root selectNodes $xp1] - foreach group $groups { - set cid [[$group parent] @n] - set groupid [$group @name] - set groupid [write::GetWriteGroupName $groupid] - # TODO: Aqui hay que gestionar la escritura de los bodies - # Una opcion es crear un megagrupo temporal con esa informacion, mandar a pintar, y luego borrar el grupo. - # Otra opcion es no escribir el submodelpart. Ya tienen las parts y el project parameters tiene el conformado de los bodies - ::write::writeGroupSubModelPart $cid $groupid "nodal" - } -} - -# Custom files (Copy python scripts, write materials file...) -proc Pfem::write::writeCustomFilesEvent { } { - Pfem::write::WriteMaterialsFile - - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name] - write::RenameFileInModel $orig_name "MainKratos.py" -} - -proc Pfem::write::WriteMaterialsFile { } { - variable validApps - - set mats_json [Pfem::write::getPropertiesList [GetAttribute parts_un]] - - write::OpenFile [GetAttribute materials_file] - write::WriteJSON $mats_json - write::CloseFile -} - -proc Pfem::write::getPropertiesList {parts_un} { - set mat_dict [write::getMatDict] - set props_dict [dict create] - set props [list ] - set sections [list ] - - set python_module "assign_materials_process" - set process_name "AssignMaterialsProcess" - set help "This process creates a material and assigns its properties" - - #set doc $gid_groups_conds::doc - #set root [$doc documentElement] - set root [customlib::GetBaseRoot] - - set xp1 "[spdAux::getRoute $parts_un]/group" - foreach gNode [$root selectNodes $xp1] { - set group [get_domnode_attribute $gNode n] - set sub_model_part [write::getSubModelPartId Parts $group] - if { [dict exists $mat_dict $group] } { - set law_id [dict get $mat_dict $group MID] - set law_name [dict get $mat_dict $group ConstitutiveLaw] - if { $law_name ne "None" } { - - set law_type [[Model::getConstitutiveLaw $law_name] getAttribute "Type"] - set mat_name [dict get $mat_dict $group Material] - set prop_dict [dict create] - set kratos_module [[Model::getConstitutiveLaw $law_name] getAttribute "kratos_module"] - - dict set prop_dict "python_module" $python_module - dict set prop_dict "kratos_module" $kratos_module - dict set prop_dict "help" $help - dict set prop_dict "process_name" $process_name - - set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set variables_dict [dict create] - foreach prop [dict keys [dict get $mat_dict $group] ] { - if {$prop ni $exclusionList} { - dict set variables_list $prop [write::getFormattedValue [dict get $mat_dict $group $prop]] - } - } - set material_dict [dict create] - dict set material_dict "model_part_name" $sub_model_part - dict set material_dict "properties_id" $law_id - dict set material_dict "material_name" $mat_name - - set law_full_name [join [list "KratosMultiphysics" $kratos_module $law_name] "."] - dict set material_dict constitutive_law [dict create name $law_full_name] - dict set material_dict variables $variables_list - dict set material_dict tables dictnull - dict set prop_dict Parameters $material_dict - - lappend props $prop_dict - } - } - - } - - - dict set props_dict material_models_list $props - - return $props_dict -} - - - -proc Pfem::write::GetDefaultOutputDict { {appid ""} } { - set outputDict [dict create] - set resultDict [dict create] - - if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} - set GiDPostDict [dict create] - dict set GiDPostDict GiDPostMode [write::getValue $results_UN GiDPostMode] - dict set GiDPostDict WriteDeformedMeshFlag [write::getValue $results_UN GiDWriteMeshFlag] - dict set GiDPostDict WriteConditionsFlag [write::getValue $results_UN GiDWriteConditionsFlag] - dict set GiDPostDict MultiFileFlag [write::getValue $results_UN GiDMultiFileFlag] - dict set resultDict gidpost_flags $GiDPostDict - - dict set resultDict file_label [write::getValue $results_UN FileLabel] - set outputCT [write::getValue $results_UN OutputControlType] - dict set resultDict output_control_type $outputCT - if {$outputCT eq "time"} {set frequency [write::getValue $results_UN OutputDeltaTime]} {set frequency [write::getValue $results_UN OutputDeltaStep]} - dict set resultDict output_interval $frequency - - dict set resultDict node_output [write::getValue $results_UN NodeOutput] - - #dict set resultDict plane_output [write::GetCutPlanesList $results_UN] - - set nodal_results [write::GetResultsList $results_UN OnNodes] - - set problemtype [write::getValue PFEM_DomainType] - set contact_active False - if {$problemtype ne "Fluid"} { - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - foreach body_node [$root selectNodes $xp1] { - set contact [get_domnode_attribute [$body_node selectNodes ".//value\[@n='ContactStrategy'\]"] v] - if {$contact eq "Yes"} { set contact_active True } - } - if {$contact_active eq True} { - lappend nodal_results "CONTACT_FORCE" - lappend nodal_results "NORMAL" - } - } - - if {$problemtype ne "Solid"} { - if {$contact_active ne True} { - lappend nodal_results "NORMAL" - } - set nodal_flags_results [list] - lappend nodal_flags_results "FREE_SURFACE" "INLET" - dict set resultDict nodal_flags_results $nodal_flags_results - } - - dict set resultDict nodal_results $nodal_results - dict set resultDict gauss_point_results [write::GetResultsList $results_UN OnElement] - - dict set outputDict "result_file_configuration" $resultDict - #dict set outputDict "point_data_configuration" [write::GetEmptyList] - return $outputDict -} - -proc Pfem::write::GetMainScriptFilename { } { - set problemtype [write::getValue PFEM_DomainType] - return "RunPfem.py" -} - -# Functions to use the write attribute system -proc Pfem::write::GetAttribute {att} { - variable writeAttributes - return [dict get $writeAttributes $att] -} - -proc Pfem::write::GetAttributes {} { - variable writeAttributes - return $writeAttributes -} - -proc Pfem::write::SetAttribute {att val} { - variable writeAttributes - dict set writeAttributes $att $val -} - -proc Pfem::write::AddAttribute {att val} { - variable writeAttributes - dict lappend writeAttributes $att $val -} - -proc Pfem::write::AddAttributes {configuration} { - variable writeAttributes - set writeAttributes [dict merge $writeAttributes $configuration] -} - -proc Pfem::write::AddValidApps {appid} { - AddAttribute validApps $appid -} - -Pfem::write::Init diff --git a/kratos.gid/apps/Pfem/write/writeProjectParameters.tcl b/kratos.gid/apps/Pfem/write/writeProjectParameters.tcl deleted file mode 100644 index ca678919b..000000000 --- a/kratos.gid/apps/Pfem/write/writeProjectParameters.tcl +++ /dev/null @@ -1,887 +0,0 @@ - -# Project Parameters -proc Pfem::write::getParametersDict { } { - Pfem::write::CalculateMyVariables - set projectParametersDict [dict create] - - ##### Problem data ##### - # Create section - set problemDataDict [GetPFEM_ProblemDataDict] - dict set projectParametersDict problem_data $problemDataDict - - ##### model_data ##### - set modelDataDict [GetPFEM_ModelDataDict] - dict set projectParametersDict model_settings $modelDataDict - - ##### Time settings ##### - set timeDataDict [dict create] - dict set timeDataDict time_step [write::getValue PFEM_TimeParameters DeltaTime] - dict set timeDataDict end_time [write::getValue PFEM_TimeParameters EndTime] - dict set projectParametersDict time_settings $timeDataDict - - ##### solver_settings ##### - set solverSettingsDict [GetPFEM_SolverSettingsDict] - dict set projectParametersDict solver_settings $solverSettingsDict - - ##### problem_process_list - set problemProcessList [GetPFEM_ProblemProcessList] - dict set projectParametersDict problem_process_list $problemProcessList - - ##### constraints_process_list - set group_constraints [Pfem::write::getConditionsParametersDict PFEM_NodalConditions "Nodal"] - set body_constraints [Pfem::write::getBodyConditionsParametersDict PFEM_NodalConditions "Nodal"] - dict set projectParametersDict constraints_process_list [concat $group_constraints $body_constraints] - - ##### loads_process_list - dict set projectParametersDict loads_process_list [Pfem::write::GetConditionsParametersDictWithGravity] - - ##### Restart - set output_process_list [GetPFEM_OutputProcessList] - dict set projectParametersDict output_process_list $output_process_list - - ##### output_configuration - dict set projectParametersDict output_configuration [Pfem::write::GetDefaultOutputDict] - - return $projectParametersDict -} - -proc Pfem::write::GetConditionsParametersDictWithGravity { } { - set loads_list [Pfem::write::getConditionsParametersDict PFEM_Loads] - set problemtype [write::getValue PFEM_DomainType] - if {$problemtype ne "Solid"} { - - set cx [write::getValue FLGravity Cx] - set cy [write::getValue FLGravity Cy] - set cz [write::getValue FLGravity Cz] - - set fluid_bodies_list [Pfem::write::GetFluidBodies] - - foreach body $fluid_bodies_list { - - set processDict [dict create] - set parametersDict [dict create] - - dict set parametersDict "model_part_name" $body - dict set parametersDict "variable_name" "VOLUME_ACCELERATION" - dict set parametersDict "value" [list $cx $cy $cz] - dict set parametersDict "constrained" false - - dict set processDict python_module "assign_vector_components_to_nodes_process" - dict set processDict kratos_module "KratosMultiphysics.SolidMechanicsApplication" - dict set processDict Parameters $parametersDict - - lappend loads_list $processDict - } - } - return $loads_list -} -proc Pfem::write::GetPFEM_ProblemDataDict { } { - set problemDataDict [dict create] - dict set problemDataDict problem_name [Kratos::GetModelName] - - dict set problemDataDict echo_level [write::getValue Results EchoLevel] - - #dict set problemDataDict threads [write::getValue Parallelization OpenMPNumberOfThreads] - - #set problemtype [write::getValue PFEM_DomainType] - #if {$problemtype ne "Solid"} { - # set cx [write::getValue FLGravity Cx] - # set cy [write::getValue FLGravity Cy] - # set cz [write::getValue FLGravity Cz] - # dict set problemDataDict gravity_vector [list $cx $cy $cz] - #} - - return $problemDataDict -} - -proc Pfem::write::GetPFEM_ModelDataDict { } { - variable bodies_list - set modelDataDict [dict create] - dict set modelDataDict model_name [Kratos::GetModelName] - - set nDim $::Model::SpatialDimension - set nDim [expr [string range [write::getValue nDim] 0 0] ] - dict set modelDataDict dimension $nDim - - # model import settings - set modelDict [dict create] - #dict set modelDict type "mdpa" - dict set modelDict name [Kratos::GetModelName] - #dict set modelDict label 0 - dict set modelDataDict input_file_settings $modelDict - - set bodies_parts_list [list ] - foreach body $bodies_list { - set body_parts [dict get $body parts_list] - foreach part $body_parts { - lappend bodies_parts_list $part - } - } - - dict set modelDataDict bodies_list $bodies_list - dict set modelDataDict domain_parts_list $bodies_parts_list - dict set modelDataDict processes_parts_list [write::getSubModelPartNames "PFEM_NodalConditions" "PFEM_Loads"] - - return $modelDataDict -} - -proc Pfem::write::GetPFEM_SolverSettingsDict { } { - - set equationType [write::getValue PFEM_EquationType] - set solverSettingsDict [dict create] - set strategyId [write::getValue PFEM_SolStrat] - set strategy_write_name [[::Model::GetSolutionStrategy $strategyId] getAttribute "python_module"] - - if {$equationType eq "Monolithic"} { - return [GetPFEM_MonolithicSolverSettingsDict $strategy_write_name [DofsInElements]] - } else { - - # Solver type - dict set solverSettingsDict solver_type $strategy_write_name - # Solver parameters - set solverParametersDict [dict create] - set solver_name "solid_mechanics_implicit_dynamic_solver" - - set solversList [list ] - foreach dof [DofsInElements] { - lappend solversList [GetPFEM_MonolithicSolverSettingsDict $solver_name $dof] - } - - dict set solverParametersDict solvers $solversList - - # Set parameters to solver settings - dict set solverSettingsDict Parameters $solverParametersDict - - return $solverSettingsDict - } -} - -proc Pfem::write::GetPFEM_MonolithicSolverSettingsDict { solver_name dofs } { - - set solverSettingsDict [dict create] - - dict set solverSettingsDict solver_type $solver_name - - # Solver parameters - set solverParametersDict [dict create] - - # Time integration settings - set integrationDataDict [dict create] - - dict set integrationDataDict solution_type [write::getValue PFEM_SolutionType] - - set solutiontype [write::getValue PFEM_SolutionType] - - if {$solutiontype ne "Dynamic"} { - dict set integrationDataDict integration_method "Static" - dict set integrationDataDict analysis_type [write::getValue PFEM_AnalysisType] - } else { - if {$dofs eq "PRESSURE"} { - dict set integrationDataDict integration_method "Bdf" - dict set integrationDataDict time_integration_order 1 - dict set integrationDataDict analysis_type "Non-linear" - } else { - dict set integrationDataDict time_integration "Implicit" - dict set integrationDataDict integration_method [write::getValue PFEM_Scheme] - } - } - - # Solving strategy settings - set strategyDataDict [dict create] - - # Solution strategy parameters and Solvers - set strategyDataDict [dict merge $strategyDataDict [write::getSolutionStrategyParametersDict] ] - - # Get integration order as term for the integration settings - set exist_time_integration [dict exists $strategyDataDict time_integration_order] - if {$exist_time_integration eq 1} { - dict set integrationDataDict time_integration_order [dict get $strategyDataDict time_integration_order] - dict unset strategyDataDict time_integration_order - } - - # Buffer size for contact - set contact_list [Pfem::write::GetPFEM_ContactList] - set buffer_size 2 - if {[llength $contact_list]} { - set buffer_size 3 - } - dict set integrationDataDict buffer_size [expr $buffer_size] - - dict set solverParametersDict time_integration_settings $integrationDataDict - - # Get convergence criterion settings - set convergenceDataDict [dict create] - set exist_convergence_criterion [dict exists $strategyDataDict convergence_criterion] - if {$exist_convergence_criterion eq 1} { - dict set convergenceDataDict convergence_criterion [dict get $strategyDataDict convergence_criterion] - dict unset strategyDataDict convergence_criterion - set exist_variable_tolerances [dict exists $strategyDataDict variable_relative_tolerance] - if {$exist_variable_tolerances eq 1} { - dict set convergenceDataDict variable_relative_tolerance [dict get $strategyDataDict variable_relative_tolerance] - dict set convergenceDataDict variable_absolute_tolerance [dict get $strategyDataDict variable_absolute_tolerance] - dict unset strategyDataDict variable_relative_tolerance - dict unset strategyDataDict variable_absolute_tolerance - } - set exist_residual_tolerances [dict exists $strategyDataDict residual_relative_tolerance] - if {$exist_residual_tolerances eq 1} { - dict set convergenceDataDict residual_relative_tolerance [dict get $strategyDataDict residual_relative_tolerance] - dict set convergenceDataDict residual_absolute_tolerance [dict get $strategyDataDict residual_absolute_tolerance] - dict unset strategyDataDict residual_relative_tolerance - dict unset strategyDataDict residual_absolute_tolerance - } - } - - dict set solverParametersDict convergence_criterion_settings $convergenceDataDict - - set reform_dofs true - dict set strategyDataDict reform_dofs_at_each_step [expr $reform_dofs] - - set strategy_data_size [dict size $strategyDataDict] - if { $strategy_data_size ne 0 } { - dict set solverParametersDict solving_strategy_settings $strategyDataDict - } - - # Linear solver settings - set solverParametersDict [dict merge $solverParametersDict [write::getSolversParametersDict Pfem] ] - - # Add Dofs - # here [list {*}$dofs] forces the to be a list of items for correct writting json file (DARK TRICK) - dict set solverParametersDict dofs [list {*}$dofs] - - dict set solverSettingsDict Parameters $solverParametersDict - - - return $solverSettingsDict -} - -proc Pfem::write::GetPFEM_OutputProcessList { } { - set resultList [list] - lappend resultList [write::GetRestartProcess Restart] - return $resultList -} -proc Pfem::write::GetPFEM_ProblemProcessList { } { - set resultList [list ] - set problemtype [write::getValue PFEM_DomainType] - if {$problemtype ne "Solid"} { - lappend resultList [GetPFEM_FluidRemeshDict] - } else { - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - set remesh_list [list ] - foreach body_node [$root selectNodes $xp1] { - set remesh [get_domnode_attribute [$body_node selectNodes ".//value\[@n='MeshingStrategy'\]"] v] - if {$remesh ne "No remesh" && $remesh ne ""} {lappend remesh_list $remesh} - } - if {[llength $remesh_list]} { - lappend resultList [GetPFEM_RemeshDict] - } - } - set contactDict [GetPFEM_ContactDict] - if {[dict size $contactDict]} {lappend resultList $contactDict} - return $resultList -} - -proc Pfem::write::GetPFEM_ContactList { } { - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - set contact_list [list ] - foreach body_node [$root selectNodes $xp1] { - set contact [get_domnode_attribute [$body_node selectNodes ".//value\[@n='ContactStrategy'\]"] v] - if {$contact ne "No" && $contact ne "" && $contact ni $contact_list} {lappend contact_list $contact} - } - return $contact_list -} - -proc Pfem::write::GetPFEM_ContactDict { } { - - set contact_list [Pfem::write::GetPFEM_ContactList] - #W $contact_list - set contact_domains [list ] - foreach contact $contact_list { - lappend contact_domains [Pfem::write::GetPFEM_ContactProcessDict $contact] - } - set contact_dict [dict create] - if {[llength $contact_list]} { - dict set contact_dict "python_module" "contact_domain_process" - dict set contact_dict "kratos_module" "KratosMultiphysics.ContactMechanicsApplication" - dict set contact_dict "help" "This process applies contact domain search by remeshing outer boundaries" - dict set contact_dict "process_name" "ContactDomainProcess" - set params [dict create] - set model_name [Kratos::GetModelName] - dict set params "model_part_name" $model_name - dict set params "meshing_control_type" "step" - set frequency [Pfem::write::GetContactProperty "Solid-Solid" "Frequency"] - dict set params "meshing_frequency" [expr $frequency] - dict set params "meshing_before_output" true - dict set params "meshing_domains" $contact_domains - dict set contact_dict "Parameters" $params - } - return $contact_dict -} - -proc Pfem::write::GetPFEM_ContactProcessDict {contact_name} { - set cont_dict [dict create] - dict set cont_dict "python_module" "contact_domain" - set mesh_strat [dict create] - dict set mesh_strat "python_module" "contact_meshing_strategy" - set contact_parameters [dict create] - - set penalty_method [Pfem::write::GetContactProperty "Solid-Solid" "Penalty"] - set nDim $::Model::SpatialDimension - if {$nDim eq "3D"} { - if {$penalty_method eq "true"} { - dict set contact_parameters "contact_condition_type" "ContactDomainPenaltyCondition3D4N" - } else { - dict set contact_parameters "contact_condition_type" "ContactDomainLMCondition3D4N" - } - } else { - if {$penalty_method eq "true"} { - dict set contact_parameters "contact_condition_type" "ContactDomainPenaltyCondition2D3N" - } else { - dict set contact_parameters "contact_condition_type" "ContactDomainLMCondition2D3N" - } - } - - dict set contact_parameters "friction_law_type" "FrictionLaw" - dict set contact_parameters "kratos_module" "KratosMultiphysics.ContactMechanicsApplication" - set properties_dict [dict create] - - set prop_list [list ] - if {$penalty_method eq "true"} { - lappend prop_list "PENALTY_PARAMETER" - } else { - lappend prop_list "TAU_STAB" - } - - set friction_active [Pfem::write::GetContactProperty "Solid-Solid" "FRICTION_ACTIVE"] - if {$friction_active eq "true"} { - lappend prop_list "FRICTION_ACTIVE" - lappend prop_list "MU_STATIC" - lappend prop_list "MU_DYNAMIC" - if {$penalty_method eq "true"} { - lappend prop_list "TANGENTIAL_PENALTY_RATIO" - } - } else { - lappend prop_list "FRICTION_ACTIVE" - } - - foreach prop $prop_list { - set prop_value [Pfem::write::GetContactProperty "Solid-Solid" $prop] - set prop_value [expr $prop_value] - dict set properties_dict $prop $prop_value - } - - dict set contact_parameters "variables_of_properties" $properties_dict - dict set mesh_strat "contact_parameters" $contact_parameters - dict set cont_dict "elemental_variables_to_transfer" [list "CAUCHY_STRESS_VECTOR" "DEFORMATION_GRADIENT" ] - dict set cont_dict "contact_bodies_list" [Pfem::write::GetSolidBodiesWithContact] - dict set cont_dict "meshing_strategy" $mesh_strat - return $cont_dict -} - -proc Pfem::write::GetFluidBodies { } { - set bodies_list [list ] - # Locate the node pointing to the bodies - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - foreach body_node [[customlib::GetBaseRoot] selectNodes $xp1] { - # If the body is Fluid - set body_type_path ".//value\[@n='BodyType'\]" - set body_type [get_domnode_attribute [$body_node selectNodes $body_type_path] v] - # Append to the return list - if {$body_type eq "Fluid"} {lappend bodies_list [get_domnode_attribute $body_node name]} - } - - return $bodies_list -} - -proc Pfem::write::GetSolidBodiesWithContact { } { - set bodies_list [list ] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - foreach body_node [[customlib::GetBaseRoot] selectNodes $xp1] { - set contact [get_domnode_attribute [$body_node selectNodes ".//value\[@n='ContactStrategy'\]"] v] - if {$contact eq "Yes"} {lappend bodies_list [get_domnode_attribute $body_node name]} - } - return $bodies_list -} - -proc Pfem::write::GetContactProperty { contact_name property } { - set ret "" - set root [customlib::GetBaseRoot] - set ret [get_domnode_attribute [$root selectNodes "[spdAux::getRoute "PFEM_contacts"]/container\[@n='$contact_name'\]/value\[@n='$property'\]"] v] - - if {$ret eq ""} {set ret null} - return $ret -} - -proc Pfem::write::GetPFEM_RemeshDict { } { - variable bodies_list - set resultDict [dict create ] - dict set resultDict "help" "This process applies meshing to the problem domains" - dict set resultDict "kratos_module" "KratosMultiphysics.PfemApplication" - dict set resultDict "python_module" "remesh_domains_process" - dict set resultDict "process_name" "RemeshDomainsProcess" - - set paramsDict [dict create] - set model_name [Kratos::GetModelName] - dict set paramsDict "model_part_name" $model_name - dict set paramsDict "meshing_control_type" "step" - dict set paramsDict "meshing_frequency" 1.0 - dict set paramsDict "meshing_before_output" true - set meshing_domains_list [list ] - foreach body $bodies_list { - set bodyDict [dict create ] - set body_name [dict get $body body_name] - set remesh [write::getStringBinaryFromValue [Pfem::write::GetRemeshProperty $body_name "Remesh"]] - if { $remesh eq "true" } { - dict set bodyDict "python_module" "meshing_domain" - dict set bodyDict "model_part_name" $body_name - dict set bodyDict "alpha_shape" 2.4 - dict set bodyDict "offset_factor" 0.0 - set refine [write::getStringBinaryFromValue [Pfem::write::GetRemeshProperty $body_name "Refine"]] - set meshing_strategyDict [dict create ] - dict set meshing_strategyDict "python_module" "meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 - dict set meshing_strategyDict "remesh" $remesh - dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false - dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] - set nDim $::Model::SpatialDimension - if {$nDim eq "3D"} { - dict set meshing_strategyDict "reference_element_type" "Element3D4N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" - } else { - dict set meshing_strategyDict "reference_element_type" "Element2D3N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" - } - dict set bodyDict meshing_strategy $meshing_strategyDict - - set spatial_bounding_boxDict [dict create ] - set upX [expr 0.0]; set upY [expr 0.0]; set upZ [expr 0.0] - dict set spatial_bounding_boxDict "upper_point" [list $upX $upY $upZ] - set lpX [expr 0.0]; set lpY [expr 0.0]; set lpZ [expr 0.0] - dict set spatial_bounding_boxDict "lower_point" [list $lpX $lpY $lpZ] - set vlX [expr 0.0]; set vlY [expr 0.0]; set vlZ [expr 0.0] - dict set spatial_bounding_boxDict "velocity" [list $vlX $vlY $vlZ] - dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict - - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" true - dict set refining_parametersDict "insert_nodes" false - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" false - dict set remove_nodesDict "on_distance" false - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" false - dict set refine_elementsDict "on_distance" false - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - set refining_boxDict [dict create] - dict set refining_boxDict "refine_in_box_only" false - set upX [expr 0.0]; set upY [expr 0.0]; set upZ [expr 0.0] - dict set refining_boxDict "upper_point" [list $upX $upY $upZ] - set lpX [expr 0.0]; set lpY [expr 0.0]; set lpZ [expr 0.0] - dict set refining_boxDict "lower_point" [list $lpX $lpY $lpZ] - set vlX [expr 0.0]; set vlY [expr 0.0]; set vlZ [expr 0.0] - dict set refining_boxDict "velocity" [list $vlX $vlY $vlZ] - dict set refining_parametersDict refining_box $refining_boxDict - - dict set bodyDict refining_parameters $refining_parametersDict - - dict set bodyDict "elemental_variables_to_transfer" [list "CAUCHY_STRESS_VECTOR" "DEFORMATION_GRADIENT"] - lappend meshing_domains_list $bodyDict - } - } - dict set paramsDict meshing_domains $meshing_domains_list - dict set resultDict Parameters $paramsDict - return $resultDict -} - -proc Pfem::write::GetPFEM_FluidRemeshDict { } { - variable bodies_list - set resultDict [dict create ] - dict set resultDict "help" "This process applies meshing to the problem domains" - dict set resultDict "kratos_module" "KratosMultiphysics.PfemApplication" - set problemtype [write::getValue PFEM_DomainType] - - dict set resultDict "python_module" "remesh_fluid_domains_process" - dict set resultDict "process_name" "RemeshFluidDomainsProcess" - - set paramsDict [dict create] - set model_name [Kratos::GetModelName] - dict set paramsDict "model_part_name" $model_name - dict set paramsDict "meshing_control_type" "step" - dict set paramsDict "meshing_frequency" 1.0 - dict set paramsDict "meshing_before_output" true - set meshing_domains_list [list ] - foreach body $bodies_list { - set bodyDict [dict create ] - set body_name [dict get $body body_name] - set remesh [write::getStringBinaryFromValue [Pfem::write::GetRemeshProperty $body_name "Remesh"]] - if { $remesh eq "true" } { - dict set bodyDict "model_part_name" $body_name - dict set bodyDict "python_module" "meshing_domain" - set nDim $::Model::SpatialDimension - if {$nDim eq "3D"} { - dict set bodyDict "alpha_shape" 1.3 - } else { - dict set bodyDict "alpha_shape" 1.25 - } - dict set bodyDict "offset_factor" 0.0 - set refine [write::getStringBinaryFromValue [Pfem::write::GetRemeshProperty $body_name "Refine"]] - set meshing_strategyDict [dict create ] - dict set meshing_strategyDict "python_module" "fluid_meshing_strategy" - dict set meshing_strategyDict "meshing_frequency" 0 - dict set meshing_strategyDict "remesh" $remesh - dict set meshing_strategyDict "refine" $refine - dict set meshing_strategyDict "reconnect" false - dict set meshing_strategyDict "transfer" false - dict set meshing_strategyDict "constrained" false - dict set meshing_strategyDict "mesh_smoothing" false - dict set meshing_strategyDict "variables_smoothing" false - dict set meshing_strategyDict "elemental_variables_to_smooth" [list "DETERMINANT_F" ] - if {$nDim eq "3D"} { - dict set meshing_strategyDict "reference_element_type" "UpdatedLagrangianSegregatedFluidElement3D4N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition3D3N" - } else { - dict set meshing_strategyDict "reference_element_type" "UpdatedLagrangianSegregatedFluidElement2D3N" - dict set meshing_strategyDict "reference_condition_type" "CompositeCondition2D2N" - } - dict set bodyDict meshing_strategy $meshing_strategyDict - - set spatial_bounding_boxDict [dict create ] - set upX [expr 0.0]; set upY [expr 0.0]; set upZ [expr 0.0] - dict set spatial_bounding_boxDict "upper_point" [list $upX $upY $upZ] - set lpX [expr 0.0]; set lpY [expr 0.0]; set lpZ [expr 0.0] - dict set spatial_bounding_boxDict "lower_point" [list $lpX $lpY $lpZ] - set vlX [expr 0.0]; set vlY [expr 0.0]; set vlZ [expr 0.0] - dict set spatial_bounding_boxDict "velocity" [list $vlX $vlY $vlZ] - dict set bodyDict spatial_bounding_box $spatial_bounding_boxDict - - set refining_parametersDict [dict create ] - dict set refining_parametersDict "critical_size" 0.0 - dict set refining_parametersDict "threshold_variable" "PLASTIC_STRAIN" - dict set refining_parametersDict "reference_threshold" 0.0 - dict set refining_parametersDict "error_variable" "NORM_ISOCHORIC_STRESS" - dict set refining_parametersDict "reference_error" 0.0 - dict set refining_parametersDict "add_nodes" false - dict set refining_parametersDict "insert_nodes" true - - set remove_nodesDict [dict create] - dict set remove_nodesDict "apply_removal" true - dict set remove_nodesDict "on_distance" true - dict set remove_nodesDict "on_threshold" false - dict set remove_nodesDict "on_error" false - dict set refining_parametersDict remove_nodes $remove_nodesDict - - set remove_boundaryDict [dict create] - dict set remove_boundaryDict "apply_removal" false - dict set remove_boundaryDict "on_distance" false - dict set remove_boundaryDict "on_threshold" false - dict set remove_boundaryDict "on_error" false - dict set refining_parametersDict remove_boundary $remove_boundaryDict - - set refine_elementsDict [dict create] - dict set refine_elementsDict "apply_refinement" true - dict set refine_elementsDict "on_distance" true - dict set refine_elementsDict "on_threshold" false - dict set refine_elementsDict "on_error" false - dict set refining_parametersDict refine_elements $refine_elementsDict - - set refine_boundaryDict [dict create] - dict set refine_boundaryDict "apply_refinement" false - dict set refine_boundaryDict "on_distance" false - dict set refine_boundaryDict "on_threshold" false - dict set refine_boundaryDict "on_error" false - dict set refining_parametersDict refine_boundary $refine_boundaryDict - - set refining_boxDict [dict create] - dict set refining_boxDict "refine_in_box_only" false - set upX [expr 0.0]; set upY [expr 0.0]; set upZ [expr 0.0] - dict set refining_boxDict "upper_point" [list $upX $upY $upZ] - set lpX [expr 0.0]; set lpY [expr 0.0]; set lpZ [expr 0.0] - dict set refining_boxDict "lower_point" [list $lpX $lpY $lpZ] - set vlX [expr 0.0]; set vlY [expr 0.0]; set vlZ [expr 0.0] - dict set refining_boxDict "velocity" [list $vlX $vlY $vlZ] - dict set refining_parametersDict refining_box $refining_boxDict - - dict set bodyDict refining_parameters $refining_parametersDict - - dict set bodyDict "elemental_variables_to_transfer" [list "CAUCHY_STRESS_VECTOR" "DEFORMATION_GRADIENT"] - lappend meshing_domains_list $bodyDict - } - } - dict set paramsDict meshing_domains $meshing_domains_list - dict set resultDict Parameters $paramsDict - return $resultDict -} - -proc Pfem::write::GetRemeshProperty { body_name property } { - set ret "" - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - set remesh_name "" - foreach body_node [$root selectNodes $xp1] { - if {[$body_node @name] eq $body_name} { - set remesh_name [get_domnode_attribute [$body_node selectNodes ".//value\[@n='MeshingStrategy'\]"] v] - break - } - } - if {$remesh_name ne ""} { - variable remesh_domains_dict - if {[dict exists $remesh_domains_dict ${remesh_name} $property]} { - set ret [dict get $remesh_domains_dict ${remesh_name} $property] - } - } - if {$ret eq ""} {set ret false} - return $ret -} - - -proc Pfem::write::ProcessBodiesList { } { - customlib::UpdateDocument - set bodiesList [list ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - foreach body_node [$root selectNodes $xp1] { - set body [dict create] - set name [$body_node @name] - set body_type_path ".//value\[@n='BodyType'\]" - set body_type [get_domnode_attribute [$body_node selectNodes $body_type_path] v] - set parts [list ] - foreach part_node [$body_node selectNodes "./container\[@n = 'Groups'\]/blockdata\[@n='Group'\]"] { - lappend parts [write::getSubModelPartId "Parts" [$part_node @name]] - } - dict set body "body_type" $body_type - dict set body "body_name" $name - dict set body "parts_list" $parts - lappend bodiesList $body - } - return $bodiesList -} - -proc Pfem::write::GetNodalDataDict { } { - set root [customlib::GetBaseRoot] - set NodalData [list ] - set parts [list "PFEM_Rigid2DParts" "PFEM_Rigid3DParts" "PFEM_Deformable2DParts" "PFEM_Deformable3DParts" "PFEM_Fluid2DParts" "PFEM_Fluid3DParts"] - - foreach part $parts { - set xp1 "[spdAux::getRoute $part]/group" - set groups [$root selectNodes $xp1] - foreach group $groups { - set partid [[$group parent] @n] - set groupid [$group @n] - set processDict [dict create] - dict set processDict process_name "ApplyValuesToNodes" - dict set processDict kratos_module "KratosMultiphysics.PfemApplication" - - set params [dict create] - set xp2 "./value" - set atts [$group selectNodes $xp2] - #W "$group $groupid $atts" - foreach att $atts { - set state [get_domnode_attribute $att state] - if {$state ne "hidden"} { - set paramName [$att @n] - set paramValue [get_domnode_attribute $att v] - if {$paramName eq "Material"} { - set matdict [::write::getAllMaterialParametersDict $paramValue] - dict set matdict Name $paramValue - dict set params $paramName $matdict - } { - if {[write::isBoolean $paramValue]} {set paramValue [expr $paramValue]} - dict set params $paramName $paramValue - } - } - } - dict set params "model_part_name" [::write::getSubModelPartId $partid $groupid] - dict set processDict "Parameters" $params - lappend NodalData $processDict - } - } - - return $NodalData -} - -proc Pfem::write::ProcessRemeshDomainsDict { } { - customlib::UpdateDocument - set domains_dict [dict create ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_meshing_domains"]/blockdata" - foreach domain_node [$root selectNodes $xp1] { - set name [$domain_node @name] - foreach part_node [$domain_node selectNodes "./value"] { - dict set domains_dict $name [get_domnode_attribute $part_node n] [get_domnode_attribute $part_node v] - } - } - return $domains_dict -} - -proc Pfem::write::CalculateMyVariables { } { - variable bodies_list - set bodies_list [Pfem::write::ProcessBodiesList] - variable remesh_domains_dict - set remesh_domains_dict [Pfem::write::ProcessRemeshDomainsDict] -} - - - -proc Pfem::write::getBodyConditionsParametersDict {un {condition_type "Condition"}} { - set root [customlib::GetBaseRoot] - return [list ] - set bcCondsDict [list ] - - set xp1 "[spdAux::getRoute $un]/container/blockdata" - set blocks [$root selectNodes $xp1] - - foreach block $blocks { - set groupName [$block @name] - set cid [[$block parent] @n] - get_domnode_attribute [$block find n Body] values - set bodyId [get_domnode_attribute [$block find n Body] v] - - if {$condition_type eq "Condition"} { - error [= "Body conditions (not nodal) Not implemented yet."] - #set condition [::Model::getCondition $cid] - } { - set condition [Pfem::xml::getBodyNodalConditionById $cid] - } - set processName [$condition getProcessName] - #set processName [[$block parent] @processname] - - set process [::Model::GetProcess $processName] - set processDict [dict create] - set paramDict [dict create] - dict set paramDict model_part_name $bodyId - set vatiable_name [$condition getAttribute VariableName] - dict set paramDict variable_name [lindex $vatiable_name 0] - - set process_attributes [$process getAttributes] - set process_parameters [$process getInputs] - - dict set process_attributes process_name [dict get $process_attributes n] - dict unset process_attributes n - dict unset process_attributes pn - - set processDict [dict merge $processDict $process_attributes] - - foreach {inputName in_obj} $process_parameters { - set in_type [$in_obj getType] - if {$in_type eq "vector"} { - if {[$in_obj getAttribute vectorType] eq "bool"} { - set ValX [expr [get_domnode_attribute [$block find n ${inputName}X] v] ? True : False] - set ValY [expr [get_domnode_attribute [$block find n ${inputName}Y] v] ? True : False] - set ValZ [expr False] - if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [get_domnode_attribute [$block find n ${inputName}Z] v] ? True : False]} - dict set paramDict $inputName [list $ValX $ValY $ValZ] - } { - if {[$in_obj getAttribute "enabled"] in [list "1" "0"]} { - foreach i [list "X" "Y" "Z"] { - if {[expr [get_domnode_attribute [$block find n Enabled_$i] v] ] ne "Yes"} { - set Val$i null - } else { - set printed 0 - if {[$in_obj getAttribute "function"] eq "1"} { - if {[get_domnode_attribute [$block find n "ByFunction$i"] v] eq "Yes"} { - set funcinputName "${i}function_$inputName" - set value [get_domnode_attribute [$block find n $funcinputName] v] - set Val$i $value - set printed 1 - } - } - if {!$printed} { - set value [expr [get_domnode_attribute [$block find n ${inputName}$i] v] ] - set Val$i $value - } - } - } - } else { - set ValX [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}X]] ] - set ValY [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Y]] ] - set ValZ [expr 0.0] - if {[$block find n ${inputName}Z] ne ""} {set ValZ [expr [gid_groups_conds::convert_value_to_default [$block find n ${inputName}Z]]]} - } - dict set paramDict $inputName [list $ValX $ValY $ValZ] - } - } elseif {$in_type eq "double" || $in_type eq "integer"} { - set printed 0 - if {[$in_obj getAttribute "function"] eq "1"} { - if {[get_domnode_attribute [$block find n "ByFunction"] v] eq "Yes"} { - set funcinputName "function_$inputName" - set value [get_domnode_attribute [$block find n $funcinputName] v] - dict set paramDict $inputName $value - set printed 1 - } - } - if {!$printed} { - set value [gid_groups_conds::convert_value_to_default [$block find n $inputName]] - dict set paramDict $inputName [expr $value] - } - } elseif {$in_type eq "bool"} { - set value [get_domnode_attribute [$block find n $inputName] v] - set value [expr $value ? True : False] - dict set paramDict $inputName [expr $value] - } elseif {$in_type eq "tablefile"} { - set value [get_domnode_attribute [$block find n $inputName] v] - dict set paramDict $inputName $value - } else { - if {[get_domnode_attribute [$block find n $inputName] state] ne "hidden" } { - set value [get_domnode_attribute [$block find n $inputName] v] - dict set paramDict $inputName $value - } - } - } - if {[$block find n Interval] ne ""} {dict set paramDict interval [write::getInterval [get_domnode_attribute [$block find n Interval] v]] } - dict set processDict Parameters $paramDict - lappend bcCondsDict $processDict - } - return $bcCondsDict -} - -proc Pfem::write::DofsInElements { } { - set dofs [list ] - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group/value\[@n='Element'\]" - set elements [$root selectNodes $xp1] - foreach element_node $elements { - set elemid [$element_node @v] - set elem [Model::getElement $elemid] - foreach dof [split [$elem getAttribute "Dofs"] ","] { - foreach item $dof { - if {$item ni $dofs} { - lappend dofs $item - } - } - } - } - return $dofs -} diff --git a/kratos.gid/apps/Pfem/xml/Bodies.spd b/kratos.gid/apps/Pfem/xml/Bodies.spd deleted file mode 100644 index 161f9ea41..000000000 --- a/kratos.gid/apps/Pfem/xml/Bodies.spd +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/kratos.gid/apps/Pfem/xml/BodiesWindowController.tcl b/kratos.gid/apps/Pfem/xml/BodiesWindowController.tcl deleted file mode 100644 index 701b62f51..000000000 --- a/kratos.gid/apps/Pfem/xml/BodiesWindowController.tcl +++ /dev/null @@ -1,292 +0,0 @@ -namespace eval ::Pfem::xml::BodiesWindow { - variable window - variable list_of_bodies - variable description_frame - - variable name_entry - variable type_combo - variable mesh_combo - variable cont_combo - - variable current_body - variable current_part - - variable list_of_parts - variable part_frame - variable part_combo - variable part_description_frame -} - -proc Pfem::xml::BodiesWindow::Init { } { - variable window - set window ".gid.bodieswindow" -} - -proc Pfem::xml::BodiesWindow::Start { } { - variable window - variable part_frame - variable description_frame - variable name_entry - variable type_combo - variable mesh_combo - variable cont_combo - variable part_description_frame - - # 1 - Create Window - if {[winfo exists $window]} {destroy $window} - toplevel $window -class Toplevel -relief groove - #wm maxsize $w 500 300 - wm minsize $window 500 300 - wm overrideredirect $window 0 - wm resizable $window 1 1 - wm deiconify $window - wm title $window [= "Body create/edit window"] - wm attribute $window -topmost 1 - - # 2 - Top frame - window content - set topframe [ttk::frame $window.topframe] - - # 3 - Left panel - Bodies frame - set bodyframe [ttk::frame $topframe.bodyframe] - - # 4 - Top labelframe - List of bodies container - set listbodieslabel [ttk::labelframe $bodyframe.lflist -text "Bodies"] - - # 5 - List of bodies - set bodies_list [listbox $listbodieslabel.list -listvariable Pfem::xml::BodiesWindow::list_of_bodies] - grid $bodies_list -sticky nswe - grid $listbodieslabel -sticky nswe - # 5 - Body description - set description_frame [ttk::frame $listbodieslabel.description] - # 6 - Name entry - set namelabel [ttk::label $description_frame.namelabel -text "Name"] - set nameentry [ttk::entry $description_frame.nameentry -textvariable ::Pfem::xml::BodiesWindow::name_entry] - grid $namelabel $nameentry -sticky nswe - # 6 - Body type combo - set type_values [list Fluid Solid Rigid] - set typelabel [ttk::label $description_frame.typelabel -text "Type"] - set typecombo [ttk::combobox $description_frame.typecombo -values $type_values -textvariable ::Pfem::xml::BodiesWindow::type_combo -state readonly] - grid $typelabel $typecombo -sticky nswe - # 6 - Remesh combo - set remesh_values [list "No remesh" "Remesh and refine"] - set remeshlabel [ttk::label $description_frame.remeshlabel -text "Remesh"] - set remeshcombo [ttk::combobox $description_frame.remeshcombo -values $remesh_values -textvariable ::Pfem::xml::BodiesWindow::mesh_combo -state readonly] - grid $remeshlabel $remeshcombo -sticky nswe - # 6 - Contact combo - set contact_values [list Yes No] - set contactlabel [ttk::label $description_frame.contactlabel -text "Contact"] - set contactcombo [ttk::combobox $description_frame.contactcombo -values $contact_values -textvariable ::Pfem::xml::BodiesWindow::cont_combo -state readonly] - grid $contactlabel $contactcombo -sticky nswe - - # 6 - Bottom frame - ok / cancel buttons - set botframe [ttk::frame $description_frame.botframe] - ttk::button $botframe.cancel -text Close -command [list Pfem::xml::BodiesWindow::InitialState] -style BottomFrame.TButton - ttk::button $botframe.ok -text Ok -command [list Pfem::xml::BodiesWindow::SaveBody] -style BottomFrame.TButton - grid $botframe.ok $botframe.cancel -sticky sew - grid $botframe -sticky swe -columnspan 2 - - # 5 - Bottom frame - Add, delete, draw buttons - set bodybotframe [ttk::frame $listbodieslabel.bodybotframe] - set but_add [ttk::button $bodybotframe.add -text +Add -command [list Pfem::xml::BodiesWindow::AddBody] -style BottomFrame.TButton] - set but_del [ttk::button $bodybotframe.del -text -Del -command [list Pfem::xml::BodiesWindow::DelBody] -style BottomFrame.TButton] - set but_dra [ttk::button $bodybotframe.drw -text Draw -command [list Pfem::xml::BodiesWindow::DrawBody] -style BottomFrame.TButton] - grid $but_add $but_del $but_dra -sticky sew - grid $bodybotframe -sticky swe - - grid $bodyframe -sticky nswe -row 0 -column 0 - - # 3 - Right panel - Parts frame - set part_frame [ttk::frame $topframe.partframe] - - # 4 - Top labelframe - List of parts container - set listpartslabel [ttk::labelframe $part_frame.lflist -text "Parts"] - - # 5 - List of parts - set parts_list [listbox $listpartslabel.list -listvariable Pfem::xml::BodiesWindow::list_of_parts] - grid $parts_list -sticky nswe - grid $listpartslabel -sticky nswe - # 5 - Part description - set part_description_frame [ttk::frame $listpartslabel.description] - # 6 - Part selector combo - # TODO: get available only - no repeat - just the type - set part_values [Pfem::xml::GetPartsGroups] - set part_label [ttk::label $part_description_frame.partlabel -text "Part name"] - set partcombo [ttk::combobox $part_description_frame.partcombo -textvariable Pfem::xml::BodiesWindow::part_combo -values $part_values -state readonly] - grid $part_label $partcombo -sticky nswe - - # 6 - Bottom frame - ok / cancel buttons - set botframe [ttk::frame $part_description_frame.botframe] - ttk::button $botframe.cancel -text Close -command [list Pfem::xml::BodiesWindow::InitialState] -style BottomFrame.TButton - ttk::button $botframe.ok -text Ok -command [list Pfem::xml::BodiesWindow::AcceptPartAdd] -style BottomFrame.TButton - grid $botframe.ok $botframe.cancel -sticky sew - grid $botframe -sticky swe -columnspan 2 - - # 5 - Bottom frame - Add, delete, draw buttons - set bodybotframe [ttk::frame $listpartslabel.bodybotframe] - set but_add [ttk::button $bodybotframe.add -text +Add -command [list Pfem::xml::BodiesWindow::AddPart] -style BottomFrame.TButton] - set but_del [ttk::button $bodybotframe.del -text -Del -command [list Pfem::xml::BodiesWindow::DelPart] -style BottomFrame.TButton] - set but_dra [ttk::button $bodybotframe.drw -text Draw -command [list Pfem::xml::BodiesWindow::DrawPart] -style BottomFrame.TButton] - grid $but_add $but_del $but_dra -sticky sew - grid $bodybotframe -sticky swe - - grid $topframe -sticky nswe - - bind $bodies_list <> [list Pfem::xml::BodiesWindow::BodySelection %W] - bind $parts_list <> [list Pfem::xml::BodiesWindow::PartSelected %W] - - Pfem::xml::BodiesWindow::InitialState -} - -proc Pfem::xml::BodiesWindow::InitialState { } { - # 1 - Fill with data - variable list_of_bodies - set list_of_bodies [list ] - foreach body [Pfem::xml::GetBodiesInformation] { - lappend list_of_bodies [dict get $body name] - } - - # 2 - Hide lateral panel - variable part_frame - grid forget $part_frame - variable description_frame - grid forget $description_frame - variable part_description_frame - grid forget $part_description_frame -} - -proc Pfem::xml::BodiesWindow::SaveBody { } { - variable current_body - set body_name_old [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] name] - - set body_name $::Pfem::xml::BodiesWindow::name_entry - set body_type $::Pfem::xml::BodiesWindow::type_combo - set body_mesh $::Pfem::xml::BodiesWindow::mesh_combo - set body_cont $::Pfem::xml::BodiesWindow::cont_combo - - Pfem::xml::UpdateBody $body_name_old $body_name $body_type $body_mesh $body_cont - spdAux::RequestRefresh - Pfem::xml::BodiesWindow::InitialState - Pfem::xml::BodiesWindow::BodySelected $current_body -} - -proc Pfem::xml::BodiesWindow::BodySelection { w } { - set selected [$w curselection] - if {$selected ne ""} { - Pfem::xml::BodiesWindow::BodySelected $selected - } -} -proc Pfem::xml::BodiesWindow::BodySelected { body_id } { - variable description_frame - variable name_entry - variable type_combo - variable mesh_combo - variable cont_combo - - variable part_frame - variable list_of_parts - - variable current_body - variable current_part - - set current_body $body_id - # Get data from tree - set data [lindex [Pfem::xml::GetBodiesInformation] $body_id] - - # Fill data in description frame - set name_entry [dict get $data name] - set type_combo [dict get $data type] - set mesh_combo [dict get $data mesh] - set cont_combo [dict get $data cont] - - # Show description frame - grid $description_frame -sticky swe - - # Fill data in Parts panel - set list_of_parts [dict get $data parts] - - # Show parts panel - grid $part_frame -sticky nswe -row 0 -column 1 - -} -proc Pfem::xml::BodiesWindow::PartSelected { w } { - variable part_description_frame - variable current_body - variable current_part - - set selected [$w curselection] - if {$selected ne ""} { - set current_part $selected - } -} - -proc Pfem::xml::BodiesWindow::AddBody { } { - Pfem::xml::AddNewBodyRaw - spdAux::RequestRefresh - Pfem::xml::BodiesWindow::InitialState -} -proc Pfem::xml::BodiesWindow::AddPart { } { - # Show the adding part frame - variable part_description_frame - grid $part_description_frame -sticky swe -} - -proc Pfem::xml::BodiesWindow::AcceptPartAdd { } { - variable current_body - set body_name [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] name] - set part_name $Pfem::xml::BodiesWindow::part_combo - if {$part_name in [GiD_Groups list]} { - Pfem::xml::AddPartToBody $body_name $part_name - spdAux::RequestRefresh - Pfem::xml::BodiesWindow::InitialState - Pfem::xml::BodiesWindow::BodySelected $current_body - } -} - -proc Pfem::xml::BodiesWindow::DelBody { } { - variable current_body - - if {$current_body ne ""} { - Pfem::xml::DeleteBody [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] name] - } - spdAux::RequestRefresh - Pfem::xml::BodiesWindow::InitialState -} -proc Pfem::xml::BodiesWindow::DelPart { } { - variable current_body - variable current_part - if {$current_body ne "" && $current_part ne ""} { - set body_name [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] name] - set part_name [lindex [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] parts] $current_part] - Pfem::xml::DeletePartInBody $body_name $part_name - } - spdAux::RequestRefresh - Pfem::xml::BodiesWindow::InitialState - Pfem::xml::BodiesWindow::BodySelected $current_body -} - -proc Pfem::xml::BodiesWindow::DrawBody { } { - variable current_body - - set names [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] parts] - Pfem::xml::BodiesWindow::TryEndDraw - GiD_Groups draw $names - GiD_Process 'Redraw - after 5000 { Pfem::xml::BodiesWindow::TryEndDraw } -} -proc Pfem::xml::BodiesWindow::DrawPart { } { - variable current_part - variable current_body - - set name [lindex [dict get [lindex [Pfem::xml::GetBodiesInformation] $current_body] parts] $current_part] - Pfem::xml::BodiesWindow::TryEndDraw - GiD_Groups draw [list $name] - GiD_Process 'Redraw - after 5000 { Pfem::xml::BodiesWindow::TryEndDraw } -} - -proc Pfem::xml::BodiesWindow::TryEndDraw { } { - catch {GiD_Groups end_draw} - GiD_Process 'Redraw -} - -Pfem::xml::BodiesWindow::Init \ No newline at end of file diff --git a/kratos.gid/apps/Pfem/xml/ConstitutiveLaws.xml b/kratos.gid/apps/Pfem/xml/ConstitutiveLaws.xml deleted file mode 100644 index a6db6fed8..000000000 --- a/kratos.gid/apps/Pfem/xml/ConstitutiveLaws.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Contact.spd b/kratos.gid/apps/Pfem/xml/Contact.spd deleted file mode 100644 index 9f41802ac..000000000 --- a/kratos.gid/apps/Pfem/xml/Contact.spd +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Elements.xml b/kratos.gid/apps/Pfem/xml/Elements.xml deleted file mode 100644 index d0505ec01..000000000 --- a/kratos.gid/apps/Pfem/xml/Elements.xml +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Main.spd b/kratos.gid/apps/Pfem/xml/Main.spd deleted file mode 100644 index 491ffb850..000000000 --- a/kratos.gid/apps/Pfem/xml/Main.spd +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Materials.spd b/kratos.gid/apps/Pfem/xml/Materials.spd deleted file mode 100644 index e8e63b2bd..000000000 --- a/kratos.gid/apps/Pfem/xml/Materials.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/Pfem/xml/Materials.xml b/kratos.gid/apps/Pfem/xml/Materials.xml deleted file mode 100644 index 1f9752b6d..000000000 --- a/kratos.gid/apps/Pfem/xml/Materials.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Meshing.spd b/kratos.gid/apps/Pfem/xml/Meshing.spd deleted file mode 100644 index a378506f7..000000000 --- a/kratos.gid/apps/Pfem/xml/Meshing.spd +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/ModelType.spd b/kratos.gid/apps/Pfem/xml/ModelType.spd deleted file mode 100644 index ca2588692..000000000 --- a/kratos.gid/apps/Pfem/xml/ModelType.spd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/NodalConditions.spd b/kratos.gid/apps/Pfem/xml/NodalConditions.spd deleted file mode 100644 index 190d187be..000000000 --- a/kratos.gid/apps/Pfem/xml/NodalConditions.spd +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/NodalConditions.xml b/kratos.gid/apps/Pfem/xml/NodalConditions.xml deleted file mode 100644 index a2f243a3a..000000000 --- a/kratos.gid/apps/Pfem/xml/NodalConditions.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/kratos.gid/apps/Pfem/xml/Parts.spd b/kratos.gid/apps/Pfem/xml/Parts.spd deleted file mode 100644 index 0373e31e1..000000000 --- a/kratos.gid/apps/Pfem/xml/Parts.spd +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Processes.xml b/kratos.gid/apps/Pfem/xml/Processes.xml deleted file mode 100644 index b5256e055..000000000 --- a/kratos.gid/apps/Pfem/xml/Processes.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Procs.spd b/kratos.gid/apps/Pfem/xml/Procs.spd deleted file mode 100644 index 741143407..000000000 --- a/kratos.gid/apps/Pfem/xml/Procs.spd +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Results.spd b/kratos.gid/apps/Pfem/xml/Results.spd deleted file mode 100644 index 0f9c8eee8..000000000 --- a/kratos.gid/apps/Pfem/xml/Results.spd +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Solution.spd b/kratos.gid/apps/Pfem/xml/Solution.spd deleted file mode 100644 index 40947675f..000000000 --- a/kratos.gid/apps/Pfem/xml/Solution.spd +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Solvers.xml b/kratos.gid/apps/Pfem/xml/Solvers.xml deleted file mode 100644 index e75f934de..000000000 --- a/kratos.gid/apps/Pfem/xml/Solvers.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/Strategies.xml b/kratos.gid/apps/Pfem/xml/Strategies.xml deleted file mode 100644 index 2416526b0..000000000 --- a/kratos.gid/apps/Pfem/xml/Strategies.xml +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/Pfem/xml/XmlController.tcl b/kratos.gid/apps/Pfem/xml/XmlController.tcl deleted file mode 100644 index a13b8da90..000000000 --- a/kratos.gid/apps/Pfem/xml/XmlController.tcl +++ /dev/null @@ -1,723 +0,0 @@ -namespace eval Pfem::xml { - variable dir - variable bodyNodalCondition - variable body_UN - variable Elements -} - -proc Pfem::xml::Init { } { - variable bodyNodalCondition - set bodyNodalCondition [list ] - - variable body_UN - set body_UN "PFEM_Bodies" - - variable dir - Model::InitVariables dir $Pfem::dir - - Model::getSolutionStrategies Strategies.xml - Model::getElements Elements.xml - Model::getConstitutiveLaws "../../Pfem/xml/ConstitutiveLaws.xml" - Model::getConstitutiveLaws "../../Solid/xml/ConstitutiveLaws.xml" - Model::getProcesses "../../Solid/xml/Processes.xml" - Model::getProcesses "../../Common/xml/Processes.xml" - Model::getProcesses Processes.xml - Model::getNodalConditions NodalConditions.xml - Model::getNodalConditions "../../Solid/xml/NodalConditions.xml" - Model::getMaterials Materials.xml - Model::getConditions "../../Solid/xml/Conditions.xml" - Model::getSolvers "../../Pfem/xml/Solvers.xml" - - Model::ForgetNodalCondition "CONTACT" -} - -proc Pfem::xml::getUniqueName {name} { - return PFEM_$name -} - -proc Pfem::xml::MultiAppEvent {args} { - if {$args eq "init"} { - spdAux::parseRoutes - spdAux::ConvertAllUniqueNames SL PFEM_ - } -} - -proc Pfem::xml::CustomTree { args } { - - #HOW TO USE THIS FUNCTION: - #spdAux::SetValueOnTreeItem arg1 arg2 arg3 (arg4) - #arg1: attribute_to_modify - #arg2: value_of_the_attribute - #arg3: unique_name_of_the_node ('unique name is defined by the attribute un=) - #arg4 (optional): name_of_the_child_we_want_to_modify ('name'is defined by the attribute n=) - - #set icon data as default - foreach node [[customlib::GetBaseRoot] getElementsByTagName value ] { $node setAttribute icon data } - - #problem settings - foreach node [[customlib::GetBaseRoot] getElementsByTagName container ] { if {[$node hasAttribute solstratname]} {$node setAttribute icon folder } } - #TODO: (for JG) the previous icons should be changed automatically looking at the strategies.xml - - - #intervals - spdAux::SetValueOnTreeItem icon timeIntervals Intervals - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { - $node setAttribute icon select - } - - #conditions - #spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEM_NodalConditions VELOCITY - #spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEM_NodalConditions PRESSURE - - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_NodalConditions]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated - } - - #loads - spdAux::SetValueOnTreeItem icon setLoad PFEM_Loads - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_Loads]/condition" ] { - $node setAttribute icon select - $node setAttribute groups_icon groupCreated - } - - #materials - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_Materials]/blockdata" ] { - $node setAttribute icon select - } - - #solver settings - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_Solution]/container\[@n = 'linear_solver_settings'\]" ] { - $node setAttribute icon solvers - } - - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_Solution]/container\[@n = 'velocity_linear_solver_settings'\]" ] { - $node setAttribute icon solvers - } - - foreach node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute PFEM_Solution]/container\[@n = 'pressure_linear_solver_settings'\]" ] { - $node setAttribute icon solvers - } - - - #units - [[customlib::GetBaseRoot] selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits - - #results - set problemtype [write::getValue PFEM_DomainType] - if {$problemtype eq "Fluid"} { - spdAux::SetValueOnTreeItem v Yes NodalResults VELOCITY - spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE - spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT - } - spdAux::SetValueOnTreeItem v No NodalResults VELOCITY_REACTION - - foreach result [list INLET SPRING_2D BALLAST_2D AXIAL_TURN_2D AXIAL_VELOCITY_TURN_2D AXIAL_ACCELERATION_TURN_2D SPRING_3D BALLAST_3D AXIAL_TURN_3D AXIAL_VELOCITY_TURN_3D AXIAL_ACCELERATION_TURN_3D] { - set result_node [[customlib::GetBaseRoot] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = '$result'\]"] - if { $result_node ne "" } {$result_node delete} - } - - #restart - spdAux::SetValueOnTreeItem icon doRestart Restart - spdAux::SetValueOnTreeItem icon select Restart RestartOptions - - -} - -proc Pfem::xml::ProcCheckNodalConditionStatePFEM {domNode args} { - set domain_type [write::getValue PFEM_DomainType] - set fluid_exclusive_conditions [list "VELOCITY" "INLET" "PRESSURE"] - set current_condition [$domNode @n] - if {$domain_type eq "Fluid"} { - if {$current_condition ni $fluid_exclusive_conditions} { - return hidden - } - } elseif {$domain_type eq "Solid"} { - if {$current_condition eq "INLET"} { - return hidden - } - } - return [Pfem::xml::ProcCheckNodalConditionStateSolid $domNode {*}$args] -} - -proc Pfem::xml::CheckElementOutputState { domNode args } { - set elemsactive [list ] - set parts_path [spdAux::getRoute [Pfem::write::GetAttribute parts_un]] - set xp1 "$parts_path/group/value\[@n='Element'\]" - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - lappend elemsactive [get_domnode_attribute $gNode v] - } - - set paramName [$domNode @n] - return [::Model::CheckElementOutputState $elemsactive $paramName] -} - -proc Pfem::xml::ProcGetElements {domNode args} { - set cumplen [list ] - set domain_type_un PFEM_DomainType - set domain_type_route [spdAux::getRoute $domain_type_un] - set equation_type_un PFEM_EquationType - set equation_type_route [spdAux::getRoute $equation_type_un] - - if {$domain_type_route ne ""} { - set domain_type_node [$domNode selectNodes $domain_type_route] - set domain_type_value [get_domnode_attribute $domain_type_node v] - - set equation_type_node [$domNode selectNodes $equation_type_route] - set equation_type_value [get_domnode_attribute $equation_type_node v] - - set filter [list ] - lappend filter "EquationType" $equation_type_value - if {$domain_type_value ne "Coupled"} { - lappend filter "ElementType" $domain_type_value - set cumplen [Model::GetElements $filter] - set filter [list "ElementType" "Rigid"] - lappend filter "EquationType" $equation_type_value - lappend cumplen {*}[Model::GetElements $filter] - } else { - set cumplen [Model::GetElements $filter] - } - } - set names [list ] - set pnames [list ] - foreach elem $cumplen { - lappend names [$elem getName] - lappend pnames [$elem getName] - lappend pnames [$elem getPublicName] - } - set diction [join $pnames ","] - set values [join $names ","] - $domNode setAttribute values $values - if {[get_domnode_attribute $domNode v] eq ""} {$domNode setAttribute v [lindex $names 0]} - if {[get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]; spdAux::RequestRefresh} - - return $diction -} - -proc Pfem::xml::FindMyBlocknode {domNode} { - set top 10 - set ret "" - for {set i 0} {$i < $top} {incr i} { - if {[$domNode nodeName] eq "blockdata"} { - set ret $domNode - break - } else { - set domNode [$domNode parent] - } - } - return $ret -} - -proc Pfem::xml::ProcGetMeshingDomains {domNode args} { - set basepath [spdAux::getRoute "PFEM_meshing_domains"] - set values [list ] - foreach meshing_domain [[$domNode selectNodes $basepath] childNodes] { - lappend values [get_domnode_attribute $meshing_domain name] - } - if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $values} { - $domNode setAttribute v [lindex $values 0] - } - return [join $values ,] -} - -proc Pfem::xml::ProcGetContactDomains {domNode args} { - set basepath [spdAux::getRoute "PFEM_contacts"] - set values [list "No contact strategy"] - foreach contact_domain [[$domNode selectNodes $basepath] childNodes] { - lappend values [get_domnode_attribute $contact_domain name] - } - - if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $values} { - $domNode setAttribute v [lindex $values 0] - } - return [join $values ,] -} - -proc Pfem::xml::ProcCheckNodalConditionStateSolid {domNode args} { - # Overwritten the base function to add Solution Type restrictions - set elemsactive [list ] - set parts_path [spdAux::getRoute [Pfem::write::GetAttribute parts_un]] - set xp1 "$parts_path/group/value\[@n='Element'\]" - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - lappend elemsactive [get_domnode_attribute $gNode v] - } - if {$elemsactive eq ""} {return "hidden"} - set elemsactive [lsort -unique $elemsactive] - set conditionId [$domNode @n] - set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute PFEM_SolutionType]] v] - set params [list analysis_type $solutionType] - if {[::Model::CheckElementsNodalCondition $conditionId $elemsactive $params]} {return "normal"} else {return "hidden"} -} - - - -proc Pfem::xml::ProcSolutionTypeState {domNode args} { - set domain_type_un PFEM_DomainType - set domain_type_route [spdAux::getRoute $domain_type_un] - set state normal - if {$domain_type_route ne ""} { - set domain_type_node [$domNode selectNodes $domain_type_route] - set domain_type_value [get_domnode_attribute $domain_type_node v] - - if {$domain_type_value ne "Solid"} { - $domNode setAttribute values Dynamic - $domNode setAttribute v Dynamic - set state disabled - } { - $domNode setAttribute values "Static,Quasi-static,Dynamic" - set state normal - } - } - return $state -} - -proc Pfem::xml::ProcEquationTypeState {domNode args} { - set domain_type_un PFEM_DomainType - set domain_type_route [spdAux::getRoute $domain_type_un] - set state normal - if {$domain_type_route ne ""} { - set domain_type_node [$domNode selectNodes $domain_type_route] - set domain_type_value [get_domnode_attribute $domain_type_node v] - - if {$domain_type_value ne "Solid"} { - $domNode setAttribute values Segregated - $domNode setAttribute v Segregated - set state disabled - } elseif {$domain_type_value eq "Solid"} { - $domNode setAttribute values Monolithic - $domNode setAttribute v Monolithic - set state disabled - } else { - $domNode setAttribute values "Monolithic,Segregated" - set state normal - } - } - return $state -} - -proc Pfem::xml::ProcStrategyTypeState {domNode args} { - set domain_type_un PFEM_DomainType - set domain_type_route [spdAux::getRoute $domain_type_un] - set state normal - if {$domain_type_route ne ""} { - set domain_type_node [$domNode selectNodes $domain_type_route] - set domain_type_value [get_domnode_attribute $domain_type_node v] - - if {$domain_type_value ne "Solid"} { - $domNode setAttribute values Implicit - $domNode setAttribute v Implicit - set state disabled - } { - set solution_type_un PFEM_SolutionType - set solution_type_route [spdAux::getRoute $solution_type_un] - set state normal - if {$solution_type_route ne ""} { - set solution_type_node [$domNode selectNodes $solution_type_route] - set solution_type_value [get_domnode_attribute $solution_type_node v] - if {$solution_type_value eq "Static"} { - $domNode setAttribute values Static - $domNode setAttribute v Static - set state disabled - } elseif {$solution_type_value eq "Quasi-static"} { - $domNode setAttribute values Quasi-static - $domNode setAttribute v Quasi-static - set state disabled - } - } - } - } - return $state -} - -proc Pfem::xml::ProcGetBodyTypeValues {domNode args} { - set domain_type_un PFEM_DomainType - set domain_type_route [spdAux::getRoute $domain_type_un] - set values [list Fluid Solid Rigid] - if {$domain_type_route ne ""} { - set domain_type_node [$domNode selectNodes $domain_type_route] - set domain_type_value [get_domnode_attribute $domain_type_node v] - - if {$domain_type_value eq "Fluid"} { - set values [list Fluid Rigid] - } - if {$domain_type_value eq "Coupled"} { - set values [list Fluid Solid Rigid] - } - if {$domain_type_value eq "Solid"} { - set values [list Solid Rigid] - } - } - if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $values} { - $domNode setAttribute v [lindex $values 0] - } - gid_groups_conds::check_node_dependencies $domNode - return [join $values ,] -} - -proc Pfem::xml::ProcGetSolutionStrategiesPFEM {domNode args} { - set names "" - set pnames "" - set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute PFEM_SolutionType]] v] - set Sols [::Model::GetSolutionStrategies [list "SolutionType" $solutionType] ] - set ids [list ] - set domainType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute PFEM_DomainType]] v] - set filter [list Solid Pfem] - if {$domainType eq "Solid"} {set filter "Solid"} - if {$domainType eq "Fluid"} {set filter "Pfem"} - if {$domainType eq "Coupled"} {set filter "Pfem"} - - foreach ss $Sols { - if {[$ss getAttribute "App"] in $filter} { - lappend names [$ss getName] - lappend pnames [$ss getName] - lappend pnames [$ss getPublicName] - } - } - - $domNode setAttribute values [join $names ","] - set dv [lindex $names 0] - #W "dv $dv" - if {[$domNode getAttribute v] eq ""} {$domNode setAttribute v $dv; spdAux::RequestRefresh} - if {[$domNode getAttribute v] ni $names} {$domNode setAttribute v $dv; spdAux::RequestRefresh} - - return [join $pnames ","] -} - - -proc Pfem::xml::ProcPartsOverWhat {domNode args} { - set names [list ] - set blockNode [Pfem::xml::FindMyBlocknode $domNode] - set BodyType [get_domnode_attribute [$blockNode selectNodes "value\[@n='BodyType'\]"] v] - if {$BodyType eq "Fluid" || $BodyType eq "Solid"} { - if {$::Model::SpatialDimension eq "3D"} { - return "volume" - } else { - return "surface" - } - } elseif { $BodyType eq "Rigid"} { - if {$::Model::SpatialDimension eq "3D"} { - return "surface,volume" - } else { - return "line,surface" - } - } else { - return "point,line,surface,volume" - } -} - -proc Pfem::xml::ProcActiveIfAnyPartState {domNode args} { - set parts "" - set parts_un "PFEM_Parts" - catch { - set parts [$domNode selectNodes "[spdAux::getRoute $parts_un]/group"] - } - if {$parts ne ""} {return "normal"} else {return "hidden"} -} - -proc Pfem::xml::ProcGetBodiesValues {domNode args} { - customlib::UpdateDocument - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - set bodies [list ] - foreach body_node [$root selectNodes $xp1] { - lappend bodies [$body_node @name] - } - if {[get_domnode_attribute $domNode v] ni $bodies} {$domNode setAttribute v [lindex $bodies 0]} - return [join $bodies ","] -} - -proc Pfem::xml::ProcGetRigidBodiesValues {domNode args} { - customlib::UpdateDocument - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute "PFEM_Bodies"]/blockdata" - set bodies [list ] - foreach body_node [$root selectNodes $xp1] { - foreach subnode [$body_node childNodes] { - if { [$subnode getAttribute n] eq "BodyType" } { - if { [$subnode getAttribute v] eq "Rigid" } { - lappend bodies [$body_node @name] - break - } - } - } - } - if {[get_domnode_attribute $domNode v] ni $bodies} {$domNode setAttribute v [lindex $bodies 0]} - return [join $bodies ","] -} - -proc Pfem::xml::StartSortingWindow { } { - package require SorterWindow - set data_dict [dict create] - set conds [Pfem::xml::GetConditionsAndGroups PFEM_Loads] - set nodalconds [Pfem::xml::GetConditionsAndGroups PFEM_NodalConditions] - if {[dict size $conds]} {dict set data_dict Loads $conds} - if {[dict size $nodalconds]} {dict set data_dict Constraints $nodalconds} - SorterWindow::SorterWindow $data_dict "Pfem::xml::GetDataFromSortingWindow" -} -proc Pfem::xml::GetDataFromSortingWindow { data_dict } { - W $data_dict -} -proc Pfem::xml::GetConditionsAndGroups { cnd_UN } { - customlib::UpdateDocument - set data_dict [dict create] - set root [customlib::GetBaseRoot] - foreach {cond_type cond_item cond_item_name} {container blockdata name condition group n} { - set xp1 "[spdAux::getRoute $cnd_UN]/$cond_type" - foreach cnd_cont_node [$root selectNodes $xp1] { - set cnd_cont_name [$cnd_cont_node @n] - set xp2 "./$cond_item" - foreach cnd_node [$cnd_cont_node selectNodes $xp2] { - set cnd_name [$cnd_node getAttribute $cond_item_name] - set num 0 - if {[$cnd_node hasAttribute order]} {set num [$cnd_node @order]} - dict set data_dict $cnd_cont_name $cnd_name $num - } - } - } - return $data_dict -} - -proc Pfem::xml::getBodyNodalConditionById { id } { - variable bodyNodalCondition - - foreach cnd $bodyNodalCondition { - if {[$cnd getName] eq $id} { - return $cnd - } - } - return "" -} -proc Pfem::xml::getBodyNodalConditions { filename } { - variable bodyNodalCondition - dom parse [tDOM::xmlReadFile [file join $Pfem::dir xml $filename]] doc - - set NCList [$doc getElementsByTagName NodalConditionItem] - foreach Node $NCList { - lappend bodyNodalCondition [::Model::ParseNodalConditionsNode $Node] - } -} -proc Pfem::xml::injectBodyNodalConditions { basenode args} { - variable bodyNodalCondition - Pfem::xml::_injectCondsToTree $basenode $bodyNodalCondition nodal - $basenode delete -} - - -proc Pfem::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} } { - set conds [$basenode parent] - set AppUsesIntervals [::Pfem::GetAttribute UseIntervals] - if {$AppUsesIntervals eq ""} {set AppUsesIntervals 0} - - foreach cnd $cond_list { - set n [$cnd getName] - set pn [$cnd getPublicName] - set help [$cnd getHelp] - set units [$cnd getAttribute "units"] - set um [$cnd getAttribute "unit_magnitude"] - set process [::Model::GetProcess [$cnd getProcessName]] - set check [$process getAttribute "check"] - if {$check eq ""} {set check "UpdateTree"} - set state "ConditionState" - if {$cond_type eq "nodal"} { - set state [$cnd getAttribute state] - if {$state eq ""} {set state "CheckNodalConditionState"} - } - set contNode [gid_groups_conds::addF [$conds toXPath] container [list n $n pn ${pn}s help $help]] - set blockNode [gid_groups_conds::addF [$contNode toXPath] blockdata [list n $n pn $pn help $help icon shells16 update_proc $check name "$pn 1" sequence 1 editable_name unique sequence_type non_void_disabled]] - set block_path [$blockNode toXPath] - set inputs [$process getInputs] - foreach {inName in} $inputs { - set pn [$in getPublicName] - set type [$in getType] - set v [$in getDv] - set help [$in getHelp] - set state [$in getAttribute "state"] - if {$state eq ""} {set state "normal"} - foreach key [$cnd getDefaults $inName] { - set $key [$cnd getDefault $inName $key] - } - - set has_units [$in getAttribute "has_units"] - if {$has_units ne ""} { set has_units "units='$units' unit_magnitude='$um'"} - if {$type eq "vector"} { - set vector_type [$in getAttribute "vectorType"] - lassign [split $v ","] v1 v2 v3 - if {$vector_type eq "bool"} { - gid_groups_conds::addF $block_path value [list n ${inName}X wn [concat $n "_X"] pn "X ${pn}" values "1,0"] - gid_groups_conds::addF $block_path value [list n ${inName}Y wn [concat $n "_Y"] pn "Y ${pn}" values "1,0"] - gid_groups_conds::addF $block_path value [list n ${inName}Z wn [concat $n "_Z"] pn "Z ${pn}" values "1,0" state {[CheckDimension 3D]}] - } { - foreach i [list "X" "Y" "Z"] { - set nodev "../value\[@n='${inName}$i'\]" - set zstate "" - if {$i eq "Z"} { set zstate "state {\[CheckDimension 3D\]}"} - if {[$in getAttribute "enabled"] in [list "1" "0"]} { - set val [expr [$in getAttribute "enabled"] ? "Yes" : "No"] - if {$i eq "Z"} { set val "No" } - set valNode [gid_groups_conds::addF $block_path value [list n Enabled_$i pn "$i component" v No values "Yes,No" help "Enables the $i ${inName}" actualize_tree 1 {*}$zstate]] - - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodev att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodev att1 state v1 normal] - if {[$in getAttribute "function"] eq "1"} { - set fname "${i}function_$inName" - set nodef "../value\[@n='$fname'\]" - set nodeb "../value\[@n='ByFunction$i'\]" - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodef att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodeb att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodeb att1 state v1 normal att2 v v2 No] - } - } - if {[$in getAttribute "function"] eq "1"} { - set fname "${i}function_$inName" - set valNode [gid_groups_conds::addF $block_path value [list n ByFunction$i pn "by function -> f(x,y,z,t)" v No values "Yes,No" actualize_tree 1 state hidden]] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodev att1 state v1 normal] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodev att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodef att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodef att1 state v1 normal] - gid_groups_conds::addF $block_path value [list n $fname pn "$i function" state hidden] - } - gid_groups_conds::addF $block_path value [list n ${inName}$i wn [concat $n "_$i"] pn "$i ${pn}" v $v1 state hidden] - } - } - - } elseif { $type eq "combo" } { - set values [join [$in getValues] ","] - gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v1 values $values state $state help $help] - } elseif { $type eq "bool" } { - set values "1,0" - gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v1 values $values state $state help $help] - } elseif { $type eq "file" || $type eq "tablefile" } { - gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v1 values {[GetFilesValues]} update_proc AddFile type $type state $state help $help] - } else { - if {[$in getAttribute "function"] eq "1"} { - set fname "function_$inName" - set nodev "../value\[@n='$inName'\]" - set nodef "../value\[@n='$fname'\]" - - set valNode [gid_groups_conds::addF $block_path value [list n ByFunction pn "by function -> f(x,y,z,t)" v No values "Yes,No" actualize_tree 1]] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodev att1 state v1 normal] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodev att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodef att1 state v1 hidden] - gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodef att1 state v1 normal] - gid_groups_conds::addF $block_path value [list n $fname pn "Function"] - } - append node "" - gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v units $units unit_magnitude $um help $help] - } - } - - set CondUsesIntervals [$cnd getAttribute "Interval"] - if {$AppUsesIntervals && $CondUsesIntervals ne "False"} { - gid_groups_conds::addF $block_path value [list n Interval pn "Time interval" v $CondUsesIntervals values {[getIntervals]} help $help] - } - gid_groups_conds::addF $block_path value [list n Body pn Body v - values {[GetRigidBodiesValues]} help $help] - } -} - - -proc Pfem::xml::GetPartsGroups { } { - set parts [list ] - set parts_path [spdAux::getRoute "PFEM_Parts"] - # set xp1 "$parts_path/group/value\[@n='Element'\]" - set xp1 "$parts_path/group" - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - lappend parts [get_domnode_attribute $gNode n] - } - return $parts -} - -proc Pfem::xml::GetBodiesInformation { } { - variable body_UN - set bodies [list ] - set bodies_path [spdAux::getRoute $body_UN] - foreach body_node [[customlib::GetBaseRoot] selectNodes "$bodies_path/blockdata"] { - set body [dict create] - dict set body name [get_domnode_attribute $body_node name] - dict set body type [get_domnode_attribute [$body_node selectNodes "./value\[@n='BodyType'\]"] v] - dict set body mesh [get_domnode_attribute [$body_node selectNodes "./value\[@n='MeshingStrategy'\]"] v] - dict set body cont [get_domnode_attribute [$body_node selectNodes "./value\[@n='ContactStrategy'\]"] v] - set parts [list ] - foreach gNode [$body_node selectNodes "./container\[@n='Groups'\]/blockdata\[@n='Group'\]"] { - lappend parts [$gNode @name] - } - dict set body parts $parts - lappend bodies $body - } - - return $bodies -} - -proc Pfem::xml::SaveBodiesInformation {data} { - W "Unimplemented method Pfem::xml::SaveBodiesInformation" -} - -proc Pfem::xml::AddNewBodyRaw { } { - variable body_UN - set bodies_path [spdAux::getRoute $body_UN] - - set bodies_name_list [list ] - foreach body [Pfem::xml::GetBodiesInformation] { - lappend bodies_name_list [dict get $body name] - } - set i 0 - while {"Body$i" in $bodies_name_list} {incr i} - set body_name "Body$i" - - set str "" - append str "" - append str "" - append str "" - append str "" - # append str "" - append str "" - append str "" - - [[customlib::GetBaseRoot] selectNodes $bodies_path] appendXML $str - - return $body_name -} - -proc Pfem::xml::DeleteBody {body_name} { - variable body_UN - set bodies_path [spdAux::getRoute $body_UN] - [[customlib::GetBaseRoot] selectNodes "$bodies_path/blockdata\[@name = '$body_name'\]"] delete -} - -proc Pfem::xml::AddPartToBody {body_name part_name} { - variable body_UN - set bodies_path [spdAux::getRoute $body_UN] - # TODO: Check if part exists in parts availables for body - foreach body [Pfem::xml::GetBodiesInformation] { - if {[dict get $body name] eq $body_name} { - if {$part_name ni [dict get $body parts]} { - set str "" - [[customlib::GetBaseRoot] selectNodes "$bodies_path/blockdata\[@name = '$body_name'\]/container\[@n = 'Groups'\]"] appendXML $str - } - } - } -} - -proc Pfem::xml::DeletePartInBody {body_name part_name} { - variable body_UN - set bodies_path [spdAux::getRoute $body_UN] - [[customlib::GetBaseRoot] selectNodes "$bodies_path/blockdata\[@name = '$body_name'\]/container\[@n = 'Groups'\]/blockdata\[@name = '$part_name'\]"] delete -} - -proc Pfem::xml::UpdateBody {body_name_old body_name body_type body_mesh body_cont} { - - variable body_UN - set bodies_path [spdAux::getRoute $body_UN] - # TODO: check if $body_name_old exists in parent - set node [[customlib::GetBaseRoot] selectNodes "$bodies_path/blockdata\[@name = '$body_name_old'\]"] - $node setAttribute name $body_name - [$node selectNodes "./value\[@n = 'BodyType'\]"] setAttribute v $body_type - [$node selectNodes "./value\[@n = 'MeshingStrategy'\]"] setAttribute v $body_mesh - [$node selectNodes "./value\[@n = 'ContactStrategy'\]"] setAttribute v $body_cont -} - - -# TODO: Event After rename group for bodies associetion. Wait Event register system - -# TODO: Event After delete group for bodies associetion. Wait Event register system - -Pfem::xml::Init diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index e5e76211b..2cbcda122 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -15,7 +15,7 @@ proc PfemFluid::xml::Init { } { Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml Model::getNodalConditions NodalConditions.xml - Model::getSolvers "../../Pfem/xml/Solvers.xml" + Model::getSolvers Solvers.xml Model::ForgetNodalCondition "CONTACT" } From 2a72aca726fa2e63659757257d6e451bbd2ada35 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 8 Sep 2021 18:31:43 +0200 Subject: [PATCH 368/556] PfemThermic --- kratos.gid/apps/PfemFluid/start.tcl | 2 +- kratos.gid/apps/PfemThermic/app.json | 50 +++++++++++++++++++ .../examples/ThermicConvection.tcl | 25 ++++------ .../PfemThermic/examples/ThermicCubeDrop.tcl | 25 ++++------ .../examples/ThermicDamBreakFSI.tcl | 25 ++++------ .../PfemThermic/examples/ThermicFluidDrop.tcl | 25 ++++------ .../PfemThermic/examples/ThermicSloshing.tcl | 25 ++++------ .../examples/ThermicSloshingConvection.tcl | 23 ++++----- .../apps/PfemThermic/examples/examples.tcl | 21 +++----- .../apps/PfemThermic/examples/examples.xml | 12 ++--- kratos.gid/apps/PfemThermic/start.tcl | 48 ++++-------------- kratos.gid/apps/PfemThermic/write/write.tcl | 4 +- .../PfemThermic/xml/FluidSolutionStrategy.spd | 32 ++++++------ .../apps/PfemThermic/xml/XmlController.tcl | 8 +-- .../apps/PotentialFluid/xml/XmlController.tcl | 2 +- 15 files changed, 153 insertions(+), 174 deletions(-) create mode 100644 kratos.gid/apps/PfemThermic/app.json diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index c257edd1d..48485b91a 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -7,8 +7,8 @@ namespace eval ::PfemFluid { proc ::PfemFluid::Init { app } { # Variable initialization variable dir - variable _app set dir [apps::getMyDir "PfemFluid"] + variable _app set _app $app PfemFluid::xml::Init diff --git a/kratos.gid/apps/PfemThermic/app.json b/kratos.gid/apps/PfemThermic/app.json new file mode 100644 index 000000000..4b604cb30 --- /dev/null +++ b/kratos.gid/apps/PfemThermic/app.json @@ -0,0 +1,50 @@ +{ + "id": "PfemThermic", + "name": "Pfem Thermic", + "prefix": "PFEMTHERMIC_", + "themed": true, + "kratos_name": "PfemThermicDynamicsApplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/ThermicSloshing.tcl", + "examples/ThermicConvection.tcl", + "examples/ThermicSloshingConvection.tcl", + "examples/ThermicDamBreakFSI.tcl", + "examples/ThermicCubeDrop.tcl", + "examples/ThermicFluidDrop.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::PfemThermic::Init", + "requeriments":{ + "apps":["PfemFluid", "ConvectionDiffusion"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "nodal_conditions": "PFEMFLUID_NodalConditions", + "materials": "PFEMFLUID_Materials", + "results": "Results", + "time_parameters": "PFEMFLUID_TimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "PFEMFluidMaterials.json", + "properties_location": "json", + "model_part_name": "PfemFluidModelPartPfemFluid", + "output_model_part_name": "fluid_computational_model_part" + }, + "main_launch_file": "python/RunPFEM.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 656200f5c..2007fbdd9 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -1,4 +1,7 @@ -proc ::PfemThermic::examples::ThermicConvection {args} { +namespace eval PfemThermic::examples::ThermicConvection { + +} +proc ::PfemThermic::examples::ThermicConvection::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicConvection {args} { } Kratos::ResetModel - DrawThermicConvectionGeometry - AssignGroupsThermicConvectionGeometry - TreeAssignationThermicConvection + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicConvection {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicConvectionGeometry {args} { +proc PfemThermic::examples::ThermicConvection::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -40,7 +43,7 @@ proc PfemThermic::examples::DrawThermicConvectionGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry {args} { +proc PfemThermic::examples::ThermicConvection::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -64,7 +67,7 @@ proc PfemThermic::examples::AssignGroupsThermicConvectionGeometry {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicConvection {args} { +proc PfemThermic::examples::ThermicConvection::TreeAssignation {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -164,11 +167,3 @@ proc PfemThermic::examples::TreeAssignationThermicConvection {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index 40d790fa0..c88eec274 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -1,4 +1,7 @@ -proc ::PfemThermic::examples::ThermicCubeDrop {args} { +namespace eval PfemThermic::examples::ThermicCubeDrop { + +} +proc ::PfemThermic::examples::ThermicCubeDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicCubeDrop {args} { } Kratos::ResetModel - DrawThermicCubeDropGeometry - AssignGroupsThermicCubeDropGeometry - TreeAssignationThermicCubeDrop + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicCubeDrop {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicCubeDropGeometry {args} { +proc PfemThermic::examples::ThermicCubeDrop::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -57,7 +60,7 @@ proc PfemThermic::examples::DrawThermicCubeDropGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry {args} { +proc PfemThermic::examples::ThermicCubeDrop::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -76,7 +79,7 @@ proc PfemThermic::examples::AssignGroupsThermicCubeDropGeometry {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicCubeDrop {args} { +proc PfemThermic::examples::ThermicCubeDrop::TreeAssignation {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -161,11 +164,3 @@ proc PfemThermic::examples::TreeAssignationThermicCubeDrop {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index 7861383c5..0efd6ab12 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -1,4 +1,7 @@ -proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { +namespace eval PfemThermic::examples::ThermicDamBreakFSI { + +} +proc ::PfemThermic::examples::ThermicDamBreakFSI::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { } Kratos::ResetModel - DrawThermicDamBreakFSIGeometry - AssignGroupsThermicDamBreakFSIGeometry - TreeAssignationThermicDamBreakFSI + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicDamBreakFSI {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry {args} { +proc PfemThermic::examples::ThermicDamBreakFSI::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -57,7 +60,7 @@ proc PfemThermic::examples::DrawThermicDamBreakFSIGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry {args} { +proc PfemThermic::examples::ThermicDamBreakFSI::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -77,7 +80,7 @@ proc PfemThermic::examples::AssignGroupsThermicDamBreakFSIGeometry {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI {args} { +proc PfemThermic::examples::ThermicDamBreakFSI::TreeAssignation {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -162,11 +165,3 @@ proc PfemThermic::examples::TreeAssignationThermicDamBreakFSI {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 850c48f4b..011508168 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -1,4 +1,7 @@ -proc ::PfemThermic::examples::ThermicFluidDrop {args} { +namespace eval PfemThermic::examples::ThermicFluidDrop { + +} +proc ::PfemThermic::examples::ThermicFluidDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicFluidDrop {args} { } Kratos::ResetModel - DrawThermicFluidDropGeometry - AssignGroupsThermicFluidDropGeometry - TreeAssignationThermicFluidDrop + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicFluidDrop {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicFluidDropGeometry {args} { +proc PfemThermic::examples::ThermicFluidDrop::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -49,7 +52,7 @@ proc PfemThermic::examples::DrawThermicFluidDropGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry {args} { +proc PfemThermic::examples::ThermicFluidDrop::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -64,7 +67,7 @@ proc PfemThermic::examples::AssignGroupsThermicFluidDropGeometry {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicFluidDrop {args} { +proc PfemThermic::examples::ThermicFluidDrop::TreeAssignation {args} { # Physics gid_groups_conds::setAttributesF [spdAux::getRoute PFEMFLUID_DomainType] {v FSI} @@ -136,11 +139,3 @@ proc PfemThermic::examples::TreeAssignationThermicFluidDrop {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index 31ffb0725..de71d31bd 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -1,4 +1,7 @@ -proc ::PfemThermic::examples::ThermicSloshing {args} { +namespace eval PfemThermic::examples::ThermicSloshing { + +} +proc ::PfemThermic::examples::ThermicSloshing::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { } Kratos::ResetModel - DrawThermicSloshingGeometry - AssignGroupsThermicSloshingGeometry - TreeAssignationThermicSloshing + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicSloshing {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicSloshingGeometry {args} { +proc PfemThermic::examples::ThermicSloshing::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -48,7 +51,7 @@ proc PfemThermic::examples::DrawThermicSloshingGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry {args} { +proc PfemThermic::examples::ThermicSloshing::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -60,7 +63,7 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingGeometry {args} { } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicSloshing {args} { +proc PfemThermic::examples::ThermicSloshing::TreeAssignation {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -123,11 +126,3 @@ proc PfemThermic::examples::TreeAssignationThermicSloshing {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index e6d940757..439bdf296 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -1,3 +1,6 @@ +namespace eval PfemThermic::examples::ThermicSloshingConvection::ThermicSloshing { + +} proc ::PfemThermic::examples::ThermicSloshingConvection {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" @@ -6,9 +9,9 @@ proc ::PfemThermic::examples::ThermicSloshingConvection {args} { } Kratos::ResetModel - DrawThermicSloshingConvectionGeometry - AssignGroupsThermicSloshingConvectionGeometry - TreeAssignationThermicSloshingConvection + DrawGeometry + AssignGroups + TreeAssignation GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::PfemThermic::examples::ThermicSloshingConvection {args} { } # Draw Geometry -proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry {args} { +proc PfemThermic::examples::ThermicSloshingConvection::DrawGeometry {args} { ## Layer ## set layer PfemThermic GiD_Layers create $layer @@ -48,7 +51,7 @@ proc PfemThermic::examples::DrawThermicSloshingConvectionGeometry {args} { } # Group assign -proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry {args} { +proc PfemThermic::examples::ThermicSloshingConvection::AssignGroups {args} { GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" GiD_EntitiesGroups assign Fluid surfaces 1 @@ -72,7 +75,7 @@ proc PfemThermic::examples::AssignGroupsThermicSloshingConvectionGeometry {args} } # Tree assign -proc PfemThermic::examples::TreeAssignationThermicSloshingConvection {args} { +proc PfemThermic::examples::ThermicSloshingConvection::TreeAssignation {args} { # Physics spdAux::SetValueOnTreeItem v "Fluids" PFEMFLUID_DomainType @@ -182,11 +185,3 @@ proc PfemThermic::examples::TreeAssignationThermicSloshingConvection {args} { spdAux::SetValueOnTreeItem values transient CNVDFFSolStrat spdAux::RequestRefresh } - -proc PfemThermic::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index 4cf86042c..f9c6adb3b 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -1,17 +1,10 @@ namespace eval PfemThermic::examples { } - -proc PfemThermic::examples::Init { } { - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicSloshing.tcl]] - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicConvection.tcl]] - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicSloshingConvection.tcl]] - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicDamBreakFSI.tcl]] - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicCubeDrop.tcl]] - uplevel #0 [list source [file join $::PfemThermic::dir examples ThermicFluidDrop.tcl]] -} - -proc PfemThermic::examples::UpdateMenus { } { -} - -PfemThermic::examples::Init +proc PfemThermic::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/examples.xml b/kratos.gid/apps/PfemThermic/examples/examples.xml index 8626b4bff..0f6008c13 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.xml +++ b/kratos.gid/apps/PfemThermic/examples/examples.xml @@ -1,11 +1,11 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 2862d6342..2058d7522 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -1,49 +1,19 @@ namespace eval ::PfemThermic { # Variable declaration variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::PfemThermic::Init { } { +proc ::PfemThermic::Init { app } { # Variable initialization variable dir - variable prefix - variable kratos_name - variable attributes - set dir [apps::getMyDir "PfemThermic"] - set prefix PFEMTHERMIC_ - set kratos_name PfemThermicDynamicsApplication - set attributes [dict create] - dict set attributes UseIntervals 1 - dict set attributes UseRestart 1 + + variable _app + set _app $app - apps::LoadAppById "PfemFluid" - apps::LoadAppById "ConvectionDiffusion" - - if {[Kratos::IsDeveloperMode]} {error [= "You need to change to Developer mode in the Kratos menu"] } - - set ::spdAux::TreeVisibility 1 - set ::Model::ValidSpatialDimensions [list 2D 3D] - - LoadMyFiles -} - -proc ::PfemThermic::LoadMyFiles { } { - variable dir - uplevel #0 [list source [file join $dir examples examples.tcl]] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} - -proc ::PfemThermic::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value + PfemThermic::xml::Init + PfemThermic::write::Init } proc ::PfemThermic::CustomToolbarItems { } { @@ -61,4 +31,6 @@ proc ::PfemThermic::CustomToolbarItems { } { Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] } -::PfemThermic::Init +proc ::PfemThermic::GetAttribute {name} {return [$::PfemThermic::_app getProperty $name]} +proc ::PfemThermic::GetUniqueName {name} {return [$::PfemThermic::_app getUniqueName $name]} +proc ::PfemThermic::GetWriteProperty {name} {return [$::PfemThermic::_app getWriteProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 4b00e834a..bf69d3949 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -217,6 +217,4 @@ proc PfemThermic::write::GetTable { prop fileName } { dict set table data $points return $table -} - -PfemThermic::write::Init \ No newline at end of file +} \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd b/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd index 9453d5193..27da2c54b 100644 --- a/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd +++ b/kratos.gid/apps/PfemThermic/xml/FluidSolutionStrategy.spd @@ -1,7 +1,7 @@ - - - - - - - - - - - + + - - - - - + + + + + diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index f96bebfdb..c93806557 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -1,11 +1,9 @@ namespace eval PfemThermic::xml { # Namespace variables declaration - variable dir } proc PfemThermic::xml::Init { } { - variable dir - Model::InitVariables dir $PfemThermic::dir + Model::InitVariables dir $::PfemThermic::dir Model::ForgetConstitutiveLaws Model::getConstitutiveLaws ConstitutiveLaws.xml @@ -18,7 +16,7 @@ proc PfemThermic::xml::Init { } { } proc PfemThermic::xml::getUniqueName {name} { - return ${::PfemThermic::prefix}${name} + return [::PfemThermic::GetAttribute prefix]${name} } proc PfemThermic::xml::CustomTree { args } { @@ -103,5 +101,3 @@ proc PfemThermic::xml::ProcGetElementsValues {domNode args} { return $values } - -PfemThermic::xml::Init diff --git a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl index 229d54fa5..7d6f1eaef 100644 --- a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl @@ -26,7 +26,7 @@ proc PotentialFluid::xml::Init { } { proc PotentialFluid::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL [::PotentialFluid::GetAttribute prefix] + spdAux::ConvertAllUniqueNames [::Fluid::GetAttribute prefix] [::PotentialFluid::GetAttribute prefix] } } From 9710d0e787b167d46a3175bd4419bed1e5b2b858 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 8 Sep 2021 21:25:20 +0200 Subject: [PATCH 369/556] missing unique name --- kratos.gid/apps/CDEM/xml/Main.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/CDEM/xml/Main.spd b/kratos.gid/apps/CDEM/xml/Main.spd index 72fb69f01..8cffd07aa 100644 --- a/kratos.gid/apps/CDEM/xml/Main.spd +++ b/kratos.gid/apps/CDEM/xml/Main.spd @@ -1,5 +1,5 @@ - + From 61c92ab0748bc03e4202ea83b770d8c90f042a1d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 8 Sep 2021 21:32:08 +0200 Subject: [PATCH 370/556] patch cdem --- kratos.gid/apps/CDEM/xml/XmlController.tcl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index c29e930c4..4a6364fad 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -14,6 +14,8 @@ proc CDEM::xml::Init { } { Model::getMaterialRelations MaterialRelations.xml Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml + + ApplyPatches } proc CDEM::xml::getUniqueName {name} { @@ -65,4 +67,12 @@ proc CDEM::xml::MultiAppEvent {args} { } } +proc CDEM::xml::ApplyPatches { } { + if {[spdAux::getRoute DEMROOT] eq ""} { + [[customlib::GetBaseRoot] selectNodes "container\[@n='CDEM'\]"] setAttribute un DEMROOT + spdAux::parseRoutes + } + +} + CDEM::xml::Init From 4de0a23aa6ae3f66b93504f6721dbeb34616515d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 08:18:56 +0200 Subject: [PATCH 371/556] hotfix cdem write --- kratos.gid/scripts/Writing/WriteMaterials.tcl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/scripts/Writing/WriteMaterials.tcl b/kratos.gid/scripts/Writing/WriteMaterials.tcl index 3b4c48735..21bdc53bb 100644 --- a/kratos.gid/scripts/Writing/WriteMaterials.tcl +++ b/kratos.gid/scripts/Writing/WriteMaterials.tcl @@ -80,6 +80,8 @@ proc write::processMaterials { {alt_path ""} {last_assigned_id -1}} { set xp3 "[spdAux::getRoute $materials_un]/blockdata\[@n='material' and @name='$real_material_name']" set matNode [$root selectNodes $xp3] set s1 [join [list [$gNode selectNodes ".//value"] [$matNode selectNodes ".//value"]]] + } else { + set s1 [$gNode selectNodes ".//value"] } foreach valueNode $s1 { write::forceUpdateNode $valueNode From 2e5ae2bb451c29693c1fd94ab9a41f47c869defd Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 13:02:06 +0200 Subject: [PATCH 372/556] Fixing PfemThermic write process --- kratos.gid/apps/PfemFluid/app.json | 2 +- kratos.gid/apps/PfemFluid/write/write.tcl | 14 -- kratos.gid/apps/PfemThermic/app.json | 2 +- .../examples/ThermicSloshingConvection.tcl | 2 +- kratos.gid/apps/PfemThermic/write/write.tcl | 189 +++++++++--------- .../Writing/WriteProjectParameters.tcl | 2 +- 6 files changed, 102 insertions(+), 109 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/app.json b/kratos.gid/apps/PfemFluid/app.json index 83f8217d8..dbcb2387c 100644 --- a/kratos.gid/apps/PfemFluid/app.json +++ b/kratos.gid/apps/PfemFluid/app.json @@ -38,7 +38,7 @@ "coordinates": "all", "materials_file": "PFEMFluidMaterials.json", "properties_location": "json", - "model_part_name": "PfemFluidModelPartPfemFluid", + "model_part_name": "PfemFluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, "main_launch_file": "python/RunPFEM.py", diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index e0da78924..322e95a66 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -62,20 +62,6 @@ proc PfemFluid::write::writeMeshes { } { proc PfemFluid::write::writeNodalConditions { keyword } { write::writeNodalConditions $keyword - return "" - - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute $keyword]/container/blockdata" - set groups [$root selectNodes $xp1] - foreach group $groups { - set cid [[$group parent] @n] - set groupid [$group @name] - set groupid [write::GetWriteGroupName $groupid] - # Aqui hay que gestionar la escritura de los bodies - # Una opcion es crear un megagrupo temporal con esa informacion, mandar a pintar, y luego borrar el grupo. - # Otra opcion es no escribir el submodelpart. Ya tienen las parts y el project parameters tiene el conformado de los bodies - ::write::writeGroupSubModelPart $cid $groupid "nodal" - } } proc PfemFluid::write::GetPartsUN { } { diff --git a/kratos.gid/apps/PfemThermic/app.json b/kratos.gid/apps/PfemThermic/app.json index 4b604cb30..4f2385b15 100644 --- a/kratos.gid/apps/PfemThermic/app.json +++ b/kratos.gid/apps/PfemThermic/app.json @@ -42,7 +42,7 @@ "coordinates": "all", "materials_file": "PFEMFluidMaterials.json", "properties_location": "json", - "model_part_name": "PfemFluidModelPartPfemFluid", + "model_part_name": "PfemFluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, "main_launch_file": "python/RunPFEM.py", diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index 439bdf296..17cacd5cc 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -1,7 +1,7 @@ namespace eval PfemThermic::examples::ThermicSloshingConvection::ThermicSloshing { } -proc ::PfemThermic::examples::ThermicSloshingConvection {args} { +proc ::PfemThermic::examples::ThermicSloshingConvection::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index bf69d3949..2e2425c8b 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -3,27 +3,29 @@ namespace eval ::PfemThermic::write { proc ::PfemThermic::write::Init { } { PfemFluid::write::Init - ConvectionDiffusion::write::Init - - PfemFluid::write::SetAttribute materials_file PFEMThermicMaterials.json - ConvectionDiffusion::write::SetAttribute materials_file PFEMThermicMaterials.json + ConvectionDiffusion::write::Init + + PfemFluid::write::SetAttribute materials_file PFEMThermicMaterials.json + ConvectionDiffusion::write::SetAttribute materials_file PFEMThermicMaterials.json } # MDPA event proc PfemThermic::write::writeModelPartEvent { } { + set root [customlib::GetBaseRoot] - set dictGroupsIterators [dict create] - set xp1 "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition/group" - variable FluxConditions - set FluxConditions(temp) 0 + set dictGroupsIterators [dict create] + set xp1 "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition/group" + variable FluxConditions + set FluxConditions(temp) 0 unset FluxConditions(temp) - - # Write geometries (adapted from PfemFluid::write::writeModelPartEvent) - write::initWriteConfiguration [PfemFluid::write::GetAttributes] - set parts_un_list [PfemFluid::write::GetPartsUN] + + # Write geometries (adapted from PfemFluid::write::writeModelPartEvent) + write::initWriteConfiguration [PfemFluid::write::GetAttributes] + set parts_un_list [PfemFluid::write::GetPartsUN] foreach part_un $parts_un_list { - write::initWriteData $part_un "PFEMFLUID_Materials" + write::initWriteData $part_un [PfemFluid::write::GetAttribute materials_un] } + W $::write::mat_dict write::writeModelPartData write::WriteString "Begin Properties 0" write::WriteString "End Properties" @@ -32,28 +34,28 @@ proc PfemThermic::write::writeModelPartEvent { } { write::initWriteData $part_un "PFEMFLUID_Materials" write::writeElementConnectivities } - - # Write flux conditions (adapted from write::writeConditions) - set iter 0 - foreach group [$root selectNodes $xp1] { - set condid [[$group parent] @n] - set groupid [get_domnode_attribute $group n] - set groupid [write::GetWriteGroupName $groupid] - incr iter - if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D" || $condid eq "ThermalFace2D" || $condid eq "ThermalFace3D"} { + + # Write flux conditions (adapted from write::writeConditions) + set iter 0 + foreach group [$root selectNodes $xp1] { + set condid [[$group parent] @n] + set groupid [get_domnode_attribute $group n] + set groupid [write::GetWriteGroupName $groupid] + incr iter + if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D" || $condid eq "ThermalFace2D" || $condid eq "ThermalFace3D"} { set dictGroupsIterators [write::writeGroupNodeCondition $dictGroupsIterators $group $condid $iter] } - if {[dict exists $dictGroupsIterators $groupid]} { + if {[dict exists $dictGroupsIterators $groupid]} { set iter [lindex [dict get $dictGroupsIterators $groupid] 1] } else { incr iter -1 } - } - - # Fill FluxConditions (adapted from ConvectionDiffusion::write::writeBoundaryConditions) + } + + # Fill FluxConditions (adapted from ConvectionDiffusion::write::writeBoundaryConditions) foreach group [$root selectNodes $xp1] { set condid [[$group parent] @n] - set groupid [get_domnode_attribute $group n] + set groupid [get_domnode_attribute $group n] set groupid [write::GetWriteGroupName $groupid] if {$condid eq "HeatFlux2D" || $condid eq "HeatFlux3D" || $condid eq "ThermalFace2D" || $condid eq "ThermalFace3D"} { lassign [dict get $dictGroupsIterators $groupid] ini fin @@ -62,48 +64,48 @@ proc PfemThermic::write::writeModelPartEvent { } { set FluxConditions($groupid,SkinCondition) 1 } } - - # Write submodelparts (adapted from PfemFluid::write::writeMeshes) - foreach part_un $parts_un_list { + + # Write submodelparts (adapted from PfemFluid::write::writeMeshes) + foreach part_un $parts_un_list { write::initWriteData $part_un "PFEMFLUID_Materials" write::writePartSubModelPart } - - # Write submodel parts with flux conditions (adapted from PfemFluid::write::writeNodalConditions and ConvectionDiffusion::write::writeConditionsMesh) + + # Write submodel parts with flux conditions (adapted from PfemFluid::write::writeNodalConditions and ConvectionDiffusion::write::writeConditionsMesh) foreach group [$root selectNodes $xp1] { set condid [[$group parent] @n] - # For nodal conditions - if {[Model::getNodalConditionbyId $condid] ne ""} { - set groupid [$group @n] + # For nodal conditions + if {[Model::getNodalConditionbyId $condid] ne ""} { + set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { - ::write::writeGroupSubModelPart $condid $groupid "nodal" - } else { - set ini $FluxConditions($groupid,initial) - set end $FluxConditions($groupid,final) - ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] - } - # For conditions - } else { - if {[Model::getCondition $condid] ne ""} { - set groupid [$group @n] + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { + ::write::writeGroupSubModelPart $condid $groupid "nodal" + } else { + set ini $FluxConditions($groupid,initial) + set end $FluxConditions($groupid,final) + ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] + } + # For conditions + } else { + if {[Model::getCondition $condid] ne ""} { + set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - - if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { - ::write::writeGroupSubModelPart $condid $groupid "Nodes" - } else { - set ini $FluxConditions($groupid,initial) - set end $FluxConditions($groupid,final) - ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] - } - } - } + + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { + ::write::writeGroupSubModelPart $condid $groupid "Nodes" + } else { + set ini $FluxConditions($groupid,initial) + set end $FluxConditions($groupid,final) + ::write::writeGroupSubModelPart $condid $groupid "Conditions" [list $ini $end] + } + } + } } } # Custom files event proc PfemThermic::write::writeCustomFilesEvent { } { - PfemThermic::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] + PfemThermic::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] write::CopyFileIntoModel [file join "python" "MainKratos.py"] } @@ -128,7 +130,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m set props [list] set doc $gid_groups_conds::doc set root [$doc documentElement] - + set xp1 "[spdAux::getRoute $parts_un]/group" if {[llength [$root selectNodes $xp1]] < 1} { set xp1 "[spdAux::getRoute $parts_un]/condition/group" @@ -136,62 +138,67 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m foreach gNode [$root selectNodes $xp1] { set group [get_domnode_attribute $gNode n] set cond_id [get_domnode_attribute [$gNode parent] n] - set sub_model_part [write::getSubModelPartId $cond_id $group] - if {$model_part_name ne ""} {set sub_model_part $model_part_name.$sub_model_part} - set sub_model_part [string trim $sub_model_part "."] - if { [dict exists $mat_dict $group] } { - set mid [dict get $mat_dict $group MID] + # set sub_model_part [write::getSubModelPartId $cond_id $group] + # if {$model_part_name ne ""} {set sub_model_part $model_part_name.$sub_model_part} + # set sub_model_part [string trim $sub_model_part "."] + + set submodelpart_id [write::GetSubModelPartName $cond_id $group] + set submodelpart_fullname $submodelpart_id + if {$model_part_name ne ""} {set submodelpart_fullname $model_part_name.$submodelpart_id} + set submodelpart_id [string trim $submodelpart_id "."] + if { [dict exists $mat_dict $submodelpart_id] } { + set mid [dict get $mat_dict $submodelpart_id MID] set prop_dict [dict create] - dict set prop_dict "model_part_name" $sub_model_part + dict set prop_dict "model_part_name" $submodelpart_fullname dict set prop_dict "properties_id" $mid set constitutive_law_id "" - if {[dict exists $mat_dict $group ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $group ConstitutiveLaw]} + if {[dict exists $mat_dict $submodelpart_id ConstitutiveLaw ]} {set constitutive_law_id [dict get $mat_dict $submodelpart_id ConstitutiveLaw]} set constitutive_law [Model::getConstitutiveLaw $constitutive_law_id] if {$constitutive_law ne ""} { set exclusionList [list "MID" "APPID" "ConstitutiveLaw" "Material" "Element"] - set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YIELDSHEAR" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT"] + set tableList [list "TEMPERATURE_vs_DENSITY" "TEMPERATURE_vs_VISCOSITY" "TEMPERATURE_vs_YIELDSHEAR" "TEMPERATURE_vs_YOUNG" "TEMPERATURE_vs_POISSON" "TEMPERATURE_vs_CONDUCTIVITY" "TEMPERATURE_vs_SPECIFIC_HEAT"] set variables_dict [dict create] - set tables_dict [dict create] - foreach prop [dict keys [dict get $mat_dict $group] ] { + set tables_dict [dict create] + foreach prop [dict keys [dict get $mat_dict $submodelpart_id] ] { if {$prop ni $exclusionList && $prop ni $tableList} { - dict set variables_list $prop [write::getFormattedValue [dict get $mat_dict $group $prop]] + dict set variables_list $prop [write::getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] } - if {$prop in $tableList} { - set fileName [write::getFormattedValue [dict get $mat_dict $group $prop]] - if {$fileName ne "- No file"} { - dict set tables_dict $prop [PfemThermic::write::GetTable $prop $fileName] - } + if {$prop in $tableList} { + set fileName [write::getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] + if {$fileName ne "- No file"} { + dict set tables_dict $prop [PfemThermic::write::GetTable $prop $fileName] + } } } set material_dict [dict create] - + if {$write_claw_name eq "True"} { set constitutive_law_name [$constitutive_law getKratosName] dict set material_dict constitutive_law [dict create name $constitutive_law_name] } - + dict set material_dict Variables $variables_list - dict set material_dict Tables $tables_dict + dict set material_dict Tables $tables_dict dict set prop_dict Material $material_dict - + lappend props $prop_dict } } } - + dict set props_dict properties $props return $props_dict } proc PfemThermic::write::GetTable { prop fileName } { - set table [dict create] + set table [dict create] dict set table input_variable "TEMPERATURE" - - if {$prop eq "TEMPERATURE_vs_DENSITY"} { + + if {$prop eq "TEMPERATURE_vs_DENSITY"} { dict set table output_variable "DENSITY" } elseif {$prop eq "TEMPERATURE_vs_VISCOSITY"} { dict set table output_variable "DYNAMIC_VISCOSITY" - } elseif {$prop eq "TEMPERATURE_vs_YIELDSHEAR"} { + } elseif {$prop eq "TEMPERATURE_vs_YIELDSHEAR"} { dict set table output_variable "YIELD_SHEAR" } elseif {$prop eq "TEMPERATURE_vs_YOUNG"} { dict set table output_variable "YOUNG_MODULUS" @@ -203,18 +210,18 @@ proc PfemThermic::write::GetTable { prop fileName } { dict set table output_variable "SPECIFIC_HEAT" } - set fp [open $fileName r] + set fp [open $fileName r] set file_data [read $fp] close $fp - - set points {} + + set points {} set data [split $file_data "\n"] foreach line $data { if {[scan $line %f%f a b] == 2} { - lappend points [list $a $b] - } + lappend points [list $a $b] + } } - dict set table data $points - - return $table + dict set table data $points + + return $table } \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index a17aee031..12efe61dd 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -388,7 +388,7 @@ proc write::GetModelPartNameWithParent { child_name {forced_parent ""}} { append parent $par "." } } else { - append parent $forced_parent "." + append parent $forced_parent "." } append result $parent $child_name return [string trim $result "."] From 730a4925b8ce9b575115877d6863fe26e6516300 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 13:40:33 +0200 Subject: [PATCH 373/556] sobraba --- kratos.gid/apps/PfemThermic/write/write.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 2e2425c8b..501e0158a 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -25,7 +25,7 @@ proc PfemThermic::write::writeModelPartEvent { } { foreach part_un $parts_un_list { write::initWriteData $part_un [PfemFluid::write::GetAttribute materials_un] } - W $::write::mat_dict + write::writeModelPartData write::WriteString "Begin Properties 0" write::WriteString "End Properties" From f65a45c1553ec394438a2d0080fd1fa6ba900d51 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 14:34:50 +0200 Subject: [PATCH 374/556] FluidDEM --- .../xml/BoundingBoxWindowController.tcl | 3 + kratos.gid/apps/FluidDEM/app.json | 34 +++++ .../apps/FluidDEM/examples/CylinderInFlow.tcl | 39 +++--- .../apps/FluidDEM/examples/SpheresDrop.tcl | 119 ------------------ .../apps/FluidDEM/examples/examples.tcl | 16 ++- .../apps/FluidDEM/examples/examples.xml | 8 +- .../apps/FluidDEM/images/SpheresDrop.png | Bin 0 -> 4843 bytes kratos.gid/apps/FluidDEM/start.tcl | 48 +------ kratos.gid/apps/FluidDEM/write/write.tcl | 13 +- .../FluidDEM/write/writeProjectParameters.tcl | 4 +- .../apps/FluidDEM/xml/XmlController.tcl | 19 ++- 11 files changed, 84 insertions(+), 219 deletions(-) create mode 100644 kratos.gid/apps/FluidDEM/app.json delete mode 100644 kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl create mode 100644 kratos.gid/apps/FluidDEM/images/SpheresDrop.png diff --git a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl index 846c1a4fd..921ad520d 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl @@ -7,6 +7,9 @@ namespace eval EmbeddedFluid::xml::BoundingBox { } proc EmbeddedFluid::xml::BoundingBox::Init {} { + if { [GidUtils::IsTkDisabled] } { + return 0 + } package require wcb variable winpath set winpath ".gid.bboxwindow" diff --git a/kratos.gid/apps/FluidDEM/app.json b/kratos.gid/apps/FluidDEM/app.json new file mode 100644 index 000000000..97a7048e5 --- /dev/null +++ b/kratos.gid/apps/FluidDEM/app.json @@ -0,0 +1,34 @@ +{ + "id": "FluidDEM", + "name": "Swimming DEM", + "prefix": "FluidDEM_", + "themed": false, + "kratos_name": "FluidDEMapplication", + "dimensions": [ + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/CylinderInFlow.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::FluidDEM::Init", + "requeriments":{ + "apps":["DEM", "Fluid"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "write": { + "coordinates": "groups" + }, + "main_launch_file": "python/MainKratos.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl index 299e3f7cf..ea1ddec57 100644 --- a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl @@ -1,15 +1,18 @@ +namespace eval ::FluidDEM::examples::CylinderInFlow { + namespace path ::FluidDEM::examples +} -proc ::FluidDEM::examples::CylinderInFlow {args} { +proc ::FluidDEM::examples::CylinderInFlow::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawCylinderInFlowGeometry$::Model::SpatialDimension - AssignGroupsCylinderInFlow$::Model::SpatialDimension - AssignCylinderInFlowMeshSizes$::Model::SpatialDimension - TreeAssignationCylinderInFlow$::Model::SpatialDimension + DrawGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension + AssignMeshSizes$::Model::SpatialDimension + TreeAssignation$::Model::SpatialDimension AssignToTree GiD_Process 'Redraw @@ -24,8 +27,8 @@ proc ::FluidDEM::examples::CylinderInFlow {args} { # Draw Geometry -proc FluidDEM::examples::DrawCylinderInFlowGeometry3D {args} { - DrawCylinderInFlowGeometry2D +proc ::FluidDEM::examples::DrawGeometry3D {args} { + DrawGeometry2D GiD_Process Mescape Utilities Copy Surfaces Duplicate DoExtrude Volumes MaintainLayers Translation FNoJoin 0.0,0.0,0.0 FNoJoin 0.0,0.0,1.0 1 escape escape escape GiD_Layers edit opaque Fluid 0 @@ -45,7 +48,7 @@ proc FluidDEM::examples::DrawCylinderInFlowGeometry3D {args} { GiD_Process 'Rotate Angle 0 0 'rotate scr y -45 'rotate scr x 45 escape } -proc FluidDEM::examples::DrawCylinderInFlowGeometry2D {args} { +proc ::FluidDEM::examples::DrawGeometry2D {args} { Kratos::ResetModel GiD_Layers create Fluid GiD_Layers edit to_use Fluid @@ -86,10 +89,8 @@ proc FluidDEM::examples::DrawCylinderInFlowGeometry2D {args} { } - # Group assign - -proc FluidDEM::examples::AssignGroupsCylinderInFlow3D {args} { +proc ::FluidDEM::examples::AssignGroups3D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -122,7 +123,7 @@ proc FluidDEM::examples::AssignGroupsCylinderInFlow3D {args} { } # Mesh sizes -proc FluidDEM::examples::AssignCylinderInFlowMeshSizes3D {args} { +proc ::FluidDEM::examples::AssignMeshSizes3D {args} { set cylinder_mesh_size 0.1 set walls_mesh_size 0.1 set fluid_mesh_size 0.1 @@ -139,11 +140,8 @@ proc FluidDEM::examples::AssignCylinderInFlowMeshSizes3D {args} { } - - # Tree assign - -proc FluidDEM::examples::TreeAssignationCylinderInFlow3D {args} { +proc ::FluidDEM::examples::TreeAssignation3D {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -251,8 +249,6 @@ proc ::FluidDEM::examples::AssignToTree { } { } } - - # General data # Time parameters set change_list [list EndTime 20 DeltaTime 1e-5 DEMDeltaTime 1e-6 NeighbourSearchFrequency 20] @@ -269,11 +265,4 @@ proc ::FluidDEM::examples::AssignToTree { } { spdAux::RequestRefresh } -proc FluidDEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} diff --git a/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl b/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl deleted file mode 100644 index cdedcdf0d..000000000 --- a/kratos.gid/apps/FluidDEM/examples/SpheresDrop.tcl +++ /dev/null @@ -1,119 +0,0 @@ - -proc ::FluidDEM::examples::SpheresDrop {args} { - if {![Kratos::IsModelEmpty]} { - set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" - set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] - if { $retval == "cancel" } { return } - } - - DrawGeometry - AssignToTree - AssignMeshSize - - GiD_Process 'Redraw - GidUtils::UpdateWindow GROUPS - GidUtils::UpdateWindow LAYER -} - -proc ::FluidDEM::examples::DrawGeometry { } { - Kratos::ResetModel - - GiD_Process Mescape Geometry Create Object Rectangle -5 -5 0 5 5 0 escape - GiD_Process Mescape Geometry Create Object Rectangle -2 -2 5 2 2 5 escape - GiD_Process Mescape Geometry Create Object Rectangle -5 -5 10 5 5 10 escape - GiD_Process Mescape Geometry Create Object Sphere 0 0 2 1 escape escape - - GiD_Process Mescape Geometry Create Object Cylinder 0.0 0.0 0.0 0.0 0.0 1.0 1 10 escape escape - - GiD_Groups create "Floor" - GiD_Groups create "Inlet" - GiD_Groups create "Spheres" - GiD_Groups create "FluidInlet" - GiD_Groups create "FluidOutlet" - - GiD_Layers create "Floor" - GiD_Layers create "Inlet" - GiD_Layers create "Spheres" - GiD_Layers create "FluidInlet" - GiD_Layers create "FluidOutlet" - - GiD_EntitiesGroups assign "Floor" surfaces 1 - GiD_EntitiesGroups assign "Inlet" surfaces 2 - GiD_EntitiesGroups assign "Spheres" volumes 1 - - GiD_EntitiesGroups assign "FluidInlet" surfaces 3 - GiD_EntitiesGroups assign "FluidOutlet" surfaces 1 - - - GiD_EntitiesLayers assign "Floor" -also_lower_entities surfaces 1 - GiD_EntitiesLayers assign "Inlet" -also_lower_entities surfaces 2 - GiD_EntitiesLayers assign "Spheres" -also_lower_entities volumes 1 - - GiD_EntitiesLayers assign "FluidInlet" -also_lower_entities surfaces 3 - GiD_EntitiesLayers assign "FluidOutlet" -also_lower_entities surfaces 2 - - -} - -proc ::FluidDEM::examples::AssignToTree { } { - # Material - set DEMmaterials [spdAux::getRoute "DEMMaterials"] - set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e6 ] - set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"] - spdAux::SetValuesOnBaseNode $material_node $props - - # Parts - set DEMParts [spdAux::getRoute "DEMParts"] - set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts Spheres] - $DEMPartsNode setAttribute ov volume - set props [list Material "DEM-DefaultMaterial"] - spdAux::SetValuesOnBaseNode $DEMPartsNode $props - - # DEM FEM Walls - set DEMConditions [spdAux::getRoute "DEMConditions"] - set walls "$DEMConditions/condition\[@n='DEM-FEM-Wall'\]" - set wallsNode [customlib::AddConditionGroupOnXPath $walls Floor] - $wallsNode setAttribute ov surface - - # Inlet - set DEMInlet "$DEMConditions/condition\[@n='Inlet'\]" - set inlets [list Total 2] - ErasePreviousIntervals - foreach {interval_name modulus} $inlets { - GiD_Groups create "Inlet//$interval_name" - GiD_Groups edit state "Inlet//$interval_name" hidden - spdAux::AddIntervalGroup Inlet "Inlet//$interval_name" - set inletNode [customlib::AddConditionGroupOnXPath $DEMInlet "Inlet//$interval_name"] - $inletNode setAttribute ov surface - set props [list Material "DEM-DefaultMaterial" ParticleDiameter 0.1 VelocityModulus $modulus Interval $interval_name DirectionVector "0.0,0.0,-1.0"] - spdAux::SetValuesOnBaseNode $inletNode $props - } - - # General data - # Time parameters - set change_list [list EndTime 20 DeltaTime 1e-5 NeighbourSearchFrequency 20] - set xpath [spdAux::getRoute DEMTimeParameters] - spdAux::SetValuesOnBasePath $xpath $change_list - - # Bounding box - set change_list [list UseBB true MinZ -1.0] - set xpath [spdAux::getRoute Boundingbox] - spdAux::SetValuesOnBasePath $xpath $change_list - - spdAux::RequestRefresh -} - -proc FluidDEM::examples::AssignMeshSize { } { - GiD_Process Mescape Meshing AssignSizes Volumes 0.2 1:end escape escape escape - GiD_Process Mescape Meshing AssignSizes Surfaces 0.2 1:end escape escape escape - GiD_Process Mescape Meshing AssignSizes Lines 0.2 1:end escape escape escape -} - - -proc FluidDEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.tcl b/kratos.gid/apps/FluidDEM/examples/examples.tcl index 530515d52..48285ab45 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.tcl +++ b/kratos.gid/apps/FluidDEM/examples/examples.tcl @@ -1,12 +1,10 @@ -namespace eval FluidDEM::examples { +namespace eval ::FluidDEM::examples { } - -proc FluidDEM::examples::Init { } { - uplevel #0 [list source [file join $::FluidDEM::dir examples CylinderInFlow.tcl]] -} - -proc FluidDEM::examples::UpdateMenus { } { +proc ::FluidDEM::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } - -FluidDEM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.xml b/kratos.gid/apps/FluidDEM/examples/examples.xml index 430760a74..732a35b2b 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.xml +++ b/kratos.gid/apps/FluidDEM/examples/examples.xml @@ -1,11 +1,11 @@ - - + + - - + + \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/images/SpheresDrop.png b/kratos.gid/apps/FluidDEM/images/SpheresDrop.png new file mode 100644 index 0000000000000000000000000000000000000000..8888126b04a1e5f5acd0f22a3f1f3d4ba1984a17 GIT binary patch literal 4843 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 Date: Thu, 9 Sep 2021 15:51:48 +0200 Subject: [PATCH 375/556] unify python --- kratos.gid/apps/Buoyancy/app.json | 2 +- kratos.gid/apps/Buoyancy/write/write.tcl | 3 -- .../{KratosDEMAnalysis.py => MainKratos.py} | 0 .../apps/ConjugateHeatTransfer/app.json | 2 +- ...ConjugateHeatTransfer.py => MainKratos.py} | 0 .../ConjugateHeatTransfer/write/write.tcl | 4 -- kratos.gid/apps/ConvectionDiffusion/app.json | 2 +- ...osConvectionDiffusion.py => MainKratos.py} | 0 .../apps/ConvectionDiffusion/write/write.tcl | 5 -- kratos.gid/apps/DEM/app.json | 2 +- .../{KratosDEMAnalysis.py => MainKratos.py} | 0 kratos.gid/apps/DEM/write/write.tcl | 5 -- kratos.gid/apps/DEMPFEM/app.json | 34 ++++++++++++++ .../apps/DEMPFEM/examples/InnerSphere.tcl | 26 ++++------ kratos.gid/apps/DEMPFEM/examples/examples.tcl | 18 +++---- kratos.gid/apps/DEMPFEM/examples/examples.xml | 4 +- kratos.gid/apps/DEMPFEM/start.tcl | 47 ++----------------- kratos.gid/apps/DEMPFEM/write/write.tcl | 12 +---- kratos.gid/apps/DEMPFEM/xml/Procs.spd | 6 +++ kratos.gid/apps/DEMPFEM/xml/XmlController.tcl | 16 +++---- kratos.gid/apps/Dam/app.json | 2 +- .../{MainKratosDam.py => MainKratos.py} | 0 kratos.gid/apps/Dam/write/write.tcl | 7 --- kratos.gid/apps/EmbeddedFluid/app.json | 2 +- .../python/{KratosFluid.py => MainKratos.py} | 0 kratos.gid/apps/FSI/app.json | 2 +- .../python/{KratosFSI.py => MainKratos.py} | 0 kratos.gid/apps/FSI/write/write.tcl | 5 +- kratos.gid/apps/Fluid/app.json | 2 +- .../python/{KratosFluid.py => MainKratos.py} | 0 kratos.gid/apps/Fluid/write/write.tcl | 5 -- kratos.gid/apps/FluidDEM/write/write.tcl | 5 +- kratos.gid/apps/MPM/app.json | 2 +- .../{KratosParticle.py => MainKratos.py} | 0 kratos.gid/apps/MPM/write/write.tcl | 7 --- kratos.gid/apps/PfemFluid/app.json | 2 +- .../python/{RunPFEM.py => MainKratos.py} | 0 kratos.gid/apps/PfemFluid/write/write.tcl | 6 --- kratos.gid/apps/PfemThermic/app.json | 2 +- kratos.gid/apps/PfemThermic/write/write.tcl | 1 - kratos.gid/apps/PotentialFluid/app.json | 2 +- ...{KratosPotentialFluid.py => MainKratos.py} | 0 .../apps/PotentialFluid/write/write.tcl | 3 -- kratos.gid/apps/StenosisWizard/app.json | 2 +- kratos.gid/apps/Stent/app.json | 2 +- kratos.gid/apps/Structural/app.json | 2 +- .../{KratosStructural.py => MainKratos.py} | 0 kratos.gid/apps/Structural/write/write.tcl | 4 -- kratos.gid/scripts/Writing/Writing.tcl | 10 ++++ 49 files changed, 99 insertions(+), 164 deletions(-) rename kratos.gid/apps/CDEM/python/{KratosDEMAnalysis.py => MainKratos.py} (100%) rename kratos.gid/apps/ConjugateHeatTransfer/python/{KratosConjugateHeatTransfer.py => MainKratos.py} (100%) rename kratos.gid/apps/ConvectionDiffusion/python/{KratosConvectionDiffusion.py => MainKratos.py} (100%) rename kratos.gid/apps/DEM/python/{KratosDEMAnalysis.py => MainKratos.py} (100%) create mode 100644 kratos.gid/apps/DEMPFEM/app.json rename kratos.gid/apps/Dam/python/{MainKratosDam.py => MainKratos.py} (100%) rename kratos.gid/apps/EmbeddedFluid/python/{KratosFluid.py => MainKratos.py} (100%) rename kratos.gid/apps/FSI/python/{KratosFSI.py => MainKratos.py} (100%) rename kratos.gid/apps/Fluid/python/{KratosFluid.py => MainKratos.py} (100%) rename kratos.gid/apps/MPM/python/{KratosParticle.py => MainKratos.py} (100%) mode change 100755 => 100644 rename kratos.gid/apps/PfemFluid/python/{RunPFEM.py => MainKratos.py} (100%) rename kratos.gid/apps/PotentialFluid/python/{KratosPotentialFluid.py => MainKratos.py} (100%) rename kratos.gid/apps/Structural/python/{KratosStructural.py => MainKratos.py} (100%) mode change 100755 => 100644 diff --git a/kratos.gid/apps/Buoyancy/app.json b/kratos.gid/apps/Buoyancy/app.json index 6a26d1a17..277f857bb 100644 --- a/kratos.gid/apps/Buoyancy/app.json +++ b/kratos.gid/apps/Buoyancy/app.json @@ -43,6 +43,6 @@ "properties_location": "json", "model_part_name": "ThermalModelPart" }, - "main_launch_file": "KratosStructural.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 80cac89f2..625c1e832 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -51,9 +51,6 @@ proc ::Buoyancy::write::writeModelPartEvent { } { proc ::Buoyancy::write::writeCustomFilesEvent { } { # Materials Buoyancy::write::WriteMaterialsFile True - - # Main python script - write::CopyFileIntoModel [file join "python" "MainKratos.py" ] } proc ::Buoyancy::write::Validate {} { diff --git a/kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py b/kratos.gid/apps/CDEM/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/CDEM/python/KratosDEMAnalysis.py rename to kratos.gid/apps/CDEM/python/MainKratos.py diff --git a/kratos.gid/apps/ConjugateHeatTransfer/app.json b/kratos.gid/apps/ConjugateHeatTransfer/app.json index 2ada965c2..2db98c73b 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/app.json +++ b/kratos.gid/apps/ConjugateHeatTransfer/app.json @@ -45,6 +45,6 @@ "properties_location": "json", "model_part_name": "ThermalModelPart" }, - "main_launch_file": "python/KratosConjugateHeatTransfer.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py b/kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/ConjugateHeatTransfer/python/KratosConjugateHeatTransfer.py rename to kratos.gid/apps/ConjugateHeatTransfer/python/MainKratos.py diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index eaba3ae54..addd0832e 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -49,10 +49,6 @@ proc ::ConjugateHeatTransfer::write::writeModelPartEvent { } { proc ::ConjugateHeatTransfer::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile - - # Main python script - write::CopyFileIntoModel [GetAttribute main_script_file] - write::RenameFileInModel [file tail [GetAttribute main_script_file]] "MainKratos.py" } proc ::ConjugateHeatTransfer::write::Validate {} { diff --git a/kratos.gid/apps/ConvectionDiffusion/app.json b/kratos.gid/apps/ConvectionDiffusion/app.json index da860b2a3..9684d42ea 100644 --- a/kratos.gid/apps/ConvectionDiffusion/app.json +++ b/kratos.gid/apps/ConvectionDiffusion/app.json @@ -40,6 +40,6 @@ "model_part_name": "ThermalModelPart", "output_model_part_name": "thermal_computing_domain" }, - "main_launch_file": "KratosConvectionDiffusion.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py b/kratos.gid/apps/ConvectionDiffusion/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/ConvectionDiffusion/python/KratosConvectionDiffusion.py rename to kratos.gid/apps/ConvectionDiffusion/python/MainKratos.py diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 3ad7bee06..12b362b76 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -61,11 +61,6 @@ proc ::ConvectionDiffusion::write::writeModelPartEvent { } { proc ::ConvectionDiffusion::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile False - - # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - write::RenameFileInModel $orig_name "MainKratos.py" } proc ::ConvectionDiffusion::write::Validate {} { diff --git a/kratos.gid/apps/DEM/app.json b/kratos.gid/apps/DEM/app.json index 2be4989c1..c4ced07b1 100644 --- a/kratos.gid/apps/DEM/app.json +++ b/kratos.gid/apps/DEM/app.json @@ -49,6 +49,6 @@ "model_part_name": "FluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "KratosDEMAnalysis.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } \ No newline at end of file diff --git a/kratos.gid/apps/DEM/python/KratosDEMAnalysis.py b/kratos.gid/apps/DEM/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/DEM/python/KratosDEMAnalysis.py rename to kratos.gid/apps/DEM/python/MainKratos.py diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 875b46a67..9f240b89f 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -88,12 +88,7 @@ proc ::DEM::write::writeModelPartEvent { } { } proc ::DEM::write::writeCustomFilesEvent { } { - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - - write::RenameFileInModel $orig_name "MainKratos.py" write::RenameFileInModel "ProjectParameters.json" "ProjectParametersDEM.json" - DEM::write::writeMaterialsFile } diff --git a/kratos.gid/apps/DEMPFEM/app.json b/kratos.gid/apps/DEMPFEM/app.json new file mode 100644 index 000000000..744ba254b --- /dev/null +++ b/kratos.gid/apps/DEMPFEM/app.json @@ -0,0 +1,34 @@ +{ + "id": "DEMPFEM", + "name": "DEM PFEM", + "prefix": "DEMPFEM_", + "themed": false, + "kratos_name": "DEMPFEMapplication", + "dimensions": [ + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/InnerSphere.tcl", + "xml/XmlController.tcl", + "write/write.tcl", + "write/writeProjectParameters.tcl" + ], + "start_script":"::DEMPFEM::Init", + "requeriments":{ + "apps":["DEM", "PfemFluid"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "write": { + "coordinates": "groups" + }, + "main_launch_file": "python/MainKratos.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl b/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl index 9ad1189c3..9c1a1d927 100644 --- a/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl +++ b/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl @@ -1,11 +1,14 @@ +namespace eval ::DEMPFEM::examples::InnerSphere { + namespace path ::DEMPFEM::examples +} -proc ::DEMPFEM::examples::InnerSphere {args} { +proc ::DEMPFEM::examples::InnerSphere::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawSquareGeometry3D + DrawGeometry3D AssignGroups3D TreeAssignation3D MeshAssignation3D @@ -19,7 +22,7 @@ proc ::DEMPFEM::examples::InnerSphere {args} { # Draw Geometry -proc DEMPFEM::examples::DrawSquareGeometry3D {args} { +proc ::DEMPFEM::examples::InnerSphere::DrawGeometry3D {args} { Kratos::ResetModel @@ -41,7 +44,7 @@ proc DEMPFEM::examples::DrawSquareGeometry3D {args} { # Group assign -proc DEMPFEM::examples::AssignGroups3D {args} { +proc ::DEMPFEM::examples::InnerSphere::AssignGroups3D {args} { # Create the groups GiD_Groups create Fluid GiD_Groups edit color Fluid "#26d1a8ff" @@ -62,7 +65,7 @@ proc DEMPFEM::examples::AssignGroups3D {args} { } # Tree assign -proc DEMPFEM::examples::TreeAssignation3D {args} { +proc ::DEMPFEM::examples::InnerSphere::TreeAssignation3D {args} { set root [customlib::GetBaseRoot] set condtype surface @@ -70,7 +73,7 @@ proc DEMPFEM::examples::TreeAssignation3D {args} { # DEM - PARTS set demPart [customlib::AddConditionGroupOnXPath [spdAux::getRoute "DEMParts"] Dem] - set props [list Element SphericPartDEMElement3D ConstitutiveLaw Hertz Material DEM-DefaultMaterial] + set props [list Element SphericPartDEMElement3D] $demPart setAttribute ov $fluidtype spdAux::SetValuesOnBaseNode $demPart $props @@ -104,16 +107,7 @@ proc DEMPFEM::examples::TreeAssignation3D {args} { } -proc DEMPFEM::examples::MeshAssignation3D {} { +proc ::DEMPFEM::examples::InnerSphere::MeshAssignation3D {} { set list_vols [GiD_EntitiesGroups get Dem volumes] GiD_Process Mescape Meshing ElemType Sphere Volumes {*}$list_vols escape - -} - -proc DEMPFEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } } diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.tcl b/kratos.gid/apps/DEMPFEM/examples/examples.tcl index feb423ec8..5a4d93f3c 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.tcl +++ b/kratos.gid/apps/DEMPFEM/examples/examples.tcl @@ -1,15 +1,11 @@ -namespace eval DEMPFEM::examples { +namespace eval ::DEMPFEM::examples { } -proc DEMPFEM::examples::Init { } { - uplevel #0 [list source [file join $::DEMPFEM::dir examples InnerSphere.tcl]] +proc ::DEMPFEM::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } } - -proc DEMPFEM::examples::UpdateMenus { } { - GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = - GiDMenu::InsertOption "Kratos" [list "Heated square" ] 8 PRE [list ::DEMPFEM::examples::InnerSphere] "" "" insertafter = - GiDMenu::UpdateMenus -} - -DEMPFEM::examples::Init \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.xml b/kratos.gid/apps/DEMPFEM/examples/examples.xml index 8a2483ad0..4012c9d45 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.xml +++ b/kratos.gid/apps/DEMPFEM/examples/examples.xml @@ -1,9 +1,9 @@ - + - + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/start.tcl b/kratos.gid/apps/DEMPFEM/start.tcl index c02e29459..cc744101f 100644 --- a/kratos.gid/apps/DEMPFEM/start.tcl +++ b/kratos.gid/apps/DEMPFEM/start.tcl @@ -1,47 +1,19 @@ namespace eval ::DEMPFEM { # Variable declaration variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::DEMPFEM::Init { } { +proc ::DEMPFEM::Init { app } { # Variable initialization variable dir - variable prefix - variable kratos_name - variable attributes - - set attributes [dict create] - set kratos_name DEMPFEMapplication + variable _app set dir [apps::getMyDir "DEMPFEM"] set prefix DEMPFEM_ - set ::spdAux::TreeVisibility 0 - - apps::LoadAppById "DEM" - apps::LoadAppById "PfemFluid" - - # Intervals - dict set attributes UseIntervals 1 - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - - set ::Model::ValidSpatialDimensions [list 3D] - LoadMyFiles - # ::spdAux::CreateDimensionWindow -} - -proc ::DEMPFEM::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] + DEMPFEM::xml::Init + DEMPFEM::write::Init } proc ::DEMPFEM::BeforeMeshGeneration {elementsize} { @@ -52,15 +24,6 @@ proc ::DEMPFEM::AfterMeshGeneration {fail} { ::DEM::AfterMeshGeneration $fail } -proc ::DEMPFEM::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} - proc ::DEMPFEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } - -::DEMPFEM::Init diff --git a/kratos.gid/apps/DEMPFEM/write/write.tcl b/kratos.gid/apps/DEMPFEM/write/write.tcl index 309e56e45..70e869b9b 100644 --- a/kratos.gid/apps/DEMPFEM/write/write.tcl +++ b/kratos.gid/apps/DEMPFEM/write/write.tcl @@ -3,7 +3,7 @@ namespace eval ::DEMPFEM::write { proc ::DEMPFEM::write::Init { } { - SetAttribute main_script_file "MainKratos.py" + SetAttribute main_script_file [GetAttribute main_script_file] } @@ -17,16 +17,6 @@ proc DEMPFEM::write::writeModelPartEvent { } { set DEM::write::delete_previous_mdpa 0 DEM::write::writeModelPartEvent -} -proc DEMPFEM::write::writeCustomFilesEvent { } { - SetAttribute main_script_file "MainKratos.py" - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - -} - -proc DEMPFEM::write::WriteMaterialsFile { } { - } proc DEMPFEM::write::SetAttribute {att val} { diff --git a/kratos.gid/apps/DEMPFEM/xml/Procs.spd b/kratos.gid/apps/DEMPFEM/xml/Procs.spd index c4d9aed19..bf6325c03 100644 --- a/kratos.gid/apps/DEMPFEM/xml/Procs.spd +++ b/kratos.gid/apps/DEMPFEM/xml/Procs.spd @@ -84,5 +84,11 @@ return [PfemFluid::xml::ProcCheckNodalConditionStatePFEM $domNode $args] ]]> + + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl b/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl index 7eeaaaa50..35cd05d77 100644 --- a/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl @@ -1,22 +1,21 @@ -namespace eval DEMPFEM::xml { +namespace eval ::DEMPFEM::xml { # Namespace variables declaration - variable dir + namespace path ::DEMPFEM } -proc DEMPFEM::xml::Init { } { +proc ::DEMPFEM::xml::Init { } { # Namespace variables initialization - variable dir - Model::InitVariables dir $DEMPFEM::dir + Model::InitVariables dir $::DEMPFEM::dir Model::ForgetElement SphericPartDEMElement3D Model::getElements Elements.xml } -proc DEMPFEM::xml::getUniqueName {name} { +proc ::DEMPFEM::xml::getUniqueName {name} { return ${::DEMPFEM::prefix}${name} } -proc DEMPFEM::xml::CustomTree { args } { +proc ::DEMPFEM::xml::CustomTree { args } { DEM::xml::CustomTree PfemFluid::xml::CustomTree spdAux::SetValueOnTreeItem values Fluid PFEMFLUID_DomainType @@ -27,7 +26,4 @@ proc DEMPFEM::xml::CustomTree { args } { if { $result_node ne "" } {$result_node delete} set result_node [$root selectNodes "[spdAux::getRoute DEMStratSection]/container\[@n = 'DEMGravity'\]"] if { $result_node ne "" } {$result_node delete} - } - -DEMPFEM::xml::Init diff --git a/kratos.gid/apps/Dam/app.json b/kratos.gid/apps/Dam/app.json index 3e2e12a74..5fae66862 100644 --- a/kratos.gid/apps/Dam/app.json +++ b/kratos.gid/apps/Dam/app.json @@ -43,6 +43,6 @@ "properties_location": "mdpa", "model_part_name": "MainModelPart" }, - "main_launch_file": "python/MainKratosDam.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/Dam/python/MainKratosDam.py b/kratos.gid/apps/Dam/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/Dam/python/MainKratosDam.py rename to kratos.gid/apps/Dam/python/MainKratos.py diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index 55fe88c90..a8f649b98 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -35,13 +35,6 @@ proc ::Dam::write::Init { } { SetAttribute model_part_name [::Dam::GetWriteProperty model_part_name] } -proc ::Dam::write::writeCustomFilesEvent { } { - # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" -} - # MDPA Blocks proc ::Dam::write::writeModelPartEvent { } { # Init data diff --git a/kratos.gid/apps/EmbeddedFluid/app.json b/kratos.gid/apps/EmbeddedFluid/app.json index 92512d2d2..44dc713eb 100644 --- a/kratos.gid/apps/EmbeddedFluid/app.json +++ b/kratos.gid/apps/EmbeddedFluid/app.json @@ -38,6 +38,6 @@ "model_part_name": "FluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "python/KratosFluid.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py b/kratos.gid/apps/EmbeddedFluid/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/EmbeddedFluid/python/KratosFluid.py rename to kratos.gid/apps/EmbeddedFluid/python/MainKratos.py diff --git a/kratos.gid/apps/FSI/app.json b/kratos.gid/apps/FSI/app.json index a1c9fb31a..28ce6803d 100644 --- a/kratos.gid/apps/FSI/app.json +++ b/kratos.gid/apps/FSI/app.json @@ -45,6 +45,6 @@ "properties_location": "json", "model_part_name": "Structure" }, - "main_launch_file": "KratosStructural.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/FSI/python/KratosFSI.py b/kratos.gid/apps/FSI/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/FSI/python/KratosFSI.py rename to kratos.gid/apps/FSI/python/MainKratos.py diff --git a/kratos.gid/apps/FSI/write/write.tcl b/kratos.gid/apps/FSI/write/write.tcl index 1a40593fb..32c0ad176 100644 --- a/kratos.gid/apps/FSI/write/write.tcl +++ b/kratos.gid/apps/FSI/write/write.tcl @@ -12,6 +12,8 @@ proc ::FSI::write::Init { } { variable mdpa_names set mdpa_names [dict create ] + + SetAttribute main_script_file [::FSI::GetAttribute main_launch_file] } # Events @@ -36,7 +38,4 @@ proc ::FSI::write::writeModelPartEvent { } { proc ::FSI::write::writeCustomFilesEvent { } { Fluid::write::WriteMaterialsFile Structural::write::WriteMaterialsFile - - write::CopyFileIntoModel "python/KratosFSI.py" - write::RenameFileInModel "KratosFSI.py" "MainKratos.py" } diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index cf90f38d9..08a8e0754 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -44,6 +44,6 @@ "model_part_name": "FluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "python/KratosFluid.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/Fluid/python/KratosFluid.py b/kratos.gid/apps/Fluid/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/Fluid/python/KratosFluid.py rename to kratos.gid/apps/Fluid/python/MainKratos.py diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index cca1f1515..38bf7f1f0 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -71,11 +71,6 @@ proc ::Fluid::write::writeModelPartEvent { } { proc ::Fluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file ::Fluid::write::WriteMaterialsFile - - # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } # Custom files diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 4d3d42b32..cc9f13677 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -11,7 +11,7 @@ proc ::FluidDEM::write::Init { } { variable general_project_parameters set general_project_parameters [dict create] - SetAttribute main_script_file "MainKratos.py" + SetAttribute main_script_file [::FluidDEM::GetAttribute main_launch_file] } # Events @@ -30,9 +30,6 @@ proc FluidDEM::write::writeModelPartEvent { } { } proc FluidDEM::write::writeCustomFilesEvent { } { - SetAttribute main_script_file "MainKratos.py" - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] FluidDEM::write::WriteMaterialsFile } diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index 193311a30..3244529dd 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -39,6 +39,6 @@ "properties_location": "json", "model_part_name": "Background_Grid" }, - "main_launch_file": "python/KratosParticle.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/MPM/python/KratosParticle.py b/kratos.gid/apps/MPM/python/MainKratos.py old mode 100755 new mode 100644 similarity index 100% rename from kratos.gid/apps/MPM/python/KratosParticle.py rename to kratos.gid/apps/MPM/python/MainKratos.py diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index e08ddc624..73b85efef 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -154,15 +154,8 @@ proc MPM::write::writeLoads { } { } proc MPM::write::writeCustomFilesEvent { } { - # write::RenameFileInModel "ProjectParameters.json" "ProjectParameters.py" - # Materials file write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] True Initial_MPM_Material - - # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } diff --git a/kratos.gid/apps/PfemFluid/app.json b/kratos.gid/apps/PfemFluid/app.json index dbcb2387c..0b4f16aee 100644 --- a/kratos.gid/apps/PfemFluid/app.json +++ b/kratos.gid/apps/PfemFluid/app.json @@ -41,6 +41,6 @@ "model_part_name": "PfemFluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "python/RunPFEM.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/PfemFluid/python/RunPFEM.py b/kratos.gid/apps/PfemFluid/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/PfemFluid/python/RunPFEM.py rename to kratos.gid/apps/PfemFluid/python/MainKratos.py diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index 322e95a66..b8283206b 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -90,12 +90,6 @@ proc PfemFluid::write::GetPartsUN { } { proc PfemFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file PfemFluid::write::WriteMaterialsFile - - # Main python script - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" - } proc PfemFluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { diff --git a/kratos.gid/apps/PfemThermic/app.json b/kratos.gid/apps/PfemThermic/app.json index 4f2385b15..500361291 100644 --- a/kratos.gid/apps/PfemThermic/app.json +++ b/kratos.gid/apps/PfemThermic/app.json @@ -45,6 +45,6 @@ "model_part_name": "PfemFluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "python/RunPFEM.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 501e0158a..72d7db167 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -106,7 +106,6 @@ proc PfemThermic::write::writeModelPartEvent { } { # Custom files event proc PfemThermic::write::writeCustomFilesEvent { } { PfemThermic::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] - write::CopyFileIntoModel [file join "python" "MainKratos.py"] } # Write material file diff --git a/kratos.gid/apps/PotentialFluid/app.json b/kratos.gid/apps/PotentialFluid/app.json index 5d4c2673a..101bed157 100644 --- a/kratos.gid/apps/PotentialFluid/app.json +++ b/kratos.gid/apps/PotentialFluid/app.json @@ -44,6 +44,6 @@ "model_part_name": "FluidModelPart", "output_model_part_name": "fluid_computational_model_part" }, - "main_launch_file": "python/KratosPotentialFluid.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py b/kratos.gid/apps/PotentialFluid/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/PotentialFluid/python/KratosPotentialFluid.py rename to kratos.gid/apps/PotentialFluid/python/MainKratos.py diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index c9defacb6..2206636f1 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -32,9 +32,6 @@ proc PotentialFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file set materials_model_part_name [GetAttribute model_part_name] write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False $materials_model_part_name - - write::CopyFileIntoModel "python/KratosPotentialFluid.py" - write::RenameFileInModel "KratosPotentialFluid.py" "MainKratos.py" } diff --git a/kratos.gid/apps/StenosisWizard/app.json b/kratos.gid/apps/StenosisWizard/app.json index 4664b1318..32357b9e5 100644 --- a/kratos.gid/apps/StenosisWizard/app.json +++ b/kratos.gid/apps/StenosisWizard/app.json @@ -24,5 +24,5 @@ "intervals": true, "wizard": true }, - "main_launch_file": "../Fluid/python/KratosFluid.py" + "main_launch_file": "../Fluid/python/MainKratos.py" } diff --git a/kratos.gid/apps/Stent/app.json b/kratos.gid/apps/Stent/app.json index ad1203ffb..9bf987dce 100644 --- a/kratos.gid/apps/Stent/app.json +++ b/kratos.gid/apps/Stent/app.json @@ -26,5 +26,5 @@ "intervals": true, "wizard": true }, - "main_launch_file": "../Structural/python/KratosStructural.py" + "main_launch_file": "../Structural/python/MainKratos.py" } \ No newline at end of file diff --git a/kratos.gid/apps/Structural/app.json b/kratos.gid/apps/Structural/app.json index 3b098f661..da2f68488 100644 --- a/kratos.gid/apps/Structural/app.json +++ b/kratos.gid/apps/Structural/app.json @@ -47,6 +47,6 @@ "properties_location": "json", "model_part_name": "Structure" }, - "main_launch_file": "KratosStructural.py", + "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" } diff --git a/kratos.gid/apps/Structural/python/KratosStructural.py b/kratos.gid/apps/Structural/python/MainKratos.py old mode 100755 new mode 100644 similarity index 100% rename from kratos.gid/apps/Structural/python/KratosStructural.py rename to kratos.gid/apps/Structural/python/MainKratos.py diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 1b1fddee7..5c5defe8d 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -432,10 +432,6 @@ proc ::Structural::write::writeCustomFilesEvent { } { WriteMaterialsFile write::SetParallelismConfiguration - - set orig_name [GetAttribute main_script_file] - write::CopyFileIntoModel [file join "python" $orig_name ] - write::RenameFileInModel $orig_name "MainKratos.py" } proc ::Structural::write::SetCoordinatesByGroups {value} { diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 79c19d46c..f819ad47d 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -116,6 +116,9 @@ proc write::writeEvent { filename } { Kratos::Log "Write validation $appid" set errcode [writeValidateInApp $appid] + #### Copy main script file #### + CopyMainScriptFile + #### MDPA Write #### if {$errcode eq 0} { Kratos::Log "Write MDPA $appid" @@ -667,5 +670,12 @@ proc write::writeLaunchJSONFile { } { } } +proc write::CopyMainScriptFile { } { + + # Main python script + set orig_name [write::GetConfigurationAttribute main_script_file] + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" +} write::Init From 6b0d089a030261796c48208d44898579cd5a7ed8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 16:06:26 +0200 Subject: [PATCH 376/556] missing catch --- kratos.gid/apps/CDEM/xml/XmlController.tcl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 4a6364fad..2499505f8 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -68,10 +68,12 @@ proc CDEM::xml::MultiAppEvent {args} { } proc CDEM::xml::ApplyPatches { } { + catch { if {[spdAux::getRoute DEMROOT] eq ""} { [[customlib::GetBaseRoot] selectNodes "container\[@n='CDEM'\]"] setAttribute un DEMROOT spdAux::parseRoutes } + } } From ce166728debbfce3426eefe6c6d9331825b0e979 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 16:25:23 +0200 Subject: [PATCH 377/556] temp --- kratos.gid/apps/FSI/write/write.tcl | 6 +++--- kratos.gid/scripts/Writing/Writing.tcl | 23 ++++++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/FSI/write/write.tcl b/kratos.gid/apps/FSI/write/write.tcl index 32c0ad176..3b9e789b0 100644 --- a/kratos.gid/apps/FSI/write/write.tcl +++ b/kratos.gid/apps/FSI/write/write.tcl @@ -1,4 +1,5 @@ -namespace eval FSI::write { +namespace eval ::FSI::write { + namespace path ::FSI variable fluid_project_parameters variable structure_project_parameters variable mdpa_names @@ -12,8 +13,6 @@ proc ::FSI::write::Init { } { variable mdpa_names set mdpa_names [dict create ] - - SetAttribute main_script_file [::FSI::GetAttribute main_launch_file] } # Events @@ -38,4 +37,5 @@ proc ::FSI::write::writeModelPartEvent { } { proc ::FSI::write::writeCustomFilesEvent { } { Fluid::write::WriteMaterialsFile Structural::write::WriteMaterialsFile + write::SetConfigurationAttribute main_script_file [GetAttribute main_launch_file] } diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index f819ad47d..d049e159f 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -116,9 +116,6 @@ proc write::writeEvent { filename } { Kratos::Log "Write validation $appid" set errcode [writeValidateInApp $appid] - #### Copy main script file #### - CopyMainScriptFile - #### MDPA Write #### if {$errcode eq 0} { Kratos::Log "Write MDPA $appid" @@ -145,6 +142,12 @@ proc write::writeEvent { filename } { if {$time_monitor} { W "Total time: [Kratos::Duration $ttime]" } + + #### Copy main script file #### + if {$errcode eq 0} { + Kratos::Log "Write custom event $appid" + set errcode [CopyMainScriptFile] + } #### Debug files for VSCode #### write::writeLaunchJSONFile @@ -671,11 +674,17 @@ proc write::writeLaunchJSONFile { } { } proc write::CopyMainScriptFile { } { - + set errcode 0 # Main python script - set orig_name [write::GetConfigurationAttribute main_script_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" + if {[catch { + set orig_name [write::GetConfigurationAttribute main_script_file] + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" + } fid] } { + W "Problem Writing $errName block:\n$fid\nEvent $wevent \nEnd problems" + return errcode 1 + } + return $errcode } write::Init From 73e446f38c09b7951110499a4e26782eb5d08f7f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 9 Sep 2021 16:33:30 +0200 Subject: [PATCH 378/556] material relations warning --- .../material_relations_window.tcl | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl index 07a74813a..c660d43b5 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/material_relations_window.tcl @@ -4,20 +4,19 @@ proc DEM::xml::ShowMaterialRelationWindow { } { set material_relations [GetMaterialRelationsTable] set materials [dict keys $material_relations] - if {[llength $materials]>0} { - # window name - set w .gid.windowmatrel - - if {[winfo exist $w]} {destroy $w} - toplevel $w - wm withdraw $w - set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] - set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] - wm geom $w +$x+$y - wm transient $w .gid - InitWindow $w [_ "Kratos Multiphysics - DEM - Material Relations"] Kratos "" "" 1 - + # window name + set w .gid.windowmatrel + if {[winfo exist $w]} {destroy $w} + toplevel $w + wm withdraw $w + set x [expr [winfo rootx .gid]+[winfo width .gid]/2-[winfo width $w]/2] + set y [expr [winfo rooty .gid]+[winfo height .gid]/2-[winfo height $w]/2] + wm geom $w +$x+$y + wm transient $w .gid + InitWindow $w [_ "Kratos Multiphysics - DEM - Material Relations"] Kratos "" "" 1 + + if {[llength $materials]>0} { set table $w.tree ttk::treeview $table -columns $materials -displaycolumns $materials foreach header $materials { @@ -32,6 +31,10 @@ proc DEM::xml::ShowMaterialRelationWindow { } { } $table insert "" end -id $relation_ref -text $relation_ref -values $row } + } else { + set table $w.warn + ttk::label $table -text "No materials have been used yet" + pack $table } } From 40cf82601f5e1c902c5f59dd242a3ac76676e9cb Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Thu, 9 Sep 2021 17:30:04 +0200 Subject: [PATCH 379/556] dummy variable which helps the user understand --- kratos.gid/apps/CDEM/xml/TestMaterial.spd | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/CDEM/xml/TestMaterial.spd b/kratos.gid/apps/CDEM/xml/TestMaterial.spd index 6ee532a63..c64bc634b 100644 --- a/kratos.gid/apps/CDEM/xml/TestMaterial.spd +++ b/kratos.gid/apps/CDEM/xml/TestMaterial.spd @@ -7,4 +7,5 @@ + \ No newline at end of file From d7d03b41ef68b6f211a4e8b1f8fc9ae8f1abe145 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 11:38:28 +0200 Subject: [PATCH 380/556] main_launch_file location --- kratos.gid/apps/Buoyancy/write/write.tcl | 1 + kratos.gid/apps/CDEM/write/write.tcl | 1 + kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl | 3 ++- kratos.gid/apps/ConvectionDiffusion/write/write.tcl | 3 ++- kratos.gid/apps/DEM/write/write.tcl | 3 ++- kratos.gid/apps/DEMPFEM/write/write.tcl | 6 +++++- kratos.gid/apps/Dam/write/write.tcl | 11 +++++------ kratos.gid/apps/EmbeddedFluid/write/write.tcl | 4 ++-- kratos.gid/apps/FSI/write/write.tcl | 2 +- kratos.gid/apps/FSI/xml/XmlController.tcl | 3 ++- kratos.gid/apps/Fluid/write/write.tcl | 3 ++- kratos.gid/apps/Fluid/write/writeByGiDId.tcl | 4 ++-- kratos.gid/apps/FluidDEM/write/write.tcl | 4 +++- kratos.gid/apps/MPM/write/write.tcl | 3 ++- kratos.gid/apps/PfemFluid/write/write.tcl | 3 ++- kratos.gid/apps/PfemThermic/write/write.tcl | 1 + kratos.gid/apps/PotentialFluid/write/write.tcl | 3 ++- kratos.gid/apps/StenosisWizard/write/write.tcl | 2 +- kratos.gid/apps/Structural/write/write.tcl | 4 +++- kratos.gid/scripts/Writing/Writing.tcl | 2 +- 20 files changed, 42 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 625c1e832..133f9c22f 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -51,6 +51,7 @@ proc ::Buoyancy::write::writeModelPartEvent { } { proc ::Buoyancy::write::writeCustomFilesEvent { } { # Materials Buoyancy::write::WriteMaterialsFile True + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc ::Buoyancy::write::Validate {} { diff --git a/kratos.gid/apps/CDEM/write/write.tcl b/kratos.gid/apps/CDEM/write/write.tcl index 24b05b98f..9fae6127a 100644 --- a/kratos.gid/apps/CDEM/write/write.tcl +++ b/kratos.gid/apps/CDEM/write/write.tcl @@ -17,6 +17,7 @@ proc CDEM::write::writeModelPartEvent { } { proc CDEM::write::writeCustomFilesEvent { } { DEM::write::writeCustomFilesEvent + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } # Attributes block diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index addd0832e..cf0c794a7 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -13,7 +13,7 @@ proc ::ConjugateHeatTransfer::write::Init { } { set ConjugateHeatTransferConditions(temp) 0 unset ConjugateHeatTransferConditions(temp) - SetAttribute main_script_file [::ConjugateHeatTransfer::GetAttribute main_launch_file] + SetAttribute main_launch_file [::ConjugateHeatTransfer::GetAttribute main_launch_file] SetAttribute properties_location [::ConjugateHeatTransfer::GetWriteProperty properties_location] SetAttribute model_part_name [::ConjugateHeatTransfer::GetWriteProperty model_part_name] @@ -49,6 +49,7 @@ proc ::ConjugateHeatTransfer::write::writeModelPartEvent { } { proc ::ConjugateHeatTransfer::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc ::ConjugateHeatTransfer::write::Validate {} { diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 12b362b76..1495792f9 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -18,7 +18,7 @@ proc ::ConvectionDiffusion::write::Init { } { SetAttribute writeCoordinatesByGroups [::ConvectionDiffusion::GetWriteProperty coordinates] SetAttribute validApps [list "ConvectionDiffusion"] - SetAttribute main_script_file [::ConvectionDiffusion::GetAttribute main_launch_file] + SetAttribute main_launch_file [::ConvectionDiffusion::GetAttribute main_launch_file] SetAttribute materials_file [::ConvectionDiffusion::GetWriteProperty materials_file] SetAttribute properties_location [::ConvectionDiffusion::GetWriteProperty properties_location] SetAttribute model_part_name [::ConvectionDiffusion::GetWriteProperty model_part_name] @@ -61,6 +61,7 @@ proc ::ConvectionDiffusion::write::writeModelPartEvent { } { proc ::ConvectionDiffusion::write::writeCustomFilesEvent { } { # Materials WriteMaterialsFile False + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc ::ConvectionDiffusion::write::Validate {} { diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 9f240b89f..9ce6378f8 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -20,7 +20,7 @@ proc ::DEM::write::Init { } { SetAttribute conditions_un [::DEM::GetUniqueName conditions] SetAttribute nodal_conditions_un [::DEM::GetUniqueName nodal_conditions] SetAttribute materials_file [::DEM::GetWriteProperty materials_file] - SetAttribute main_script_file [::DEM::GetAttribute main_launch_file] + SetAttribute main_launch_file [::DEM::GetAttribute main_launch_file] variable partsProperties set partsProperties [dict create] @@ -90,6 +90,7 @@ proc ::DEM::write::writeModelPartEvent { } { proc ::DEM::write::writeCustomFilesEvent { } { write::RenameFileInModel "ProjectParameters.json" "ProjectParametersDEM.json" DEM::write::writeMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc ::DEM::write::writeMaterialsFile {} { diff --git a/kratos.gid/apps/DEMPFEM/write/write.tcl b/kratos.gid/apps/DEMPFEM/write/write.tcl index 70e869b9b..3437df429 100644 --- a/kratos.gid/apps/DEMPFEM/write/write.tcl +++ b/kratos.gid/apps/DEMPFEM/write/write.tcl @@ -3,7 +3,7 @@ namespace eval ::DEMPFEM::write { proc ::DEMPFEM::write::Init { } { - SetAttribute main_script_file [GetAttribute main_script_file] + SetAttribute main_launch_file [GetAttribute main_launch_file] } @@ -19,6 +19,10 @@ proc DEMPFEM::write::writeModelPartEvent { } { } +proc ::DEMPFEM::write::writeCustomFilesEvent { } { + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] +} + proc DEMPFEM::write::SetAttribute {att val} { DEM::write::SetAttribute $att $val } diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index a8f649b98..ae3bbeeee 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -30,7 +30,7 @@ proc ::Dam::write::Init { } { SetAttribute writeCoordinatesByGroups [::Dam::GetWriteProperty coordinates] SetAttribute validApps [list "Dam"] - SetAttribute main_script_file [::Dam::GetAttribute main_launch_file] + SetAttribute main_launch_file [::Dam::GetAttribute main_launch_file] SetAttribute properties_location [::Dam::GetWriteProperty properties_location] SetAttribute model_part_name [::Dam::GetWriteProperty model_part_name] } @@ -111,8 +111,6 @@ proc ::Dam::write::writeMeshes { } { writeLoads [GetAttribute nodal_conditions_un] } - - proc ::Dam::write::writeNodalConditions { keyword } { variable TableDict set root [customlib::GetBaseRoot] @@ -278,7 +276,6 @@ proc ::Dam::write::GetPrinTables {} { return $listaTablas } - proc ::Dam::write::GetPrinTables_dev { } { set root [customlib::GetBaseRoot] @@ -315,7 +312,6 @@ proc ::Dam::write::GetPrinTables_dev { } { return $listaTablas2 } - #------------------------------------------------------------------------------- proc ::Dam::write::writeThermalElements {} { @@ -403,7 +399,6 @@ proc ::Dam::write::Hexahedron3D8Connectivities { ElemId } { #------------------------------------------------------------------------------- - proc ::Dam::write::ThermalSubModelPart { } { variable ThermalSubModelPartDict @@ -453,6 +448,10 @@ proc ::Dam::write::GetDamPartGroupNodes { } { } +proc ::Dam::write::writeCustomFilesEvent { } { + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] +} + proc ::Dam::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] diff --git a/kratos.gid/apps/EmbeddedFluid/write/write.tcl b/kratos.gid/apps/EmbeddedFluid/write/write.tcl index 547ef81b3..91fa8126b 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/write.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/write.tcl @@ -14,7 +14,7 @@ proc EmbeddedFluid::write::Init { } { SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid" "EmbeddedFluid"] - SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute main_launch_file [::Fluid::GetAttribute main_launch_file] SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] @@ -27,7 +27,6 @@ proc EmbeddedFluid::write::writeModelPartEvent { } { } # Overwrite this function to print something at the end of the mdpa -namespace eval ::Fluid::write:: {} proc ::Fluid::write::writeCustomBlocks { } { EmbeddedFluid::write::writeDistances } @@ -54,6 +53,7 @@ proc EmbeddedFluid::write::writeDistances { } { proc EmbeddedFluid::write::writeCustomFilesEvent { } { Fluid::write::writeCustomFilesEvent + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc EmbeddedFluid::write::GetAttribute {att} { diff --git a/kratos.gid/apps/FSI/write/write.tcl b/kratos.gid/apps/FSI/write/write.tcl index 3b9e789b0..f02e7cfb8 100644 --- a/kratos.gid/apps/FSI/write/write.tcl +++ b/kratos.gid/apps/FSI/write/write.tcl @@ -37,5 +37,5 @@ proc ::FSI::write::writeModelPartEvent { } { proc ::FSI::write::writeCustomFilesEvent { } { Fluid::write::WriteMaterialsFile Structural::write::WriteMaterialsFile - write::SetConfigurationAttribute main_script_file [GetAttribute main_launch_file] + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } diff --git a/kratos.gid/apps/FSI/xml/XmlController.tcl b/kratos.gid/apps/FSI/xml/XmlController.tcl index 3ea50acd5..99e881ecd 100644 --- a/kratos.gid/apps/FSI/xml/XmlController.tcl +++ b/kratos.gid/apps/FSI/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval FSI::xml { +namespace eval ::FSI::xml { + namespace path ::FSI # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index 38bf7f1f0..7adaab16f 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -20,7 +20,7 @@ proc ::Fluid::write::Init { } { SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file [::Fluid::GetAttribute main_launch_file] + SetAttribute main_launch_file [::Fluid::GetAttribute main_launch_file] SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] @@ -71,6 +71,7 @@ proc ::Fluid::write::writeModelPartEvent { } { proc ::Fluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file ::Fluid::write::WriteMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } # Custom files diff --git a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl index 3019158a3..75302eecc 100644 --- a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl +++ b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl @@ -16,7 +16,7 @@ proc ::Fluid::write::Init { } { SetAttribute drag_un FLDrags SetAttribute writeCoordinatesByGroups 0 SetAttribute validApps [list "Fluid"] - SetAttribute main_script_file "KratosFluid.py" + SetAttribute main_launch_file "KratosFluid.py" SetAttribute materials_file "FluidMaterials.json" SetAttribute properties_location json FreeConditionsMap @@ -55,7 +55,7 @@ proc ::Fluid::write::writeCustomFilesEvent { } { write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] # Main python script - set orig_name [GetAttribute main_script_file] + set orig_name [GetAttribute main_launch_file] write::CopyFileIntoModel [file join "python" $orig_name ] write::RenameFileInModel $orig_name "MainKratos.py" } diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index cc9f13677..7249b34b4 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -11,7 +11,7 @@ proc ::FluidDEM::write::Init { } { variable general_project_parameters set general_project_parameters [dict create] - SetAttribute main_script_file [::FluidDEM::GetAttribute main_launch_file] + SetAttribute main_launch_file [::FluidDEM::GetAttribute main_launch_file] } # Events @@ -31,6 +31,8 @@ proc FluidDEM::write::writeModelPartEvent { } { proc FluidDEM::write::writeCustomFilesEvent { } { FluidDEM::write::WriteMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] + } proc FluidDEM::write::WriteMaterialsFile { } { diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 73b85efef..e4c1197ed 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -13,7 +13,7 @@ proc MPM::write::Init { } { SetAttribute conditions_un [::MPM::GetUniqueName conditions] SetAttribute writeCoordinatesByGroups [::MPM::GetWriteProperty coordinates] - SetAttribute main_script_file [::MPM::GetAttribute main_launch_file] + SetAttribute main_launch_file [::MPM::GetAttribute main_launch_file] SetAttribute materials_file [::MPM::GetWriteProperty materials_file] SetAttribute properties_location [::MPM::GetWriteProperty properties_location] SetAttribute model_part_name [::MPM::GetWriteProperty model_part_name] @@ -156,6 +156,7 @@ proc MPM::write::writeLoads { } { proc MPM::write::writeCustomFilesEvent { } { # Materials file write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] True Initial_MPM_Material + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index b8283206b..c275b2418 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -18,7 +18,7 @@ proc PfemFluid::write::Init { } { SetAttribute materials_un [::PfemFluid::GetUniqueName materials] SetAttribute nodal_conditions_un [::PfemFluid::GetUniqueName nodal_conditions] - SetAttribute main_script_file [::PfemFluid::GetAttribute main_launch_file] + SetAttribute main_launch_file [::PfemFluid::GetAttribute main_launch_file] SetAttribute materials_file [::PfemFluid::GetWriteProperty materials_file] SetAttribute properties_location [::PfemFluid::GetWriteProperty properties_location] SetAttribute model_part_name [::PfemFluid::GetWriteProperty model_part_name] @@ -90,6 +90,7 @@ proc PfemFluid::write::GetPartsUN { } { proc PfemFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file PfemFluid::write::WriteMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } proc PfemFluid::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 72d7db167..374cdfc17 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -106,6 +106,7 @@ proc PfemThermic::write::writeModelPartEvent { } { # Custom files event proc PfemThermic::write::writeCustomFilesEvent { } { PfemThermic::write::writePropertiesJsonFile "PFEMThermicMaterials.json" True [PfemFluid::write::GetAttribute model_part_name] + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } # Write material file diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index 2206636f1..903464d41 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -14,7 +14,7 @@ proc PotentialFluid::write::Init { } { SetAttribute time_parameters_un FLTimeParameters SetAttribute writeCoordinatesByGroups 0 SetAttribute validApps [list "Fluid" "PotentialFluid"] - SetAttribute main_script_file "KratosPotentialFluid.py" + SetAttribute main_launch_file "KratosPotentialFluid.py" SetAttribute model_part_name "FluidModelPart" SetAttribute materials_file "FluidMaterials.json" SetAttribute properties_location json @@ -32,6 +32,7 @@ proc PotentialFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file set materials_model_part_name [GetAttribute model_part_name] write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False $materials_model_part_name + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } diff --git a/kratos.gid/apps/StenosisWizard/write/write.tcl b/kratos.gid/apps/StenosisWizard/write/write.tcl index 9548197fb..8095bdc33 100644 --- a/kratos.gid/apps/StenosisWizard/write/write.tcl +++ b/kratos.gid/apps/StenosisWizard/write/write.tcl @@ -8,8 +8,8 @@ proc StenosisWizard::write::Init { } { proc StenosisWizard::write::writeCustomFilesEvent { } { - ::Fluid::write::SetAttribute main_script_file [StenosisWizard::GetAttribute main_launch_file] ::Fluid::write::writeCustomFilesEvent + ::Fluid::write::SetAttribute main_launch_file [StenosisWizard::GetAttribute main_launch_file] } # MDPA Blocks diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 5c5defe8d..9086546ca 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -28,7 +28,7 @@ proc ::Structural::write::Init { } { SetAttribute conditions_un [::Structural::GetUniqueName conditions] SetAttribute nodal_conditions_no_submodelpart [list CONDENSED_DOF_LIST CONDENSED_DOF_LIST_2D CONTACT CONTACT_SLAVE] SetAttribute materials_file [::Structural::GetWriteProperty materials_file] - SetAttribute main_script_file [::Structural::GetAttribute main_launch_file] + SetAttribute main_launch_file [::Structural::GetAttribute main_launch_file] SetAttribute model_part_name [::Structural::GetWriteProperty model_part_name] SetAttribute output_model_part_name "" } @@ -432,6 +432,8 @@ proc ::Structural::write::writeCustomFilesEvent { } { WriteMaterialsFile write::SetParallelismConfiguration + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] + } proc ::Structural::write::SetCoordinatesByGroups {value} { diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index d049e159f..96e4a0200 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -677,7 +677,7 @@ proc write::CopyMainScriptFile { } { set errcode 0 # Main python script if {[catch { - set orig_name [write::GetConfigurationAttribute main_script_file] + set orig_name [write::GetConfigurationAttribute main_launch_file] write::CopyFileIntoModel $orig_name write::RenameFileInModel [file tail $orig_name] "MainKratos.py" } fid] } { From f8945a13e44dc1d831eb167dbe94545956674bc4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 11:58:11 +0200 Subject: [PATCH 381/556] CDEM adaptation --- kratos.gid/apps/Buoyancy/write/write.tcl | 1 - kratos.gid/apps/CDEM/app.json | 36 +++++++++++++ .../apps/CDEM/examples/ContSpheresDrop3D.tcl | 27 ++++------ .../apps/CDEM/examples/ContinuumDrop2D.tcl | 26 ++++----- kratos.gid/apps/CDEM/examples/examples.tcl | 13 ++--- kratos.gid/apps/CDEM/examples/examples.xml | 4 +- kratos.gid/apps/CDEM/start.tcl | 54 ++++--------------- kratos.gid/apps/CDEM/write/write.tcl | 6 +-- kratos.gid/apps/CDEM/xml/XmlController.tcl | 34 ++++++------ 9 files changed, 93 insertions(+), 108 deletions(-) create mode 100644 kratos.gid/apps/CDEM/app.json diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 133f9c22f..cbc0d98bb 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -56,7 +56,6 @@ proc ::Buoyancy::write::writeCustomFilesEvent { } { proc ::Buoyancy::write::Validate {} { set err "" - return $err } diff --git a/kratos.gid/apps/CDEM/app.json b/kratos.gid/apps/CDEM/app.json new file mode 100644 index 000000000..189859ec9 --- /dev/null +++ b/kratos.gid/apps/CDEM/app.json @@ -0,0 +1,36 @@ +{ + "id": "CDEM", + "name": "CDEM", + "prefix": "CDEM_", + "themed": false, + "kratos_name": "DEMapplication", + "dimensions": [ + "2D", + "3D" + ], + "script_files": [ + "start.tcl", + "examples/examples.tcl", + "examples/ContinuumDrop2D.tcl", + "examples/ContSpheresDrop3D.tcl", + "write/write.tcl", + "write/writeMDPA_Parts.tcl", + "write/writeMDPA_Walls.tcl", + "write/writeMDPA_Inlet.tcl", + "write/writeProjectParameters.tcl", + "xml/XmlController.tcl" + ], + "start_script":"::CDEM::Init", + "requeriments":{ + "apps":["DEM"], + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "main_launch_file": "python/MainKratos.py", + "examples": "examples/examples.xml" +} diff --git a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl index 5c59cee21..ce65311aa 100644 --- a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl @@ -1,20 +1,24 @@ -proc ::CDEM::examples::ContSpheresDrop3D {args} { +namespace eval CDEM::examples::ContSpheresDrop3D { + +} + +proc ::CDEM::examples::ContSpheresDrop3D::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawGeometryContSpheres - AssignToTreeContSpheres - AssignMeshSizeContSpheres + DrawGeometry + AssignToTree + AssignMeshSize GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS GidUtils::UpdateWindow LAYER } -proc ::CDEM::examples::DrawGeometryContSpheres { } { +proc ::CDEM::examples::ContSpheresDrop3D::DrawGeometry { } { Kratos::ResetModel # Draw floor surface @@ -35,7 +39,7 @@ proc ::CDEM::examples::DrawGeometryContSpheres { } { GiD_EntitiesGroups assign "Body" -also_lower_entities volumes 1 } -proc ::CDEM::examples::AssignToTreeContSpheres { } { +proc ::CDEM::examples::ContSpheresDrop3D::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] @@ -105,17 +109,8 @@ proc ::CDEM::examples::AssignToTreeContSpheres { } { spdAux::RequestRefresh } -proc ::CDEM::::examples::AssignMeshSizeContSpheres { } { +proc ::CDEM::::examples::ContSpheresDrop3D::AssignMeshSize { } { GiD_Process Mescape Meshing AssignSizes Volumes 0.2 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Surfaces 0.2 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Lines 0.2 1:end escape escape escape } - - -proc DEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index 37c5b4202..16f3ae56c 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -1,14 +1,17 @@ +namespace eval CDEM::examples::ContinuumDrop2D { -proc ::CDEM::examples::ContinuumDrop2D {args} { +} + +proc ::CDEM::examples::ContinuumDrop2D::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] if { $retval == "cancel" } { return } } - DrawGeometryContinuumDrop - AssignToTreeContinuumDrop - AssignMeshSizeContinuumDrop + DrawGeometry + AssignToTree + AssignMeshSize GiD_Process 'Redraw GidUtils::UpdateWindow GROUPS @@ -17,7 +20,7 @@ proc ::CDEM::examples::ContinuumDrop2D {args} { } -proc ::CDEM::examples::DrawGeometryContinuumDrop { } { +proc ::CDEM::examples::ContinuumDrop2D::DrawGeometry { } { Kratos::ResetModel GiD_Groups create "Box" @@ -48,7 +51,7 @@ proc ::CDEM::examples::DrawGeometryContinuumDrop { } { } -proc ::CDEM::examples::AssignToTreeContinuumDrop { } { +proc ::CDEM::examples::ContinuumDrop2D::AssignToTree { } { # Material set DEMmaterials [spdAux::getRoute "DEMMaterials"] set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ] @@ -119,17 +122,8 @@ proc ::CDEM::examples::AssignToTreeContinuumDrop { } { spdAux::RequestRefresh } -proc ::CDEM::examples::AssignMeshSizeContinuumDrop { } { +proc ::CDEM::examples::ContinuumDrop2D::AssignMeshSize { } { GiD_Process Mescape Meshing AssignSizes Volumes 0.2 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Surfaces 0.6 1:end escape escape escape GiD_Process Mescape Meshing AssignSizes Lines 0.6 1:end escape escape escape } - - -proc ::CDEM::examples::ErasePreviousIntervals { } { - set root [customlib::GetBaseRoot] - set interval_base [spdAux::getRoute "Intervals"] - foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { - if {[$int @name] ni [list Initial Total Custom1]} {$int delete} - } -} \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/examples/examples.tcl b/kratos.gid/apps/CDEM/examples/examples.tcl index 4afc28d62..5ec10f558 100644 --- a/kratos.gid/apps/CDEM/examples/examples.tcl +++ b/kratos.gid/apps/CDEM/examples/examples.tcl @@ -2,15 +2,16 @@ namespace eval CDEM::examples { } -proc CDEM::examples::Init { } { - uplevel #0 [list source [file join $::CDEM::dir examples ContinuumDrop2D.tcl]] - uplevel #0 [list source [file join $::CDEM::dir examples ContSpheresDrop3D.tcl]] -} - proc CDEM::examples::UpdateMenus { } { GiDMenu::InsertOption "Kratos" [list "---"] 8 PRE "" "" "" insertafter = GiDMenu::InsertOption "Kratos" [list "Bulk groups" ] 8 PRE [list ::CDEM::xml::BulkGroup] "" "" insertafter = GiDMenu::UpdateMenus } -CDEM::examples::Init \ No newline at end of file +proc ::CDEM::examples::ErasePreviousIntervals { } { + set root [customlib::GetBaseRoot] + set interval_base [spdAux::getRoute "Intervals"] + foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { + if {[$int @name] ni [list Initial Total Custom1]} {$int delete} + } +} diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml index d2431d579..67a99f1f7 100644 --- a/kratos.gid/apps/CDEM/examples/examples.xml +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index 83b9348de..bcd9540eb 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -1,48 +1,19 @@ namespace eval ::CDEM { # Variable declaration variable dir - variable prefix - variable attributes - variable kratos_name + variable _app } -proc ::CDEM::Init { } { +proc ::CDEM::Init { app } { # Variable initialization variable dir - variable prefix - variable kratos_name - variable attributes - - set attributes [dict create] - set kratos_name DEMapplication - set dir [apps::getMyDir "CDEM"] - set prefix CDEM_ - set ::spdAux::TreeVisibility 0 - - apps::LoadAppById "DEM" + variable _app + set _app $app + + CDEM::xml::Init + CDEM::write::Init - # Intervals - dict set attributes UseIntervals 1 - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - set ::Model::ValidSpatialDimensions [list 2D 3D] - - LoadMyFiles -} - -proc ::CDEM::LoadMyFiles { } { - variable dir - - uplevel #0 [list source [file join $dir xml XmlController.tcl]] - uplevel #0 [list source [file join $dir xml BulkGroup.tcl]] - uplevel #0 [list source [file join $dir write write.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Parts.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Walls.tcl]] - uplevel #0 [list source [file join $dir write writeMDPA_Inlet.tcl]] - uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] - uplevel #0 [list source [file join $dir examples examples.tcl]] } proc ::CDEM::CustomToolbarItems { } { @@ -57,15 +28,10 @@ proc ::CDEM::AfterMeshGeneration {fail} { ::DEM::AfterMeshGeneration $fail } -proc ::CDEM::GetAttribute {name} { - variable attributes - set value "" - if {[dict exists $attributes $name]} {set value [dict get $attributes $name]} - return $value -} - proc ::CDEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } -::CDEM::Init +proc ::CDEM::GetAttribute {name} {return [$::CDEM::_app getProperty $name]} +proc ::CDEM::GetUniqueName {name} {return [$::CDEM::_app getUniqueName $name]} +proc ::CDEM::GetWriteProperty {name} {return [$::CDEM::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/CDEM/write/write.tcl b/kratos.gid/apps/CDEM/write/write.tcl index 9fae6127a..cb71fc69e 100644 --- a/kratos.gid/apps/CDEM/write/write.tcl +++ b/kratos.gid/apps/CDEM/write/write.tcl @@ -7,7 +7,7 @@ namespace eval ::CDEM::write { proc ::CDEM::write::Init { } { DEM::write::Init - SetAttribute partscont_un DEMParts + SetAttribute partscont_un [::DEM::GetUniqueName parts] } # Events @@ -35,6 +35,4 @@ proc CDEM::write::AddAttributes {configuration} { proc CDEM::write::AddValidApps {appid} { DEM::write::AddAttribute validApps $appid -} - -CDEM::write::Init \ No newline at end of file +} \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index 2499505f8..b24e6ffd2 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -1,12 +1,11 @@ -namespace eval CDEM::xml { +namespace eval ::CDEM::xml { # Namespace variables declaration - variable dir + namespace path ::CDEM } -proc CDEM::xml::Init { } { +proc ::CDEM::xml::Init { } { # Namespace variables initialization - variable dir - Model::InitVariables dir $CDEM::dir + Model::InitVariables dir $::CDEM::dir Model::ForgetElements Model::getElements ElementsC.xml Model::getConditions Conditions.xml @@ -18,11 +17,11 @@ proc CDEM::xml::Init { } { ApplyPatches } -proc CDEM::xml::getUniqueName {name} { - return ${::CDEM::prefix}${name} +proc ::CDEM::xml::getUniqueName {name} { + return [::CDEM::GetAttribute prefix]${name} } -proc CDEM::xml::CustomTree { args } { +proc ::CDEM::xml::CustomTree { args } { DEM::xml::CustomTree {*}$args set root [customlib::GetBaseRoot] @@ -40,7 +39,7 @@ proc CDEM::xml::CustomTree { args } { spdAux::parseRoutes } -proc CDEM::xml::ProcGetElements { domNode args } { +proc ::CDEM::xml::ProcGetElements { domNode args } { set elems [Model::GetElements] set names [list ] set pnames [list ] @@ -60,21 +59,18 @@ proc CDEM::xml::ProcGetElements { domNode args } { return $diction } -proc CDEM::xml::MultiAppEvent {args} { +proc ::CDEM::xml::MultiAppEvent {args} { if {$args eq "init"} { spdAux::parseRoutes - spdAux::ConvertAllUniqueNames DEM ${::CDEM::prefix} + spdAux::ConvertAllUniqueNames DEM [::CDEM::GetAttribute prefix] } } -proc CDEM::xml::ApplyPatches { } { +proc ::CDEM::xml::ApplyPatches { } { catch { - if {[spdAux::getRoute DEMROOT] eq ""} { - [[customlib::GetBaseRoot] selectNodes "container\[@n='CDEM'\]"] setAttribute un DEMROOT - spdAux::parseRoutes - } + if {[spdAux::getRoute DEMROOT] eq ""} { + [[customlib::GetBaseRoot] selectNodes "container\[@n='CDEM'\]"] setAttribute un DEMROOT + spdAux::parseRoutes + } } - } - -CDEM::xml::Init From 99cbba4814ba5df513dc763eb1a0e52b193e48f6 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 10 Sep 2021 14:33:21 +0200 Subject: [PATCH 382/556] several changes in attributes location --- kratos.gid/apps/Buoyancy/start.tcl | 8 ++++---- kratos.gid/apps/CDEM/start.tcl | 8 ++++---- .../apps/ConjugateHeatTransfer/app.json | 13 +------------ .../apps/ConjugateHeatTransfer/start.tcl | 8 ++++---- .../ConjugateHeatTransfer/write/write.tcl | 10 ++++------ kratos.gid/apps/ConvectionDiffusion/start.tcl | 8 ++++---- .../apps/ConvectionDiffusion/write/write.tcl | 6 +++--- kratos.gid/apps/DEM/app.json | 4 +--- kratos.gid/apps/DEM/start.tcl | 10 ++++------ kratos.gid/apps/DEMPFEM/start.tcl | 4 ++++ kratos.gid/apps/Dam/start.tcl | 8 ++++---- kratos.gid/apps/EmbeddedFluid/app.json | 4 +--- kratos.gid/apps/EmbeddedFluid/start.tcl | 9 ++++----- kratos.gid/apps/EmbeddedFluid/write/write.tcl | 17 ++--------------- kratos.gid/apps/EmbeddedFluid/xml/Main.spd | 2 +- .../apps/EmbeddedFluid/xml/Materials.spd | 4 ---- .../apps/EmbeddedFluid/xml/Materials.xml | 15 --------------- .../apps/EmbeddedFluid/xml/XmlController.tcl | 11 ++--------- kratos.gid/apps/FSI/start.tcl | 10 +++++----- kratos.gid/apps/Fluid/start.tcl | 8 ++++---- kratos.gid/apps/FluidDEM/start.tcl | 5 +++++ kratos.gid/apps/FluidDEM/write/write.tcl | 3 +-- kratos.gid/apps/MPM/start.tcl | 8 ++++---- kratos.gid/apps/PfemFluid/app.json | 3 +-- kratos.gid/apps/PfemFluid/start.tcl | 7 ++++--- kratos.gid/apps/PfemThermic/app.json | 3 +-- kratos.gid/apps/PfemThermic/start.tcl | 8 ++++---- kratos.gid/apps/PotentialFluid/app.json | 4 +--- kratos.gid/apps/PotentialFluid/start.tcl | 10 +++++----- .../apps/PotentialFluid/write/write.tcl | 19 +++---------------- .../apps/PotentialFluid/xml/Materials.spd | 2 +- kratos.gid/apps/StenosisWizard/start.tcl | 6 ++++-- kratos.gid/apps/Stent/start.tcl | 4 ++++ kratos.gid/apps/Structural/start.tcl | 10 ++++------ kratos.gid/apps/Structural/write/write.tcl | 4 +++- 35 files changed, 101 insertions(+), 162 deletions(-) delete mode 100644 kratos.gid/apps/EmbeddedFluid/xml/Materials.spd delete mode 100644 kratos.gid/apps/EmbeddedFluid/xml/Materials.xml diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index 3eb28291c..f9671b2a3 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -2,6 +2,10 @@ namespace eval ::Buoyancy { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::Buoyancy::Init { app } { @@ -17,7 +21,3 @@ proc ::Buoyancy::Init { app } { ::Buoyancy::write::Init } - -proc ::Buoyancy::GetAttribute {name} {return [$::Buoyancy::_app getProperty $name]} -proc ::Buoyancy::GetUniqueName {name} {return [$::Buoyancy::_app getUniqueName $name]} -proc ::Buoyancy::GetWriteProperty {name} {return [$::Buoyancy::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index bcd9540eb..3d32857fb 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -2,6 +2,10 @@ namespace eval ::CDEM { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::CDEM::Init { app } { @@ -31,7 +35,3 @@ proc ::CDEM::AfterMeshGeneration {fail} { proc ::CDEM::AfterSaveModel {filespd} { ::DEM::AfterSaveModel $filespd } - -proc ::CDEM::GetAttribute {name} {return [$::CDEM::_app getProperty $name]} -proc ::CDEM::GetUniqueName {name} {return [$::CDEM::_app getUniqueName $name]} -proc ::CDEM::GetWriteProperty {name} {return [$::CDEM::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/ConjugateHeatTransfer/app.json b/kratos.gid/apps/ConjugateHeatTransfer/app.json index 2db98c73b..75dfbc66a 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/app.json +++ b/kratos.gid/apps/ConjugateHeatTransfer/app.json @@ -29,19 +29,8 @@ "intervals": true, "wizard": false }, - "unique_names": { - "parts": "STParts", - "initial_conditions": "STInitialConditions", - "nodal_conditions": "STNodalConditions", - "conditions": "STLoads", - "time_parameters": "STTimeParameters", - "results": "STResults", - "materials": "STMaterials" - - }, "write": { - "coordinates": "all", - "materials_file": "BuoyancyMaterials.json", + "coordinates": "groups", "properties_location": "json", "model_part_name": "ThermalModelPart" }, diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index 07920669d..9a0f36192 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -2,6 +2,10 @@ namespace eval ::ConjugateHeatTransfer { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::ConjugateHeatTransfer::Init { app } { @@ -17,7 +21,3 @@ proc ::ConjugateHeatTransfer::Init { app } { ::ConjugateHeatTransfer::write::Init } - -proc ::ConjugateHeatTransfer::GetAttribute {name} {return [$::ConjugateHeatTransfer::_app getProperty $name]} -proc ::ConjugateHeatTransfer::GetUniqueName {name} {return [$::ConjugateHeatTransfer::_app getUniqueName $name]} -proc ::ConjugateHeatTransfer::GetWriteProperty {name} {return [$::ConjugateHeatTransfer::_app getWriteProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index cf0c794a7..a26db8032 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -17,6 +17,8 @@ proc ::ConjugateHeatTransfer::write::Init { } { SetAttribute properties_location [::ConjugateHeatTransfer::GetWriteProperty properties_location] SetAttribute model_part_name [::ConjugateHeatTransfer::GetWriteProperty model_part_name] + SetAttribute coordinates [::ConjugateHeatTransfer::GetWriteProperty coordinates] + SetAttribute fluid_mdpa_suffix Fluid SetAttribute solid_mdpa_suffix Solid @@ -41,7 +43,7 @@ proc ::ConjugateHeatTransfer::write::writeModelPartEvent { } { # Convection diffusion mdpa ConvectionDiffusion::write::Init - ConvectionDiffusion::write::SetAttribute writeCoordinatesByGroups 1 + ConvectionDiffusion::write::SetAttribute writeCoordinatesByGroups [GetAttribute coordinates] write::writeAppMDPA ConvectionDiffusion write::RenameFileInModel "$filename.mdpa" "${filename}_[GetAttribute solid_mdpa_suffix].mdpa" } @@ -64,18 +66,14 @@ proc ::ConjugateHeatTransfer::write::PrepareBuoyancy { } { Buoyancy::write::Init Fluid::write::SetAttribute thermal_bc_un Buoyancy_CNVDFFBC Fluid::write::SetAttribute thermal_initial_cnd_un Buoyancy_CNVDFFNodalConditions - Fluid::write::SetCoordinatesByGroups 1 + Fluid::write::SetCoordinatesByGroups [GetAttribute coordinates] } proc ::ConjugateHeatTransfer::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { Buoyancy::write::WriteMaterialsFile $write_const_law $include_modelpart_name - # ConvectionDiffusion::write::WriteMaterialsFile $write_const_law $include_modelpart_name ConvectionDiffusion::write::WriteMaterialsFile False $include_modelpart_name } -# proc ::Buoyancy::write::GetModelPartName { } { -# return FluidThermalModelPart -# } proc ::ConjugateHeatTransfer::write::GetAttribute {att} { variable writeAttributes diff --git a/kratos.gid/apps/ConvectionDiffusion/start.tcl b/kratos.gid/apps/ConvectionDiffusion/start.tcl index bc236b737..2b022b6f6 100644 --- a/kratos.gid/apps/ConvectionDiffusion/start.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/start.tcl @@ -2,6 +2,10 @@ namespace eval ::ConvectionDiffusion { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::ConvectionDiffusion::Init { app } { @@ -16,7 +20,3 @@ proc ::ConvectionDiffusion::Init { app } { ::ConvectionDiffusion::xml::Init ::ConvectionDiffusion::write::Init } - -proc ::ConvectionDiffusion::GetAttribute {name} {return [$::ConvectionDiffusion::_app getProperty $name]} -proc ::ConvectionDiffusion::GetUniqueName {name} {return [$::ConvectionDiffusion::_app getUniqueName $name]} -proc ::ConvectionDiffusion::GetWriteProperty {name} {return [$::ConvectionDiffusion::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 1495792f9..9631bd1b0 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -38,9 +38,6 @@ proc ::ConvectionDiffusion::write::writeModelPartEvent { } { write::writeModelPartData writeProperties - # Materials (write materials in *.mdpa) - # write::writeMaterials [GetAttribute validApps] - # Nodal coordinates (1: Print only Fluid nodes | 0: the whole mesh ) if {[GetAttribute writeCoordinatesByGroups] ne "all"} {write::writeNodalCoordinatesOnParts} {write::writeNodalCoordinates} @@ -86,6 +83,9 @@ proc ::ConvectionDiffusion::write::getLastConditionId { } { proc ::ConvectionDiffusion::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} + W [GetAttribute parts_un] + W [GetAttribute materials_file] + W $include_modelpart_name write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } diff --git a/kratos.gid/apps/DEM/app.json b/kratos.gid/apps/DEM/app.json index c4ced07b1..6afc97c85 100644 --- a/kratos.gid/apps/DEM/app.json +++ b/kratos.gid/apps/DEM/app.json @@ -45,9 +45,7 @@ "write": { "coordinates": "groups", "materials_file": "MaterialsDEM.json", - "properties_location": "json", - "model_part_name": "FluidModelPart", - "output_model_part_name": "fluid_computational_model_part" + "properties_location": "json" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 7440f13b0..01fd82bed 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -2,6 +2,10 @@ namespace eval ::DEM { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::DEM::Init { app } { @@ -18,12 +22,6 @@ proc ::DEM::Init { app } { ::DEM::write::Init } -proc ::DEM::GetAttribute {name} {return [$::DEM::_app getProperty $name]} -proc ::DEM::GetUniqueName {name} {return [$::DEM::_app getUniqueName $name]} -proc ::DEM::GetWriteProperty {name} {return [$::DEM::_app getWriteProperty $name]} - - - proc ::DEM::CustomToolbarItems { } { variable dir diff --git a/kratos.gid/apps/DEMPFEM/start.tcl b/kratos.gid/apps/DEMPFEM/start.tcl index cc744101f..020056545 100644 --- a/kratos.gid/apps/DEMPFEM/start.tcl +++ b/kratos.gid/apps/DEMPFEM/start.tcl @@ -2,6 +2,10 @@ namespace eval ::DEMPFEM { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::DEMPFEM::Init { app } { diff --git a/kratos.gid/apps/Dam/start.tcl b/kratos.gid/apps/Dam/start.tcl index 241969de1..398815ef7 100644 --- a/kratos.gid/apps/Dam/start.tcl +++ b/kratos.gid/apps/Dam/start.tcl @@ -2,6 +2,10 @@ namespace eval ::Dam { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::Dam::Init { app } { @@ -15,7 +19,3 @@ proc ::Dam::Init { app } { ::Dam::xml::Init ::Dam::write::Init } - -proc ::Dam::GetAttribute {name} {return [$::Dam::_app getProperty $name]} -proc ::Dam::GetUniqueName {name} {return [$::Dam::_app getUniqueName $name]} -proc ::Dam::GetWriteProperty {name} {return [$::Dam::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/EmbeddedFluid/app.json b/kratos.gid/apps/EmbeddedFluid/app.json index 44dc713eb..7b0a65122 100644 --- a/kratos.gid/apps/EmbeddedFluid/app.json +++ b/kratos.gid/apps/EmbeddedFluid/app.json @@ -34,9 +34,7 @@ "write": { "coordinates": "all", "materials_file": "FluidMaterials.json", - "properties_location": "json", - "model_part_name": "FluidModelPart", - "output_model_part_name": "fluid_computational_model_part" + "properties_location": "json" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 1bfa476f7..3ee0942e9 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -2,6 +2,10 @@ namespace eval ::EmbeddedFluid { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::EmbeddedFluid::Init { app } { @@ -18,7 +22,6 @@ proc ::EmbeddedFluid::Init { app } { ::EmbeddedFluid::xml::Init ::EmbeddedFluid::xml::BoundingBox::Init ::EmbeddedFluid::write::Init - } proc ::EmbeddedFluid::BeforeMeshGeneration {elementsize} { @@ -48,7 +51,3 @@ proc ::EmbeddedFluid::CustomToolbarItems { } { # Create the bounding box Kratos::ToolbarAddItem "Box" "box.png" [list -np- EmbeddedFluid::xml::BoundingBox::CreateWindow] [= "Generate the bounding box"] } - -proc ::EmbeddedFluid::GetAttribute {name} {return [$::EmbeddedFluid::_app getProperty $name]} -proc ::EmbeddedFluid::GetUniqueName {name} {return [$::EmbeddedFluid::_app getUniqueName $name]} -proc ::EmbeddedFluid::GetWriteProperty {name} {return [$::EmbeddedFluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/EmbeddedFluid/write/write.tcl b/kratos.gid/apps/EmbeddedFluid/write/write.tcl index 91fa8126b..7a26990c7 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/write.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/write.tcl @@ -4,21 +4,8 @@ namespace eval EmbeddedFluid::write { proc EmbeddedFluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un [::Fluid::GetUniqueName parts] - SetAttribute nodal_conditions_un [::Fluid:::GetUniqueName nodal_conditions] - SetAttribute conditions_un [::Fluid::GetUniqueName conditions] - SetAttribute materials_un [::EmbeddedFluid::GetUniqueName materials] - SetAttribute results_un [::Fluid::GetUniqueName results] - SetAttribute drag_un [::Fluid::GetUniqueName drag] - SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] - - SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] - SetAttribute validApps [list "Fluid" "EmbeddedFluid"] - SetAttribute main_launch_file [::Fluid::GetAttribute main_launch_file] - SetAttribute materials_file [::Fluid::GetWriteProperty materials_file] - SetAttribute properties_location [::Fluid::GetWriteProperty properties_location] - SetAttribute model_part_name [::Fluid::GetWriteProperty model_part_name] - SetAttribute output_model_part_name [::Fluid::GetWriteProperty output_model_part_name] + variable writeAttributes + set writeAttributes [::Fluid::write::GetAttributes] } # Events diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Main.spd b/kratos.gid/apps/EmbeddedFluid/xml/Main.spd index 2ff771957..632645c7b 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/Main.spd +++ b/kratos.gid/apps/EmbeddedFluid/xml/Main.spd @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Materials.spd b/kratos.gid/apps/EmbeddedFluid/xml/Materials.spd deleted file mode 100644 index 4ef150fe9..000000000 --- a/kratos.gid/apps/EmbeddedFluid/xml/Materials.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml b/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml deleted file mode 100644 index 3442c57a7..000000000 --- a/kratos.gid/apps/EmbeddedFluid/xml/Materials.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl index 7cacef274..b6c658a88 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl @@ -8,18 +8,11 @@ proc EmbeddedFluid::xml::Init { } { # Namespace variables inicialization variable lastImportMeshSize set lastImportMeshSize 0 - Model::DestroyEverything + Model::InitVariables dir $::EmbeddedFluid::dir + Model::ForgetSolutionStrategies Model::getSolutionStrategies Strategies.xml - Model::getElements "../../Fluid/xml/Elements.xml" - Model::getMaterials Materials.xml - Model::getNodalConditions "../../Fluid/xml/NodalConditions.xml" - Model::getConstitutiveLaws "../../Fluid/xml/ConstitutiveLaws.xml" - Model::getProcesses "../../Common/xml/Processes.xml" - Model::getProcesses "../../Fluid/xml/Processes.xml" - Model::getConditions "../../Fluid/xml/Conditions.xml" - Model::getSolvers "../../Common/xml/Solvers.xml" } proc EmbeddedFluid::xml::MultiAppEvent {args} { diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index 3110811d8..827c5be27 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -2,6 +2,10 @@ namespace eval ::FSI { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::FSI::Init { app } { @@ -14,8 +18,4 @@ proc ::FSI::Init { app } { ::FSI::xml::Init ::FSI::write::Init -} - -proc ::FSI::GetAttribute {name} {return [$::FSI::_app getProperty $name]} -proc ::FSI::GetUniqueName {name} {return [$::FSI::_app getUniqueName $name]} -proc ::FSI::GetWriteProperty {name} {return [$::FSI::_app getWriteProperty $name]} +} \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index e4207d5af..bdf0e8bf8 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -2,6 +2,10 @@ namespace eval ::Fluid { # Variable declaration variable _app variable dir + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::Fluid::Init { app } { @@ -16,7 +20,3 @@ proc ::Fluid::Init { app } { ::Fluid::xml::Init ::Fluid::write::Init } - -proc ::Fluid::GetAttribute {name} {return [$::Fluid::_app getProperty $name]} -proc ::Fluid::GetUniqueName {name} {return [$::Fluid::_app getUniqueName $name]} -proc ::Fluid::GetWriteProperty {name} {return [$::Fluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/FluidDEM/start.tcl b/kratos.gid/apps/FluidDEM/start.tcl index 3c93b28ff..53acc995d 100644 --- a/kratos.gid/apps/FluidDEM/start.tcl +++ b/kratos.gid/apps/FluidDEM/start.tcl @@ -2,6 +2,10 @@ namespace eval ::FluidDEM { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::FluidDEM::Init { app } { @@ -32,3 +36,4 @@ proc ::FluidDEM::CustomToolbarItems { } { ::DEM::CustomToolbarItems } + diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 7249b34b4..1f8c1626c 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::FluidDEM::write { + namespace path ::FluidDEM variable fluid_project_parameters variable dem_project_parameters } @@ -10,8 +11,6 @@ proc ::FluidDEM::write::Init { } { set dem_project_parameters [dict create] variable general_project_parameters set general_project_parameters [dict create] - - SetAttribute main_launch_file [::FluidDEM::GetAttribute main_launch_file] } # Events diff --git a/kratos.gid/apps/MPM/start.tcl b/kratos.gid/apps/MPM/start.tcl index 8fda939cc..7c106c97a 100644 --- a/kratos.gid/apps/MPM/start.tcl +++ b/kratos.gid/apps/MPM/start.tcl @@ -2,6 +2,10 @@ namespace eval ::MPM { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::MPM::Init { app } { @@ -18,7 +22,3 @@ proc ::MPM::Init { app } { ::MPM::xml::Init ::MPM::write::Init } - -proc ::MPM::GetAttribute {name} {return [$::MPM::_app getProperty $name]} -proc ::MPM::GetUniqueName {name} {return [$::MPM::_app getUniqueName $name]} -proc ::MPM::GetWriteProperty {name} {return [$::MPM::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/PfemFluid/app.json b/kratos.gid/apps/PfemFluid/app.json index 0b4f16aee..4fd96c565 100644 --- a/kratos.gid/apps/PfemFluid/app.json +++ b/kratos.gid/apps/PfemFluid/app.json @@ -38,8 +38,7 @@ "coordinates": "all", "materials_file": "PFEMFluidMaterials.json", "properties_location": "json", - "model_part_name": "PfemFluidModelPart", - "output_model_part_name": "fluid_computational_model_part" + "model_part_name": "PfemFluidModelPart" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index 48485b91a..17808e3b1 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -2,6 +2,10 @@ namespace eval ::PfemFluid { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::PfemFluid::Init { app } { @@ -33,6 +37,3 @@ proc ::PfemFluid::CustomToolbarItems { } { Kratos::ToolbarAddItem "SpacerApp" "" "" "" } -proc ::PfemFluid::GetAttribute {name} {return [$::PfemFluid::_app getProperty $name]} -proc ::PfemFluid::GetUniqueName {name} {return [$::PfemFluid::_app getUniqueName $name]} -proc ::PfemFluid::GetWriteProperty {name} {return [$::PfemFluid::_app getWriteProperty $name]} diff --git a/kratos.gid/apps/PfemThermic/app.json b/kratos.gid/apps/PfemThermic/app.json index 500361291..736c3c03a 100644 --- a/kratos.gid/apps/PfemThermic/app.json +++ b/kratos.gid/apps/PfemThermic/app.json @@ -42,8 +42,7 @@ "coordinates": "all", "materials_file": "PFEMFluidMaterials.json", "properties_location": "json", - "model_part_name": "PfemFluidModelPart", - "output_model_part_name": "fluid_computational_model_part" + "model_part_name": "PfemFluidModelPart" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 2058d7522..7285c9f5c 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -2,6 +2,10 @@ namespace eval ::PfemThermic { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::PfemThermic::Init { app } { @@ -30,7 +34,3 @@ proc ::PfemThermic::CustomToolbarItems { } { Kratos::ToolbarAddItem "Stop" [file join $img_dir "cancelProcess.png"] {Utilities CancelProcess} [= "Cancel process"] Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] } - -proc ::PfemThermic::GetAttribute {name} {return [$::PfemThermic::_app getProperty $name]} -proc ::PfemThermic::GetUniqueName {name} {return [$::PfemThermic::_app getUniqueName $name]} -proc ::PfemThermic::GetWriteProperty {name} {return [$::PfemThermic::_app getWriteProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/app.json b/kratos.gid/apps/PotentialFluid/app.json index 101bed157..1ec161e9e 100644 --- a/kratos.gid/apps/PotentialFluid/app.json +++ b/kratos.gid/apps/PotentialFluid/app.json @@ -40,9 +40,7 @@ "write": { "coordinates": "all", "materials_file": "FluidMaterials.json", - "properties_location": "json", - "model_part_name": "FluidModelPart", - "output_model_part_name": "fluid_computational_model_part" + "properties_location": "json" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/PotentialFluid/start.tcl b/kratos.gid/apps/PotentialFluid/start.tcl index f8fa8e30c..d52dd5ac2 100644 --- a/kratos.gid/apps/PotentialFluid/start.tcl +++ b/kratos.gid/apps/PotentialFluid/start.tcl @@ -2,6 +2,10 @@ namespace eval ::PotentialFluid { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::PotentialFluid::Init { app } { @@ -17,8 +21,4 @@ proc ::PotentialFluid::Init { app } { PotentialFluid::xml::Init PotentialFluid::write::Init -} - -proc ::PotentialFluid::GetAttribute {name} {return [$::PotentialFluid::_app getProperty $name]} -proc ::PotentialFluid::GetUniqueName {name} {return [$::PotentialFluid::_app getUniqueName $name]} -proc ::PotentialFluid::GetWriteProperty {name} {return [$::PotentialFluid::_app getWriteProperty $name]} +} \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index 903464d41..1764be181 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -5,20 +5,9 @@ namespace eval PotentialFluid::write { proc PotentialFluid::write::Init { } { # Namespace variables inicialization - SetAttribute parts_un FLParts - SetAttribute nodal_conditions_un FLNodalConditions - SetAttribute conditions_un FLBC - SetAttribute materials_un PTFLMaterials - SetAttribute results_un Results - SetAttribute drag_un FLDrags - SetAttribute time_parameters_un FLTimeParameters - SetAttribute writeCoordinatesByGroups 0 + variable writeAttributes + set writeAttributes [::Fluid::write::GetAttributes] SetAttribute validApps [list "Fluid" "PotentialFluid"] - SetAttribute main_launch_file "KratosPotentialFluid.py" - SetAttribute model_part_name "FluidModelPart" - SetAttribute materials_file "FluidMaterials.json" - SetAttribute properties_location json - SetAttribute output_model_part_name "fluid_computational_model_part" } # Events @@ -30,12 +19,10 @@ proc PotentialFluid::write::writeModelPartEvent { } { proc PotentialFluid::write::writeCustomFilesEvent { } { # Write the fluid materials json file - set materials_model_part_name [GetAttribute model_part_name] - write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False $materials_model_part_name + write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] False [GetAttribute model_part_name] write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } - proc PotentialFluid::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] diff --git a/kratos.gid/apps/PotentialFluid/xml/Materials.spd b/kratos.gid/apps/PotentialFluid/xml/Materials.spd index 1b3e404c1..f351f7613 100644 --- a/kratos.gid/apps/PotentialFluid/xml/Materials.spd +++ b/kratos.gid/apps/PotentialFluid/xml/Materials.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index 41b865f26..df7757c22 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -2,6 +2,10 @@ namespace eval ::StenosisWizard { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::StenosisWizard::Init { app } { @@ -39,5 +43,3 @@ proc ::StenosisWizard::StartWizardWindow { } { smart_wizard::ImportWizardData smart_wizard::CreateWindow } - -proc ::StenosisWizard::GetAttribute {name} {return [$::StenosisWizard::_app getProperty $name]} \ No newline at end of file diff --git a/kratos.gid/apps/Stent/start.tcl b/kratos.gid/apps/Stent/start.tcl index 4d79d4bbd..a16cd9982 100644 --- a/kratos.gid/apps/Stent/start.tcl +++ b/kratos.gid/apps/Stent/start.tcl @@ -2,6 +2,10 @@ namespace eval ::Stent { # Variable declaration variable dir variable app_id + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::Stent::Init { app } { diff --git a/kratos.gid/apps/Structural/start.tcl b/kratos.gid/apps/Structural/start.tcl index a491245ce..10b29d431 100644 --- a/kratos.gid/apps/Structural/start.tcl +++ b/kratos.gid/apps/Structural/start.tcl @@ -2,6 +2,10 @@ namespace eval ::Structural { # Variable declaration variable dir variable _app + + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } proc ::Structural::Init { app } { @@ -15,12 +19,6 @@ proc ::Structural::Init { app } { ::Structural::write::Init } - - -proc ::Structural::GetAttribute {name} {return [$::Structural::_app getProperty $name]} -proc ::Structural::GetUniqueName {name} {return [$::Structural::_app getUniqueName $name]} -proc ::Structural::GetWriteProperty {name} {return [$::Structural::_app getWriteProperty $name]} - # Create the old-gid condition relation_line_geo_mesh to link geometry and mesh entities. # Topic: Local axes, beams # TODO: remove this when GiD creates this relation automatically diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 9086546ca..bc245cdc0 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -16,9 +16,11 @@ proc ::Structural::write::Init { } { variable writeAttributes set writeAttributes [dict create] + SetAttribute validApps [list "Structural"] SetAttribute writeCoordinatesByGroups [::Structural::GetWriteProperty coordinates] SetAttribute properties_location [::Structural::GetWriteProperty properties_location] + SetAttribute parts_un [::Structural::GetUniqueName parts] SetAttribute time_parameters_un [::Structural::GetUniqueName time_parameters] SetAttribute results_un [::Structural::GetUniqueName results] @@ -26,11 +28,11 @@ proc ::Structural::write::Init { } { SetAttribute initial_conditions_un [::Structural::GetUniqueName initial_conditions] SetAttribute nodal_conditions_un [::Structural::GetUniqueName nodal_conditions] SetAttribute conditions_un [::Structural::GetUniqueName conditions] + SetAttribute nodal_conditions_no_submodelpart [list CONDENSED_DOF_LIST CONDENSED_DOF_LIST_2D CONTACT CONTACT_SLAVE] SetAttribute materials_file [::Structural::GetWriteProperty materials_file] SetAttribute main_launch_file [::Structural::GetAttribute main_launch_file] SetAttribute model_part_name [::Structural::GetWriteProperty model_part_name] - SetAttribute output_model_part_name "" } # MDPA Blocks From e9233786a9444ed2177ab0db40ad31d93ca9a949 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 10 Sep 2021 14:51:47 +0200 Subject: [PATCH 383/556] add note --- kratos.gid/apps/Buoyancy/app.json | 11 ----------- kratos.gid/apps/Buoyancy/write/write.tcl | 2 ++ 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/app.json b/kratos.gid/apps/Buoyancy/app.json index 277f857bb..ce7d65720 100644 --- a/kratos.gid/apps/Buoyancy/app.json +++ b/kratos.gid/apps/Buoyancy/app.json @@ -27,19 +27,8 @@ "intervals": true, "wizard": false }, - "unique_names": { - "parts": "STParts", - "initial_conditions": "STInitialConditions", - "nodal_conditions": "STNodalConditions", - "conditions": "STLoads", - "time_parameters": "STTimeParameters", - "results": "STResults", - "materials": "STMaterials" - - }, "write": { "coordinates": "all", - "materials_file": "BuoyancyMaterials.json", "properties_location": "json", "model_part_name": "ThermalModelPart" }, diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index cbc0d98bb..42d15d542 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -60,6 +60,8 @@ proc ::Buoyancy::write::Validate {} { } proc ::Buoyancy::write::WriteMaterialsFile {{write_const_law True} {include_modelpart_name True} } { + # Note: This will generate 2 quasi identical files for materials. The difference is the model_part_name + # Write fluid material file Fluid::write::WriteMaterialsFile $write_const_law $include_modelpart_name From 00390174d87c6e11026015ef5be75d61835fd5ed Mon Sep 17 00:00:00 2001 From: Salva Latorre Date: Fri, 10 Sep 2021 15:53:21 +0200 Subject: [PATCH 384/556] Clean up, adding skin plus help --- kratos.gid/apps/CDEM/write/writeProjectParameters.tcl | 1 - kratos.gid/apps/CDEM/xml/TestMaterial.spd | 3 +-- kratos.gid/apps/DEM/write/writeProjectParameters.tcl | 1 + kratos.gid/apps/DEM/xml/Results.spd | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl index ab8884119..f9158e25a 100644 --- a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl @@ -22,7 +22,6 @@ proc CDEM::write::getParametersDict { } { dict set material_test_parameters_dict "TestType" [write::getValue DEMTestMaterial TestType] dict set material_test_parameters_dict "ConfinementPressure" [write::getValue DEMTestMaterial ConfinementPressure] dict set material_test_parameters_dict "LoadingVelocity" [write::getValue DEMTestMaterial LoadVelocity] - dict set material_test_parameters_dict "MeshType" [write::getValue DEMTestMaterial Meshtype] dict set material_test_parameters_dict "SpecimenLength" [write::getValue DEMTestMaterial Specimenlength] dict set material_test_parameters_dict "SpecimenDiameter" [write::getValue DEMTestMaterial Specimendiameter] set SpecimenDiameter [write::getValue DEMTestMaterial Specimendiameter] diff --git a/kratos.gid/apps/CDEM/xml/TestMaterial.spd b/kratos.gid/apps/CDEM/xml/TestMaterial.spd index c64bc634b..0cf8be561 100644 --- a/kratos.gid/apps/CDEM/xml/TestMaterial.spd +++ b/kratos.gid/apps/CDEM/xml/TestMaterial.spd @@ -1,10 +1,9 @@ - + - diff --git a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl index 4028fe9c5..66876df73 100644 --- a/kratos.gid/apps/DEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/DEM/write/writeProjectParameters.tcl @@ -103,6 +103,7 @@ proc DEM::write::getParametersDict { } { dict set project_parameters_dict "PostTotalForces" [write::getValue PostPrint TotalForces] dict set project_parameters_dict "PostPressure" [write::getValue PostPrint Pressure] dict set project_parameters_dict "PostShearStress" [write::getValue PostPrint ShearStress] + dict set project_parameters_dict "PostSkinSphere" [write::getValue PostPrint SkinSphere] dict set project_parameters_dict "PostNonDimensionalVolumeWear" [write::getValue PostPrint Wear] dict set project_parameters_dict "PostParticleMoment" [write::getValue PostPrint ParticleMoment] dict set project_parameters_dict "PostEulerAngles" [write::getValue PostPrint EulerAngles] diff --git a/kratos.gid/apps/DEM/xml/Results.spd b/kratos.gid/apps/DEM/xml/Results.spd index 537e9464f..52c1f6f30 100644 --- a/kratos.gid/apps/DEM/xml/Results.spd +++ b/kratos.gid/apps/DEM/xml/Results.spd @@ -16,6 +16,7 @@ + @@ -26,7 +27,6 @@ - From 0d6a95c5af9452b994ef0b5de480a4c0bf93da5a Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 18:00:05 +0200 Subject: [PATCH 385/556] remove unused prefix --- kratos.gid/apps/CDEM/app.json | 5 +-- .../apps/CDEM/write/writeMDPA_Parts.tcl | 32 +++++++++---------- kratos.gid/apps/CDEM/xml/XmlController.tcl | 7 ---- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/kratos.gid/apps/CDEM/app.json b/kratos.gid/apps/CDEM/app.json index 189859ec9..f3e4dcd8f 100644 --- a/kratos.gid/apps/CDEM/app.json +++ b/kratos.gid/apps/CDEM/app.json @@ -1,7 +1,7 @@ { "id": "CDEM", "name": "CDEM", - "prefix": "CDEM_", + "prefix": "DEM", "themed": false, "kratos_name": "DEMapplication", "dimensions": [ @@ -18,7 +18,8 @@ "write/writeMDPA_Walls.tcl", "write/writeMDPA_Inlet.tcl", "write/writeProjectParameters.tcl", - "xml/XmlController.tcl" + "xml/XmlController.tcl", + "xml/BulkGroup.tcl" ], "start_script":"::CDEM::Init", "requeriments":{ diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 88d5095c7..3f3df05a9 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -1,36 +1,36 @@ proc CDEM::write::WriteMDPAParts { } { # Headers write::writeModelPartData - + # Process properties DEM::write::processPartMaterials - + # Materials DEM::write::writeMaterialsParts - + # Nodal coordinates (only for DEM Parts ) write::writeNodalCoordinatesOnParts write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart] write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsInitialC] write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundaryC] write::writeNodalCoordinatesOnGroups [DEM::write::GetNodesForGraphs] - + # Element connectivities write::writeElementConnectivities - + # Begin NodalData RADIUS DEM::write::writeSphereRadius - + # Begin NodalData COHESIVE_GROUP CDEM::write::writeCohesiveGroups - + # Begin NodalData SKIN_SPHERE CDEM::write::writeSkinSphereNodes - + # SubmodelParts write::writePartSubModelPart - DEM::write::writeDEMConditionMeshes - + DEM::write::writeDEMConditionMeshes + # CustomSubmodelParts CDEM::write::WriteCustomDEMSmp } @@ -51,7 +51,7 @@ proc CDEM::write::writeCohesiveGroups { } { GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 $cohesive_group\n"] write::WriteString "End NodalData" write::WriteString "" - + } } @@ -59,18 +59,18 @@ proc CDEM::write::writeSkinSphereNodes { } { # Write Skin Sphere set number 1 set list_of_active_dem_elements "" - if {[GiD_Groups exists SKIN_SPHERE_DO_NOT_DELETE]} { + if {[GiD_Groups exists SKIN_SPHERE_DO_NOT_DELETE]} { if {$::Model::SpatialDimension eq "2D"} { set skin_element_ids [GiD_EntitiesGroups get SKIN_SPHERE_DO_NOT_DELETE all_mesh -element_type circle] ; # Get the ids of elements in SKIN_SPHERE } else { set skin_element_ids [GiD_EntitiesGroups get SKIN_SPHERE_DO_NOT_DELETE all_mesh -element_type sphere] } - } else { - set skin_element_ids [list] - } + } else { + set skin_element_ids [list] + } write::WriteString "Begin NodalData SKIN_SPHERE" GiD_WriteCalculationFile connectivities [dict create SKIN_SPHERE_DO_NOT_DELETE "%.0s %10d 0 $number\n"] write::WriteString "End NodalData" - write::WriteString "" + write::WriteString "" } diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index b24e6ffd2..e8a542550 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -59,13 +59,6 @@ proc ::CDEM::xml::ProcGetElements { domNode args } { return $diction } -proc ::CDEM::xml::MultiAppEvent {args} { - if {$args eq "init"} { - spdAux::parseRoutes - spdAux::ConvertAllUniqueNames DEM [::CDEM::GetAttribute prefix] - } -} - proc ::CDEM::xml::ApplyPatches { } { catch { if {[spdAux::getRoute DEMROOT] eq ""} { From c97ef3f5c994a803dcbd3d2fb308bddb56566b6c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 18:26:23 +0200 Subject: [PATCH 386/556] cohesive groups --- kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl | 2 +- kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl | 5 +++-- kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl | 4 +--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl index ef1f3959c..800234201 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Inlet.tcl @@ -1,4 +1,4 @@ - +# Overwritten to add CylinderContinuumParticle proc DEM::write::GetInletElementType {} { set elem_name SphericContinuumParticle3D if {$::Model::SpatialDimension eq "2D"} { diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 88d5095c7..7d2504836 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -1,4 +1,5 @@ -proc CDEM::write::WriteMDPAParts { } { +# Overwrite DEM function +proc DEM::write::WriteMDPAParts { } { # Headers write::writeModelPartData @@ -32,7 +33,7 @@ proc CDEM::write::WriteMDPAParts { } { DEM::write::writeDEMConditionMeshes # CustomSubmodelParts - CDEM::write::WriteCustomDEMSmp + DEM::write::WriteCustomDEMSmp } proc CDEM::write::writeCohesiveGroups { } { diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl index c42367c99..128395aaf 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Walls.tcl @@ -1,6 +1,4 @@ - - -# Overwritten to ad TOP BOTTOM params +# Overwritten to add TOP BOTTOM params proc DEM::write::DefineFEMExtraConditions {props} { set material_analysis [write::getValue DEMTestMaterial Active] if {$material_analysis == "true"} { From a60c61140e70da40e381257d67d626596e836ef5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 20:38:12 +0200 Subject: [PATCH 387/556] namespaces --- .../apps/Buoyancy/examples/HeatedSquare.tcl | 4 ++-- kratos.gid/apps/Buoyancy/examples/examples.tcl | 4 ++-- kratos.gid/apps/Buoyancy/write/write.tcl | 1 + kratos.gid/apps/Buoyancy/xml/XmlController.tcl | 1 + .../apps/CDEM/examples/ContSpheresDrop3D.tcl | 4 ++-- kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl | 4 ++-- kratos.gid/apps/CDEM/examples/examples.tcl | 3 ++- kratos.gid/apps/CDEM/write/write.tcl | 2 ++ .../apps/CDEM/write/writeProjectParameters.tcl | 1 - .../apps/ConjugateHeatTransfer/examples/BFS.tcl | 3 ++- .../examples/CylinderCooling.tcl | 3 ++- .../examples/HeatedSquare.tcl | 4 ++-- .../ConjugateHeatTransfer/examples/examples.tcl | 3 ++- .../apps/ConjugateHeatTransfer/write/write.tcl | 1 + .../ConjugateHeatTransfer/xml/XmlController.tcl | 3 ++- .../ConvectionDiffusion/examples/HeatedSquare.tcl | 1 + .../ConvectionDiffusion/examples/examples.tcl | 1 + .../apps/ConvectionDiffusion/write/write.tcl | 3 ++- .../ConvectionDiffusion/xml/XmlController.tcl | 1 + kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 3 ++- kratos.gid/apps/DEM/examples/SpheresDrop.tcl | 2 ++ kratos.gid/apps/DEM/examples/examples.tcl | 4 ++-- kratos.gid/apps/DEM/write/write.tcl | 1 + kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl | 4 ++-- kratos.gid/apps/DEM/xml/XmlController.tcl | 1 + kratos.gid/apps/DEMPFEM/examples/examples.tcl | 1 + kratos.gid/apps/DEMPFEM/write/write.tcl | 1 + kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl | 1 + kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl | 1 + kratos.gid/apps/Dam/examples/examples.tcl | 1 + kratos.gid/apps/Dam/write/write.tcl | 7 ++++--- kratos.gid/apps/Dam/xml/XmlController.tcl | 1 + .../EmbeddedFluid/examples/CylinderInFlow.tcl | 2 +- kratos.gid/apps/EmbeddedFluid/write/write.tcl | 3 ++- .../xml/BoundingBoxWindowController.tcl | 4 +++- .../apps/EmbeddedFluid/xml/XmlController.tcl | 3 ++- kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl | 1 + .../FSI/examples/MokChannelWithFlexibleWall.tcl | 1 + kratos.gid/apps/FSI/examples/TurekBenchmark.tcl | 1 + kratos.gid/apps/FSI/examples/examples.tcl | 3 ++- kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl | 1 + .../apps/Fluid/examples/HighRiseBuilding.tcl | 1 + kratos.gid/apps/Fluid/examples/examples.tcl | 1 + kratos.gid/apps/Fluid/write/write.tcl | 1 + kratos.gid/apps/Fluid/write/writeByGiDId.tcl | 3 ++- kratos.gid/apps/Fluid/xml/XmlController.tcl | 1 + kratos.gid/apps/FluidDEM/examples/examples.tcl | 1 + kratos.gid/apps/FluidDEM/write/write.tcl | 1 + kratos.gid/apps/MPM/examples/FallingSandBall.tcl | 1 + kratos.gid/apps/MPM/examples/examples.tcl | 1 + kratos.gid/apps/MPM/write/write.tcl | 3 ++- kratos.gid/apps/MPM/xml/XmlController.tcl | 1 + .../apps/PfemFluid/examples/DamBreakFSI.tcl | 1 + .../apps/PfemFluid/examples/WaterDamBreak.tcl | 1 + kratos.gid/apps/PfemFluid/examples/examples.tcl | 1 + kratos.gid/apps/PfemFluid/write/write.tcl | 3 ++- kratos.gid/apps/PfemFluid/xml/XmlController.tcl | 3 ++- kratos.gid/apps/PfemLauncher/start.tcl | 1 + .../PfemThermic/examples/ThermicConvection.tcl | 3 ++- .../apps/PfemThermic/examples/ThermicCubeDrop.tcl | 3 ++- .../PfemThermic/examples/ThermicDamBreakFSI.tcl | 3 ++- .../PfemThermic/examples/ThermicFluidDrop.tcl | 3 ++- .../apps/PfemThermic/examples/ThermicSloshing.tcl | 3 ++- .../examples/ThermicSloshingConvection.tcl | 3 ++- kratos.gid/apps/PfemThermic/examples/examples.tcl | 5 +++-- kratos.gid/apps/PfemThermic/write/write.tcl | 1 + kratos.gid/apps/PfemThermic/xml/XmlController.tcl | 3 ++- .../apps/PotentialFluid/examples/examples.tcl | 1 + kratos.gid/apps/PotentialFluid/write/write.tcl | 5 +++-- .../apps/PotentialFluid/xml/XmlController.tcl | 3 ++- .../apps/StenosisWizard/wizard/Wizard_Steps.tcl | 3 ++- kratos.gid/apps/StenosisWizard/write/write.tcl | 3 ++- .../apps/StenosisWizard/xml/XmlController.tcl | 15 ++++++++------- kratos.gid/apps/Stent/wizard/StentGeometry.tcl | 3 ++- kratos.gid/apps/Stent/xml/XmlController.tcl | 4 ++-- .../apps/Structural/examples/HighRiseBuilding.tcl | 1 + .../examples/IncompressibleCookMembrane.tcl | 1 + .../apps/Structural/examples/TrussCantilever.tcl | 1 + kratos.gid/apps/Structural/examples/examples.tcl | 1 + .../apps/Structural/postprocess/formfinding.tcl | 2 +- kratos.gid/apps/Structural/write/write.tcl | 4 +++- kratos.gid/apps/Structural/xml/XmlController.tcl | 5 ++--- kratos.gid/kratos.tcl | 2 +- kratos.gid/scripts/Applications.tcl | 2 +- kratos.gid/scripts/Controllers/Drawer.tcl | 2 +- kratos.gid/scripts/Model/Condition.tcl | 2 +- kratos.gid/scripts/Model/ConstitutiveLaw.tcl | 2 +- kratos.gid/scripts/Model/Element.tcl | 2 +- kratos.gid/scripts/Model/Entity.tcl | 2 +- kratos.gid/scripts/Model/Material.tcl | 2 +- kratos.gid/scripts/Model/Model.tcl | 2 +- kratos.gid/scripts/Model/Parameter.tcl | 2 +- kratos.gid/scripts/Model/Process.tcl | 2 +- kratos.gid/scripts/Model/SolutionStrategy.tcl | 2 +- kratos.gid/scripts/Model/Solver.tcl | 2 +- kratos.gid/scripts/Model/Topology.tcl | 2 +- kratos.gid/scripts/Writing/WriteConditions.tcl | 10 +++++----- kratos.gid/scripts/Writing/Writing.tcl | 2 +- kratos.gid/scripts/spdAuxiliar.tcl | 2 +- 99 files changed, 156 insertions(+), 84 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index c0fe9cd1d..b07883e1d 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -1,5 +1,5 @@ -namespace eval Buoyancy::examples::HeatedSquare { - +namespace eval ::Buoyancy::examples::HeatedSquare { + namespace path ::Buoyancy::examples } proc ::Buoyancy::examples::HeatedSquare::Init {args} { diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index b37349468..ee5e4b29b 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -1,5 +1,5 @@ -namespace eval Buoyancy::examples { - +namespace eval ::Buoyancy::examples { +namespace path ::Buoyancy } proc ::Buoyancy::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 42d15d542..237211f2a 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::Buoyancy::write { + namespace path ::Buoyancy::write variable writeAttributes } diff --git a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl index e848c6126..2ac2fa28b 100644 --- a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl +++ b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval ::Buoyancy::xml { + namespace path ::Buoyancy # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl index ce65311aa..72b7fb1b9 100644 --- a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl @@ -1,5 +1,5 @@ -namespace eval CDEM::examples::ContSpheresDrop3D { - +namespace eval ::CDEM::examples::ContSpheresDrop3D { + namespace path ::CDEM::examples } proc ::CDEM::examples::ContSpheresDrop3D::Init {args} { diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index 16f3ae56c..a567a6208 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -1,5 +1,5 @@ -namespace eval CDEM::examples::ContinuumDrop2D { - +namespace eval ::CDEM::examples::ContinuumDrop2D { + namespace path ::CDEM::examples } proc ::CDEM::examples::ContinuumDrop2D::Init {args} { diff --git a/kratos.gid/apps/CDEM/examples/examples.tcl b/kratos.gid/apps/CDEM/examples/examples.tcl index 5ec10f558..766db48b9 100644 --- a/kratos.gid/apps/CDEM/examples/examples.tcl +++ b/kratos.gid/apps/CDEM/examples/examples.tcl @@ -1,4 +1,5 @@ -namespace eval CDEM::examples { +namespace eval ::CDEM::examples { + namespace path ::CDEM } diff --git a/kratos.gid/apps/CDEM/write/write.tcl b/kratos.gid/apps/CDEM/write/write.tcl index cb71fc69e..5fa230f86 100644 --- a/kratos.gid/apps/CDEM/write/write.tcl +++ b/kratos.gid/apps/CDEM/write/write.tcl @@ -1,4 +1,6 @@ namespace eval ::CDEM::write { + + namespace path ::CDEM variable writeAttributes variable inletProperties variable last_property_id diff --git a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl index f9158e25a..22ab82d53 100644 --- a/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/CDEM/write/writeProjectParameters.tcl @@ -35,7 +35,6 @@ proc CDEM::write::getParametersDict { } { return $project_parameters_dict } - proc DEM::write::GetDemStrategyName { } { return continuum_sphere_strategy } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index c0fb1a0f2..9c22416d4 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -1,4 +1,5 @@ -namespace eval ConjugateHeatTransfer::examples::BFS { +namespace eval ::ConjugateHeatTransfer::examples::BFS { + namespace path ::ConjugateHeatTransfer::examples } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl index f9d1cd189..19423ee23 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl @@ -1,4 +1,5 @@ -namespace eval ConjugateHeatTransfer::examples::CylinderCooling { +namespace eval ::ConjugateHeatTransfer::examples::CylinderCooling { + namespace path ::ConjugateHeatTransfer::examples } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index 5c20636a6..0396948f6 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -1,5 +1,5 @@ -namespace eval ConjugateHeatTransfer::examples::HeatedSquare { - +namespace eval ::ConjugateHeatTransfer::examples::HeatedSquare { + namespace path ::ConjugateHeatTransfer::examples } proc ::ConjugateHeatTransfer::examples::HeatedSquare::Init {args} { diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl index 7277e5620..34e50a117 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl @@ -1,3 +1,4 @@ -namespace eval ConjugateHeatTransfer::examples { +namespace eval ::ConjugateHeatTransfer::examples { + namespace path ::ConjugateHeatTransfer } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index a26db8032..b33881c32 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::ConjugateHeatTransfer::write { + namespace path ::ConjugateHeatTransfer # Namespace variables declaration variable ConjugateHeatTransferConditions variable writeCoordinatesByGroups diff --git a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl index 6b0311785..a5624916d 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval ConjugateHeatTransfer::xml { +namespace eval ::ConjugateHeatTransfer::xml { + namespace path ::ConjugateHeatTransfer # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl index 84c22e34d..f3bb252b0 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl @@ -1,4 +1,5 @@ namespace eval ::ConvectionDiffusion::examples::HeatedSquare { + namespace path ::ConvectionDiffusion::examples } diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl index 6f4df8a4e..92ecee093 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl @@ -1,3 +1,4 @@ namespace eval ::ConvectionDiffusion::examples { + namespace path ::ConvectionDiffusion } diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 9631bd1b0..7ccfb8f1b 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::ConvectionDiffusion::write { + namespace path ::ConvectionDiffusion # Namespace variables declaration variable ConvectionDiffusionConditions variable writeCoordinatesByGroups @@ -106,7 +107,7 @@ proc ::ConvectionDiffusion::write::writeBoundaryConditions { } { set BCUN [GetAttribute conditions_un] # Write the conditions - set dict_group_intervals [write::writeConditions $BCUN] + set dict_group_intervals [::write::writeConditions $BCUN] set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute $BCUN]/condition/group" diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl index 5d0bfe57f..802c08bda 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval ::ConvectionDiffusion::xml { + namespace path ::ConvectionDiffusion # Namespace variables declaration } diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index cda7cb550..af9821076 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -1,6 +1,7 @@ namespace eval ::DEM::examples::CirclesDrop { - + namespace path ::DEM::examples } + proc ::DEM::examples::CirclesDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" diff --git a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl index 73447bbdd..c40b4122a 100644 --- a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl @@ -1,6 +1,8 @@ namespace eval ::DEM::examples::SpheresDrop { + namespace path ::DEM::examples } + proc ::DEM::examples::SpheresDrop::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to discard your previous work?" diff --git a/kratos.gid/apps/DEM/examples/examples.tcl b/kratos.gid/apps/DEM/examples/examples.tcl index 0029e86e1..25626357a 100644 --- a/kratos.gid/apps/DEM/examples/examples.tcl +++ b/kratos.gid/apps/DEM/examples/examples.tcl @@ -1,5 +1,5 @@ namespace eval ::DEM::examples { - + namespace path ::DEM } proc ::DEM::examples::ErasePreviousIntervals { } { @@ -8,4 +8,4 @@ proc ::DEM::examples::ErasePreviousIntervals { } { foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { if {[$int @name] ni [list Initial Total Custom1]} {$int delete} } -} +} \ No newline at end of file diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 9ce6378f8..00136610f 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::DEM::write { + namespace path ::DEM variable writeAttributes variable partsProperties variable inletProperties diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl index 789de0c42..6ac9cde71 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Walls.tcl @@ -138,12 +138,12 @@ proc ::DEM::write::WriteWallCustomSmp { } { proc ::DEM::write::writeConditions { } { variable wallsProperties - write::writeConditionsByGiDId DEMConditions [GetRigidWallConditionName] $wallsProperties + ::write::writeConditionsByGiDId DEMConditions [GetRigidWallConditionName] $wallsProperties } proc ::DEM::write::writePhantomConditions { } { variable phantomwallsProperties - write::writeConditionsByGiDId DEMConditions [GetPhantomWallConditionName] $phantomwallsProperties + ::write::writeConditionsByGiDId DEMConditions [GetPhantomWallConditionName] $phantomwallsProperties } proc ::DEM::write::GetWallsGroups { } { diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index c66eaa1f2..79376796e 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval ::DEM::xml { + namespace path ::DEM variable dir } diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.tcl b/kratos.gid/apps/DEMPFEM/examples/examples.tcl index 5a4d93f3c..7d7349363 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.tcl +++ b/kratos.gid/apps/DEMPFEM/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::DEMPFEM::examples { + namespace path ::DEMPFEM } diff --git a/kratos.gid/apps/DEMPFEM/write/write.tcl b/kratos.gid/apps/DEMPFEM/write/write.tcl index 3437df429..431739f2c 100644 --- a/kratos.gid/apps/DEMPFEM/write/write.tcl +++ b/kratos.gid/apps/DEMPFEM/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::DEMPFEM::write { + namespace path ::DEMPFEM } proc ::DEMPFEM::write::Init { } { diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl index 1bc768078..a9e8787ec 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam::examples::ThermoMechaDam2D { + namespace path ::Dam::examples } diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl index 75167ec22..4866fcbc6 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam::examples::ThermoMechaDam3D { + namespace path ::Dam::examples } diff --git a/kratos.gid/apps/Dam/examples/examples.tcl b/kratos.gid/apps/Dam/examples/examples.tcl index 89a6926fc..f069cbe03 100644 --- a/kratos.gid/apps/Dam/examples/examples.tcl +++ b/kratos.gid/apps/Dam/examples/examples.tcl @@ -1,3 +1,4 @@ namespace eval ::Dam::examples { + namespace path ::Dam } diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index ae3bbeeee..0a7a22096 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam::write { + namespace path ::Dam variable ConditionsDictGroupIterators variable NodalConditionsGroup variable TableDict @@ -79,17 +80,17 @@ proc ::Dam::write::UpdateMaterials { } { proc ::Dam::write::writeConditions { } { variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un]] + set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un]] set pairs [lsort -increasing -index end [dict values $ConditionsDictGroupIterators] ] set index [lindex [lindex [lsort -integer -index 0 $pairs] end] end] if {$index eq ""} { set index 0 } - set ThermalConditionGroups [write::writeConditions [GetAttribute thermal_conditions_un] $index] + set ThermalConditionGroups [::write::writeConditions [GetAttribute thermal_conditions_un] $index] set ConditionsDictGroupIterators [dict merge $ConditionsDictGroupIterators $ThermalConditionGroups] - set SelfweightConditionGroups [write::writeConditions "DamSelfweight" $index] + set SelfweightConditionGroups [::write::writeConditions "DamSelfweight" $index] set ConditionsDictGroupIterators [dict merge $ConditionsDictGroupIterators $SelfweightConditionGroups] } diff --git a/kratos.gid/apps/Dam/xml/XmlController.tcl b/kratos.gid/apps/Dam/xml/XmlController.tcl index de4b01ccc..f25b0f76e 100644 --- a/kratos.gid/apps/Dam/xml/XmlController.tcl +++ b/kratos.gid/apps/Dam/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam::xml { + namespace path ::Dam } proc ::Dam::xml::Init { } { diff --git a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl index ed5c29055..1de7c3b85 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl @@ -1,4 +1,4 @@ -namespace eval EmbeddedFluid::examples::CylinderInFlow { +namespace eval ::EmbeddedFluid::examples::CylinderInFlow { namespace path ::EmbeddedFluid::examples variable CylinderInFlow_Data } diff --git a/kratos.gid/apps/EmbeddedFluid/write/write.tcl b/kratos.gid/apps/EmbeddedFluid/write/write.tcl index 7a26990c7..d9448c155 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/write.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/write.tcl @@ -1,4 +1,5 @@ -namespace eval EmbeddedFluid::write { +namespace eval ::EmbeddedFluid::write { + namespace path ::EmbeddedFluid variable writeAttributes } diff --git a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl index 921ad520d..197a4a687 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl @@ -1,6 +1,8 @@ -namespace eval EmbeddedFluid::xml::BoundingBox { +namespace eval ::EmbeddedFluid::xml::BoundingBox { + namespace path ::EmbeddedFluid::xml + variable winpath variable box variable boxname diff --git a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl index b6c658a88..9d82a4798 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval EmbeddedFluid::xml { +namespace eval ::EmbeddedFluid::xml { + namespace path ::EmbeddedFluid # Namespace variables declaration variable lastImportMeshSize variable export_dir diff --git a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl index 8ef6713e8..e4a31ea5f 100644 --- a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl @@ -1,4 +1,5 @@ namespace eval ::FSI::examples::HighRiseBuilding { + namespace path ::FSI::examples } diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index bdeeccc77..e4c5367a2 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -1,4 +1,5 @@ namespace eval ::FSI::examples::MokChannelFlexibleWall { + namespace path ::FSI::examples } diff --git a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl index abd254154..4ce9f4063 100644 --- a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl +++ b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl @@ -1,4 +1,5 @@ namespace eval ::FSI::examples::TurekBenchmark { + namespace path ::FSI::examples } diff --git a/kratos.gid/apps/FSI/examples/examples.tcl b/kratos.gid/apps/FSI/examples/examples.tcl index e82c69fd7..e2ab643e4 100644 --- a/kratos.gid/apps/FSI/examples/examples.tcl +++ b/kratos.gid/apps/FSI/examples/examples.tcl @@ -1,3 +1,4 @@ -namespace eval FSI::examples { +namespace eval ::FSI::examples { + namespace path ::FSI::examples } diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 338945c8b..083f58d2b 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -1,5 +1,6 @@ namespace eval ::Fluid::examples::CylinderInFlow { + namespace path ::Fluid::examples } proc ::Fluid::examples::CylinderInFlow::Init {args} { diff --git a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl index 394a19626..2ea0f8aa4 100644 --- a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl @@ -1,4 +1,5 @@ namespace eval ::Fluid::examples::HighRiseBuilding { + namespace path ::Fluid::examples } proc ::Fluid::examples::HighRiseBuilding::Init {args} { diff --git a/kratos.gid/apps/Fluid/examples/examples.tcl b/kratos.gid/apps/Fluid/examples/examples.tcl index 8c6bc707f..c4171b0a0 100644 --- a/kratos.gid/apps/Fluid/examples/examples.tcl +++ b/kratos.gid/apps/Fluid/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::Fluid::examples { + namespace path ::Fluid } # Common functions for all examples that uses Fluid App diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index 7adaab16f..58a9dbcf8 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::Fluid::write { + namespace path ::Fluid # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes diff --git a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl index 75302eecc..f572edf05 100644 --- a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl +++ b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl @@ -1,4 +1,5 @@ namespace eval ::Fluid::write { + namespace path ::Fluid # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes @@ -94,7 +95,7 @@ proc ::Fluid::write::writeBoundaryConditions { } { set BCUN [GetAttribute conditions_un] # Write the conditions - write::writeConditionsByGiDId $BCUN + ::write::writeConditionsByGiDId $BCUN } diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index f10ec4f12..fb9d08ae3 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval ::Fluid::xml { + namespace path ::Fluid # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/FluidDEM/examples/examples.tcl b/kratos.gid/apps/FluidDEM/examples/examples.tcl index 48285ab45..f5699d7f1 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.tcl +++ b/kratos.gid/apps/FluidDEM/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::FluidDEM::examples { + namespace path ::Fluid } proc ::FluidDEM::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 1f8c1626c..1c89a0d3e 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::FluidDEM::write { namespace path ::FluidDEM + variable fluid_project_parameters variable dem_project_parameters } diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl index 1c23d4e94..4a5e78eea 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -1,4 +1,5 @@ namespace eval ::MPM::examples::FallingSandBall { + namespace path ::MPM::examples } proc ::MPM::examples::FallingSandBall::Init {args} { diff --git a/kratos.gid/apps/MPM/examples/examples.tcl b/kratos.gid/apps/MPM/examples/examples.tcl index dcfb5ab3f..45ed33cbe 100644 --- a/kratos.gid/apps/MPM/examples/examples.tcl +++ b/kratos.gid/apps/MPM/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::MPM::examples { + namespace path ::MPM } diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index e4c1197ed..926710cd2 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -1,4 +1,5 @@ namespace eval MPM::write { + namespace path ::MPM variable writeAttributes variable ConditionsDictGroupIterators } @@ -105,7 +106,7 @@ proc MPM::write::writeGridConnectivities { } { proc MPM::write::writeConditions { } { variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un] ] + set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] } proc MPM::write::writeSubmodelparts { type } { diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl index 33010e007..be7d924eb 100644 --- a/kratos.gid/apps/MPM/xml/XmlController.tcl +++ b/kratos.gid/apps/MPM/xml/XmlController.tcl @@ -1,4 +1,5 @@ namespace eval MPM::xml { + namespace path ::MPM } diff --git a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl index 9a0ad3ac8..235ff0c2e 100644 --- a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl +++ b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl @@ -1,4 +1,5 @@ namespace eval ::PfemFluid::examples::DamBreakFSI { + namespace path ::PfemFluid::examples } diff --git a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl index 4a1658c49..bfc8a5bf5 100644 --- a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl +++ b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl @@ -1,4 +1,5 @@ namespace eval ::PfemFluid::examples::WaterDamBreak { + namespace path ::PfemFluid::examples } diff --git a/kratos.gid/apps/PfemFluid/examples/examples.tcl b/kratos.gid/apps/PfemFluid/examples/examples.tcl index 807165e78..1da9c7be9 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.tcl +++ b/kratos.gid/apps/PfemFluid/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::PfemFluid::examples { + namespace path ::PfemFluid } diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index c275b2418..e64210935 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -1,4 +1,5 @@ -namespace eval PfemFluid::write { +namespace eval ::PfemFluid::write { + namespace path ::PfemFluid variable writeAttributes variable remesh_domains_dict variable bodies_list diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index 2cbcda122..a0ae2506c 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval PfemFluid::xml { +namespace eval ::PfemFluid::xml { + namespace path ::PfemFluid variable bodyNodalCondition } diff --git a/kratos.gid/apps/PfemLauncher/start.tcl b/kratos.gid/apps/PfemLauncher/start.tcl index 9aee2870b..e2906cd60 100644 --- a/kratos.gid/apps/PfemLauncher/start.tcl +++ b/kratos.gid/apps/PfemLauncher/start.tcl @@ -1,4 +1,5 @@ namespace eval ::PfemLauncher { + namespace path ::PfemFluid variable available_apps } diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index 2007fbdd9..f6275df6b 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicConvection { +namespace eval ::PfemThermic::examples::ThermicConvection { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicConvection::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index c88eec274..b7716ffc1 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicCubeDrop { +namespace eval ::PfemThermic::examples::ThermicCubeDrop { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicCubeDrop::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index 0efd6ab12..7ef8b09e9 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicDamBreakFSI { +namespace eval ::PfemThermic::examples::ThermicDamBreakFSI { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicDamBreakFSI::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 011508168..76a3e2781 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicFluidDrop { +namespace eval ::PfemThermic::examples::ThermicFluidDrop { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicFluidDrop::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index de71d31bd..91c839e52 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicSloshing { +namespace eval ::PfemThermic::examples::ThermicSloshing { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicSloshing::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index 17cacd5cc..cd7771299 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::examples::ThermicSloshingConvection::ThermicSloshing { +namespace eval ::PfemThermic::examples::ThermicSloshingConvection { + namespace path ::PfemThermic::examples } proc ::PfemThermic::examples::ThermicSloshingConvection::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index f9c6adb3b..2c89394f4 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -1,7 +1,8 @@ -namespace eval PfemThermic::examples { +namespace eval ::PfemThermic::examples { + namespace path ::PfemThermic } -proc PfemThermic::examples::ErasePreviousIntervals { } { +proc ::PfemThermic::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] { diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 374cdfc17..0a810c2b9 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -1,4 +1,5 @@ namespace eval ::PfemThermic::write { + namespace path ::PfemThermic } proc ::PfemThermic::write::Init { } { diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index c93806557..697a9bc2a 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval PfemThermic::xml { +namespace eval ::PfemThermic::xml { + namespace path ::PfemThermic # Namespace variables declaration } diff --git a/kratos.gid/apps/PotentialFluid/examples/examples.tcl b/kratos.gid/apps/PotentialFluid/examples/examples.tcl index 146d5543f..efd5a7c2e 100644 --- a/kratos.gid/apps/PotentialFluid/examples/examples.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::PotentialFluid::examples { + namespace path ::PotentialFluid } diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index 1764be181..3ff2a04ae 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -1,9 +1,10 @@ -namespace eval PotentialFluid::write { +namespace eval ::PotentialFluid::write { + namespace path ::PotentialFluid variable writeAttributes variable FluidConditionMap } -proc PotentialFluid::write::Init { } { +proc ::PotentialFluid::write::Init { } { # Namespace variables inicialization variable writeAttributes set writeAttributes [::Fluid::write::GetAttributes] diff --git a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl index 7d6f1eaef..48aae28bd 100644 --- a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval PotentialFluid::xml { +namespace eval ::PotentialFluid::xml { + namespace path ::PotentialFluid # Namespace variables declaration variable lastImportMeshSize variable export_dir diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index 8f28f60b0..e090957a5 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -1,5 +1,6 @@ -namespace eval StenosisWizard::Wizard { +namespace eval ::StenosisWizard::Wizard { + namespace path ::StenosisWizard # Namespace variables declaration variable curr_win variable ogl_cuts diff --git a/kratos.gid/apps/StenosisWizard/write/write.tcl b/kratos.gid/apps/StenosisWizard/write/write.tcl index 8095bdc33..87cbdef60 100644 --- a/kratos.gid/apps/StenosisWizard/write/write.tcl +++ b/kratos.gid/apps/StenosisWizard/write/write.tcl @@ -1,4 +1,5 @@ -namespace eval StenosisWizard::write { +namespace eval ::StenosisWizard::write { + namespace path ::StenosisWizard } diff --git a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl index 687fb86bd..864fe6541 100644 --- a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl +++ b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl @@ -1,10 +1,11 @@ -namespace eval StenosisWizard::xml { +namespace eval ::StenosisWizard::xml { + namespace path ::StenosisWizard } proc StenosisWizard::xml::Init { } { - Model::InitVariables dir $::StenosisWizard::dir + Model::InitVariables dir $::StenosisWizard::dir - spdAux::processIncludes + spdAux::processIncludes } proc StenosisWizard::xml::CustomTree {args} { @@ -18,8 +19,8 @@ proc StenosisWizard::xml::getUniqueName {name} { } proc ::StenosisWizard::xml::MultiAppEvent {args} { - if {$args eq "init"} { - spdAux::parseRoutes - spdAux::ConvertAllUniqueNames FL StenWiz - } + if {$args eq "init"} { + spdAux::parseRoutes + spdAux::ConvertAllUniqueNames FL StenWiz + } } diff --git a/kratos.gid/apps/Stent/wizard/StentGeometry.tcl b/kratos.gid/apps/Stent/wizard/StentGeometry.tcl index c5fca9cf2..30262d922 100644 --- a/kratos.gid/apps/Stent/wizard/StentGeometry.tcl +++ b/kratos.gid/apps/Stent/wizard/StentGeometry.tcl @@ -1,4 +1,5 @@ -namespace eval Stent::Wizard { +namespace eval ::Stent::Wizard { + namespace path ::Stent # Namespace variables declaration variable curr_win diff --git a/kratos.gid/apps/Stent/xml/XmlController.tcl b/kratos.gid/apps/Stent/xml/XmlController.tcl index e1f9a2630..64a309a5d 100644 --- a/kratos.gid/apps/Stent/xml/XmlController.tcl +++ b/kratos.gid/apps/Stent/xml/XmlController.tcl @@ -1,4 +1,5 @@ -namespace eval Stent::xml { +namespace eval ::Stent::xml { + namespace path ::Stent } proc Stent::xml::Init { } { @@ -21,7 +22,6 @@ proc Stent::xml::CustomTree { args } { Structural::xml::CustomTree {*}$args } -namespace eval Structural::xml {} proc Structural::xml::ProcCheckGeometryStructural {domNode args} { set ret "line" return $ret diff --git a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl index f61175d72..b7ceef544 100644 --- a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl @@ -1,4 +1,5 @@ namespace eval ::Structural::examples::HighRiseBuilding { + namespace path ::Structural::examples } diff --git a/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl index 8a574cc8f..46efac698 100644 --- a/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl +++ b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl @@ -1,4 +1,5 @@ namespace eval ::Structural::examples::IncompressibleCookMembrane { + namespace path ::Structural::examples } proc ::Structural::examples::IncompressibleCookMembrane::Init {args} { diff --git a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl index 3e26d234c..1b1f56378 100644 --- a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl +++ b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl @@ -1,4 +1,5 @@ namespace eval ::Structural::examples::TrussCantilever { + namespace path ::Structural::examples } proc ::Structural::examples::TrussCantilever::Init {args} { diff --git a/kratos.gid/apps/Structural/examples/examples.tcl b/kratos.gid/apps/Structural/examples/examples.tcl index 804f1d1f4..420961dfd 100644 --- a/kratos.gid/apps/Structural/examples/examples.tcl +++ b/kratos.gid/apps/Structural/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::Structural::examples { + namespace path ::Structural } diff --git a/kratos.gid/apps/Structural/postprocess/formfinding.tcl b/kratos.gid/apps/Structural/postprocess/formfinding.tcl index 0b70427a7..355147526 100644 --- a/kratos.gid/apps/Structural/postprocess/formfinding.tcl +++ b/kratos.gid/apps/Structural/postprocess/formfinding.tcl @@ -1,6 +1,6 @@ namespace eval ::Structural::Formfinding { - # Variable declaration + namespace path ::Structural } diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index bc245cdc0..d32c4a6df 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -1,4 +1,6 @@ namespace eval ::Structural::write { + namespace path ::Structural + variable ConditionsDictGroupIterators variable NodalConditionsGroup variable writeAttributes @@ -72,7 +74,7 @@ proc ::Structural::write::writeModelPartEvent { } { proc ::Structural::write::writeConditions { } { variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [write::writeConditions [GetAttribute conditions_un] ] + set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] set last_iter [Structural::write::getLastConditionId] writeContactConditions $last_iter diff --git a/kratos.gid/apps/Structural/xml/XmlController.tcl b/kratos.gid/apps/Structural/xml/XmlController.tcl index 42d3d6f95..9f471677b 100644 --- a/kratos.gid/apps/Structural/xml/XmlController.tcl +++ b/kratos.gid/apps/Structural/xml/XmlController.tcl @@ -1,10 +1,9 @@ namespace eval ::Structural::xml { - variable dir + namespace path ::Structural } proc ::Structural::xml::Init { } { - variable dir - Model::InitVariables dir $Structural::dir + Model::InitVariables dir $::Structural::dir Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 259c5271d..29417b49e 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Kratos { +namespace eval ::Kratos { variable kratos_private variable must_write_calc_data diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 24a26a196..214d15c52 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval apps { +namespace eval ::apps { variable activeApp variable appList } diff --git a/kratos.gid/scripts/Controllers/Drawer.tcl b/kratos.gid/scripts/Controllers/Drawer.tcl index a5d825c3f..bb4c326f3 100644 --- a/kratos.gid/scripts/Controllers/Drawer.tcl +++ b/kratos.gid/scripts/Controllers/Drawer.tcl @@ -1,4 +1,4 @@ -namespace eval Drawer { +namespace eval ::Drawer { variable registered_procs variable vars } diff --git a/kratos.gid/scripts/Model/Condition.tcl b/kratos.gid/scripts/Model/Condition.tcl index 9e0d26fe3..d1663ee51 100644 --- a/kratos.gid/scripts/Model/Condition.tcl +++ b/kratos.gid/scripts/Model/Condition.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { catch {Condition destroy} oo::class create Condition { superclass Entity diff --git a/kratos.gid/scripts/Model/ConstitutiveLaw.tcl b/kratos.gid/scripts/Model/ConstitutiveLaw.tcl index 0df2a5e8e..b2e7049c1 100644 --- a/kratos.gid/scripts/Model/ConstitutiveLaw.tcl +++ b/kratos.gid/scripts/Model/ConstitutiveLaw.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { # Clase CLaw catch {CLaw destroy} diff --git a/kratos.gid/scripts/Model/Element.tcl b/kratos.gid/scripts/Model/Element.tcl index 604daf33a..63f1e460c 100644 --- a/kratos.gid/scripts/Model/Element.tcl +++ b/kratos.gid/scripts/Model/Element.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { catch {Element destroy} oo::class create Element { superclass Entity diff --git a/kratos.gid/scripts/Model/Entity.tcl b/kratos.gid/scripts/Model/Entity.tcl index c49c9fd39..9dd10910d 100644 --- a/kratos.gid/scripts/Model/Entity.tcl +++ b/kratos.gid/scripts/Model/Entity.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { catch {Entity destroy} oo::class create Entity { variable name diff --git a/kratos.gid/scripts/Model/Material.tcl b/kratos.gid/scripts/Model/Material.tcl index fec823c26..dae1f6df6 100644 --- a/kratos.gid/scripts/Model/Material.tcl +++ b/kratos.gid/scripts/Model/Material.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { catch {Material destroy} oo::class create Material { superclass Entity diff --git a/kratos.gid/scripts/Model/Model.tcl b/kratos.gid/scripts/Model/Model.tcl index 96a693048..f4a299f03 100644 --- a/kratos.gid/scripts/Model/Model.tcl +++ b/kratos.gid/scripts/Model/Model.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { variable SpatialDimension variable ValidSpatialDimensions variable SolutionStrategies diff --git a/kratos.gid/scripts/Model/Parameter.tcl b/kratos.gid/scripts/Model/Parameter.tcl index 96a9d7261..7283ea0e5 100644 --- a/kratos.gid/scripts/Model/Parameter.tcl +++ b/kratos.gid/scripts/Model/Parameter.tcl @@ -4,7 +4,7 @@ ################################################################################## # Clase Parameter -namespace eval Model { +namespace eval ::Model { catch {Parameter destroy} oo::class create Parameter { superclass Entity diff --git a/kratos.gid/scripts/Model/Process.tcl b/kratos.gid/scripts/Model/Process.tcl index e9246a65b..e790b5e04 100644 --- a/kratos.gid/scripts/Model/Process.tcl +++ b/kratos.gid/scripts/Model/Process.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { # Clase Process catch {Process destroy} oo::class create Process { diff --git a/kratos.gid/scripts/Model/SolutionStrategy.tcl b/kratos.gid/scripts/Model/SolutionStrategy.tcl index 7f3151863..b0a4ab0d5 100644 --- a/kratos.gid/scripts/Model/SolutionStrategy.tcl +++ b/kratos.gid/scripts/Model/SolutionStrategy.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { # Clase Solution Strategey catch {Scheme destroy} oo::class create Scheme { diff --git a/kratos.gid/scripts/Model/Solver.tcl b/kratos.gid/scripts/Model/Solver.tcl index f66c5d944..421433a48 100644 --- a/kratos.gid/scripts/Model/Solver.tcl +++ b/kratos.gid/scripts/Model/Solver.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { # Clase Solution Strategey catch {Solver destroy} oo::class create Solver { diff --git a/kratos.gid/scripts/Model/Topology.tcl b/kratos.gid/scripts/Model/Topology.tcl index c83d3c1a1..aaf7bcc0c 100644 --- a/kratos.gid/scripts/Model/Topology.tcl +++ b/kratos.gid/scripts/Model/Topology.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval Model { +namespace eval ::Model { # Clase Topology features catch {Topology destroy} oo::class create Topology { diff --git a/kratos.gid/scripts/Writing/WriteConditions.tcl b/kratos.gid/scripts/Writing/WriteConditions.tcl index f64590e6a..a94252985 100644 --- a/kratos.gid/scripts/Writing/WriteConditions.tcl +++ b/kratos.gid/scripts/Writing/WriteConditions.tcl @@ -1,5 +1,5 @@ -proc write::writeConditions { baseUN {iter 0} {cond_id ""}} { +proc ::write::writeConditions { baseUN {iter 0} {cond_id ""}} { set dictGroupsIterators [dict create] set root [customlib::GetBaseRoot] @@ -24,7 +24,7 @@ proc write::writeConditions { baseUN {iter 0} {cond_id ""}} { return $dictGroupsIterators } -proc write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} { +proc ::write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} { set groupid [get_domnode_attribute $groupNode n] set groupid [GetWriteGroupName $groupid] if {![dict exists $dictGroupsIterators $groupid]} { @@ -52,7 +52,7 @@ proc write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} return $dictGroupsIterators } -proc write::writeGroupCondition {groupid kname nnodes iter} { +proc ::write::writeGroupCondition {groupid kname nnodes iter} { set obj [list ] # Print header @@ -90,7 +90,7 @@ proc write::writeGroupCondition {groupid kname nnodes iter} { return [list $initial $final] } -proc write::writeNodalConditions { un } { +proc ::write::writeNodalConditions { un } { set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute $un]/condition/group" @@ -109,7 +109,7 @@ proc write::writeNodalConditions { un } { } } -proc write::writeConditionGroupedSubmodelParts {cid groups_dict} { +proc ::write::writeConditionGroupedSubmodelParts {cid groups_dict} { set s [mdpaIndent] WriteString "${s}Begin SubModelPart $cid // Condition $cid" diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 96e4a0200..ff2933fc2 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -4,7 +4,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval write { +namespace eval ::write { variable mat_dict variable submodelparts variable MDPA_loop_control diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 9463f9766..37753bca1 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -3,7 +3,7 @@ # Do not change anything here unless it's strictly necessary. ################################################################################## -namespace eval spdAux { +namespace eval ::spdAux { # Namespace variables declaration variable uniqueNames From aac383296644422abdce1787cfafc2fc77d7bb1f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 20:51:36 +0200 Subject: [PATCH 388/556] FSI fix --- kratos.gid/apps/FSI/write/writeProjectParameters.tcl | 7 +++---- kratos.gid/apps/Structural/app.json | 3 ++- kratos.gid/apps/Structural/write/write.tcl | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl index 7d638eff0..b2b84f760 100644 --- a/kratos.gid/apps/FSI/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FSI/write/writeProjectParameters.tcl @@ -81,7 +81,7 @@ proc ::FSI::write::GetSolverSettingsDict { } { set fluid_interface_uniquename FluidNoSlipInterface$::Model::SpatialDimension set fluid_interfaces_list [list ] set fluid_interfaces_list_raw [write::GetSubModelPartFromCondition FLBC $fluid_interface_uniquename] - foreach interface $structure_interfaces_list_raw { + foreach interface $fluid_interfaces_list_raw { lappend fluid_interfaces_list [Fluid::write::GetAttribute model_part_name].$interface } dict set solver_settings_dict coupling_settings fluid_interfaces_list $fluid_interfaces_list @@ -136,8 +136,8 @@ proc ::FSI::write::GetOutputProcessesDict { } { proc ::FSI::write::UpdateUniqueNames { appid } { set unList [list "Results"] foreach un $unList { - set current_un [apps::getAppUniqueName $appid $un] - spdAux::setRoute $un [spdAux::getRoute $current_un] + set current_un [apps::getAppUniqueName $appid $un] + spdAux::setRoute $un [spdAux::getRoute $current_un] } } @@ -172,7 +172,6 @@ proc ::FSI::write::InitExternalProjectParameters { } { Structural::write::SetAttribute time_parameters_un FLTimeParameters write::initWriteConfiguration [Structural::write::GetAttributes] set FSI::write::structure_project_parameters [Structural::write::getParametersDict] - apps::setActiveAppSoft FSI } \ No newline at end of file diff --git a/kratos.gid/apps/Structural/app.json b/kratos.gid/apps/Structural/app.json index da2f68488..be3fb9b2e 100644 --- a/kratos.gid/apps/Structural/app.json +++ b/kratos.gid/apps/Structural/app.json @@ -45,7 +45,8 @@ "coordinates": "all", "materials_file": "StructuralMaterials.json", "properties_location": "json", - "model_part_name": "Structure" + "model_part_name": "Structure", + "output_model_part_name": "" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index d32c4a6df..112206369 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -35,6 +35,7 @@ proc ::Structural::write::Init { } { SetAttribute materials_file [::Structural::GetWriteProperty materials_file] SetAttribute main_launch_file [::Structural::GetAttribute main_launch_file] SetAttribute model_part_name [::Structural::GetWriteProperty model_part_name] + SetAttribute output_model_part_name [::Structural::GetWriteProperty output_model_part_name] } # MDPA Blocks From 0dbdbfecef090ee5d9ba3b2114f43c55e25cbaa7 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 23:41:46 +0200 Subject: [PATCH 389/556] Namespace handle --- .../apps/Buoyancy/examples/HeatedSquare.tcl | 1 + .../apps/Buoyancy/examples/examples.tcl | 3 ++- kratos.gid/apps/Buoyancy/start.tcl | 1 + kratos.gid/apps/Buoyancy/write/write.tcl | 2 ++ .../apps/Buoyancy/xml/XmlController.tcl | 1 + .../apps/CDEM/examples/ContSpheresDrop3D.tcl | 1 + .../apps/CDEM/examples/ContinuumDrop2D.tcl | 1 + kratos.gid/apps/CDEM/examples/examples.tcl | 1 + kratos.gid/apps/CDEM/start.tcl | 1 + kratos.gid/apps/CDEM/write/write.tcl | 2 ++ kratos.gid/apps/CDEM/xml/XmlController.tcl | 1 + .../ConjugateHeatTransfer/examples/BFS.tcl | 1 + .../examples/CylinderCooling.tcl | 1 + .../examples/HeatedSquare.tcl | 1 + .../examples/examples.tcl | 1 + .../apps/ConjugateHeatTransfer/start.tcl | 2 ++ .../ConjugateHeatTransfer/write/write.tcl | 1 + .../xml/XmlController.tcl | 1 + .../examples/HeatedSquare.tcl | 1 + .../ConvectionDiffusion/examples/examples.tcl | 1 + kratos.gid/apps/ConvectionDiffusion/start.tcl | 1 + .../apps/ConvectionDiffusion/write/write.tcl | 1 + .../ConvectionDiffusion/xml/XmlController.tcl | 1 + kratos.gid/apps/DEM/examples/CirclesDrop.tcl | 1 + kratos.gid/apps/DEM/examples/SpheresDrop.tcl | 1 + kratos.gid/apps/DEM/examples/examples.tcl | 1 + kratos.gid/apps/DEM/start.tcl | 2 ++ kratos.gid/apps/DEM/write/write.tcl | 2 ++ kratos.gid/apps/DEM/xml/XmlController.tcl | 2 ++ .../material_relations/MaterialRelations.tcl | 2 ++ kratos.gid/apps/DEMLauncher/start.tcl | 2 ++ .../apps/DEMPFEM/examples/InnerSphere.tcl | 1 + kratos.gid/apps/DEMPFEM/examples/examples.tcl | 1 + kratos.gid/apps/DEMPFEM/start.tcl | 2 ++ kratos.gid/apps/DEMPFEM/write/write.tcl | 1 + kratos.gid/apps/DEMPFEM/xml/XmlController.tcl | 1 + .../apps/Dam/examples/ThermoMechaDam2D.tcl | 1 + .../apps/Dam/examples/ThermoMechaDam3D.tcl | 1 + kratos.gid/apps/Dam/examples/examples.tcl | 1 + kratos.gid/apps/Dam/start.tcl | 1 + kratos.gid/apps/Dam/write/write.tcl | 2 ++ kratos.gid/apps/Dam/xml/XmlController.tcl | 1 + .../EmbeddedFluid/examples/CylinderInFlow.tcl | 2 ++ .../apps/EmbeddedFluid/examples/examples.tcl | 1 + kratos.gid/apps/EmbeddedFluid/start.tcl | 2 ++ kratos.gid/apps/EmbeddedFluid/write/write.tcl | 2 ++ .../xml/BoundingBoxWindowController.tcl | 1 + .../apps/EmbeddedFluid/xml/XmlController.tcl | 1 + .../apps/FSI/examples/HighRiseBuilding.tcl | 1 + .../examples/MokChannelWithFlexibleWall.tcl | 1 + .../apps/FSI/examples/TurekBenchmark.tcl | 1 + kratos.gid/apps/FSI/examples/examples.tcl | 1 + kratos.gid/apps/FSI/start.tcl | 2 ++ kratos.gid/apps/FSI/write/write.tcl | 2 ++ kratos.gid/apps/FSI/xml/XmlController.tcl | 2 ++ .../apps/Fluid/examples/CylinderInFlow.tcl | 1 + .../apps/Fluid/examples/HighRiseBuilding.tcl | 1 + kratos.gid/apps/Fluid/examples/examples.tcl | 1 + kratos.gid/apps/Fluid/start.tcl | 2 ++ kratos.gid/apps/Fluid/write/write.tcl | 2 ++ kratos.gid/apps/Fluid/write/writeByGiDId.tcl | 2 ++ kratos.gid/apps/Fluid/xml/XmlController.tcl | 2 ++ .../apps/FluidDEM/examples/CylinderInFlow.tcl | 1 + .../apps/FluidDEM/examples/examples.tcl | 1 + kratos.gid/apps/FluidDEM/start.tcl | 2 ++ kratos.gid/apps/FluidDEM/write/write.tcl | 1 + .../apps/FluidDEM/xml/XmlController.tcl | 1 + kratos.gid/apps/FluidLauncher/start.tcl | 2 ++ .../apps/MPM/examples/FallingSandBall.tcl | 1 + kratos.gid/apps/MPM/examples/examples.tcl | 1 + kratos.gid/apps/MPM/start.tcl | 2 ++ kratos.gid/apps/MPM/write/write.tcl | 3 ++- kratos.gid/apps/MPM/xml/XmlController.tcl | 1 + .../apps/PfemFluid/examples/DamBreakFSI.tcl | 1 + .../apps/PfemFluid/examples/WaterDamBreak.tcl | 1 + .../apps/PfemFluid/examples/examples.tcl | 1 + kratos.gid/apps/PfemFluid/start.tcl | 2 ++ kratos.gid/apps/PfemFluid/write/write.tcl | 2 ++ .../apps/PfemFluid/xml/XmlController.tcl | 2 ++ kratos.gid/apps/PfemLauncher/start.tcl | 2 ++ .../examples/ThermicConvection.tcl | 1 + .../PfemThermic/examples/ThermicCubeDrop.tcl | 1 + .../examples/ThermicDamBreakFSI.tcl | 1 + .../PfemThermic/examples/ThermicFluidDrop.tcl | 1 + .../PfemThermic/examples/ThermicSloshing.tcl | 1 + .../examples/ThermicSloshingConvection.tcl | 1 + .../apps/PfemThermic/examples/examples.tcl | 1 + kratos.gid/apps/PfemThermic/start.tcl | 2 ++ kratos.gid/apps/PfemThermic/write/write.tcl | 1 + .../apps/PfemThermic/xml/XmlController.tcl | 1 + .../PotentialFluid/examples/NACA0012_2D.tcl | 1 + .../PotentialFluid/examples/NACA0012_3D.tcl | 3 ++- .../apps/PotentialFluid/examples/examples.tcl | 1 + kratos.gid/apps/PotentialFluid/start.tcl | 2 ++ .../apps/PotentialFluid/write/write.tcl | 2 ++ .../apps/PotentialFluid/xml/XmlController.tcl | 2 ++ kratos.gid/apps/StenosisWizard/start.tcl | 2 ++ .../StenosisWizard/wizard/Wizard_Steps.tcl | 2 ++ .../apps/StenosisWizard/write/write.tcl | 1 + .../apps/StenosisWizard/xml/XmlController.tcl | 1 + kratos.gid/apps/Stent/start.tcl | 2 ++ .../apps/Stent/wizard/StentGeometry.tcl | 2 ++ kratos.gid/apps/Stent/write/write.tcl | 5 +++- kratos.gid/apps/Stent/xml/XmlController.tcl | 1 + .../Structural/examples/HighRiseBuilding.tcl | 1 + .../examples/IncompressibleCookMembrane.tcl | 1 + .../Structural/examples/TrussCantilever.tcl | 1 + .../apps/Structural/examples/examples.tcl | 1 + .../Structural/postprocess/formfinding.tcl | 1 + kratos.gid/apps/Structural/start.tcl | 2 ++ kratos.gid/apps/Structural/write/write.tcl | 1 + .../apps/Structural/xml/XmlController.tcl | 1 + kratos.gid/apps/ThermicLauncher/start.tcl | 2 ++ kratos.gid/kratos.tcl | 23 +++++++++++++++++++ kratos.gid/scripts/Applications.tcl | 2 ++ kratos.gid/scripts/Controllers/Drawer.tcl | 2 ++ .../scripts/Controllers/ExamplesWindow.tcl | 2 ++ kratos.gid/scripts/Model/Condition.tcl | 2 ++ kratos.gid/scripts/Writing/Writing.tcl | 2 ++ kratos.gid/scripts/spdAuxiliar.tcl | 3 ++- 120 files changed, 191 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl index b07883e1d..df1393d01 100644 --- a/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/Buoyancy/examples/HeatedSquare.tcl @@ -1,5 +1,6 @@ namespace eval ::Buoyancy::examples::HeatedSquare { namespace path ::Buoyancy::examples + Kratos::AddNamespace [namespace current] } proc ::Buoyancy::examples::HeatedSquare::Init {args} { diff --git a/kratos.gid/apps/Buoyancy/examples/examples.tcl b/kratos.gid/apps/Buoyancy/examples/examples.tcl index ee5e4b29b..23dd2d340 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.tcl +++ b/kratos.gid/apps/Buoyancy/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::Buoyancy::examples { -namespace path ::Buoyancy + namespace path ::Buoyancy + Kratos::AddNamespace [namespace current] } proc ::Buoyancy::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/Buoyancy/start.tcl b/kratos.gid/apps/Buoyancy/start.tcl index f9671b2a3..81d2a1183 100644 --- a/kratos.gid/apps/Buoyancy/start.tcl +++ b/kratos.gid/apps/Buoyancy/start.tcl @@ -2,6 +2,7 @@ namespace eval ::Buoyancy { # Variable declaration variable dir variable _app + Kratos::AddNamespace [namespace current] proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} diff --git a/kratos.gid/apps/Buoyancy/write/write.tcl b/kratos.gid/apps/Buoyancy/write/write.tcl index 237211f2a..e2cfb8551 100644 --- a/kratos.gid/apps/Buoyancy/write/write.tcl +++ b/kratos.gid/apps/Buoyancy/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::Buoyancy::write { namespace path ::Buoyancy::write + Kratos::AddNamespace [namespace current] + variable writeAttributes } diff --git a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl index 2ac2fa28b..35fa45d52 100644 --- a/kratos.gid/apps/Buoyancy/xml/XmlController.tcl +++ b/kratos.gid/apps/Buoyancy/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::Buoyancy::xml { namespace path ::Buoyancy + Kratos::AddNamespace [namespace current] # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl index 72b7fb1b9..8e27e5299 100644 --- a/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl @@ -1,5 +1,6 @@ namespace eval ::CDEM::examples::ContSpheresDrop3D { namespace path ::CDEM::examples + Kratos::AddNamespace [namespace current] } proc ::CDEM::examples::ContSpheresDrop3D::Init {args} { diff --git a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl index a567a6208..5fe80362b 100644 --- a/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl +++ b/kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl @@ -1,5 +1,6 @@ namespace eval ::CDEM::examples::ContinuumDrop2D { namespace path ::CDEM::examples + Kratos::AddNamespace [namespace current] } proc ::CDEM::examples::ContinuumDrop2D::Init {args} { diff --git a/kratos.gid/apps/CDEM/examples/examples.tcl b/kratos.gid/apps/CDEM/examples/examples.tcl index 766db48b9..6bab9fc9b 100644 --- a/kratos.gid/apps/CDEM/examples/examples.tcl +++ b/kratos.gid/apps/CDEM/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::CDEM::examples { namespace path ::CDEM + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/CDEM/start.tcl b/kratos.gid/apps/CDEM/start.tcl index 3d32857fb..e6e9447dd 100644 --- a/kratos.gid/apps/CDEM/start.tcl +++ b/kratos.gid/apps/CDEM/start.tcl @@ -1,4 +1,5 @@ namespace eval ::CDEM { + Kratos::AddNamespace [namespace current] # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/CDEM/write/write.tcl b/kratos.gid/apps/CDEM/write/write.tcl index 5fa230f86..98b7d975c 100644 --- a/kratos.gid/apps/CDEM/write/write.tcl +++ b/kratos.gid/apps/CDEM/write/write.tcl @@ -1,6 +1,8 @@ namespace eval ::CDEM::write { namespace path ::CDEM + Kratos::AddNamespace [namespace current] + variable writeAttributes variable inletProperties variable last_property_id diff --git a/kratos.gid/apps/CDEM/xml/XmlController.tcl b/kratos.gid/apps/CDEM/xml/XmlController.tcl index e8a542550..ebd34510d 100644 --- a/kratos.gid/apps/CDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/CDEM/xml/XmlController.tcl @@ -1,6 +1,7 @@ namespace eval ::CDEM::xml { # Namespace variables declaration namespace path ::CDEM + Kratos::AddNamespace [namespace current] } proc ::CDEM::xml::Init { } { diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl index 9c22416d4..6c66eb2b1 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/BFS.tcl @@ -1,5 +1,6 @@ namespace eval ::ConjugateHeatTransfer::examples::BFS { namespace path ::ConjugateHeatTransfer::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl index 19423ee23..a0614c8b7 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/CylinderCooling.tcl @@ -1,5 +1,6 @@ namespace eval ::ConjugateHeatTransfer::examples::CylinderCooling { namespace path ::ConjugateHeatTransfer::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl index 0396948f6..eb6ffc407 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/HeatedSquare.tcl @@ -1,5 +1,6 @@ namespace eval ::ConjugateHeatTransfer::examples::HeatedSquare { namespace path ::ConjugateHeatTransfer::examples + Kratos::AddNamespace [namespace current] } proc ::ConjugateHeatTransfer::examples::HeatedSquare::Init {args} { diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl index 34e50a117..8b7683d5c 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::ConjugateHeatTransfer::examples { namespace path ::ConjugateHeatTransfer + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl index 9a0f36192..eb8a9f5dc 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/start.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/start.tcl @@ -1,4 +1,6 @@ namespace eval ::ConjugateHeatTransfer { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl index b33881c32..b9bd51d83 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::ConjugateHeatTransfer::write { namespace path ::ConjugateHeatTransfer + Kratos::AddNamespace [namespace current] # Namespace variables declaration variable ConjugateHeatTransferConditions variable writeCoordinatesByGroups diff --git a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl index a5624916d..ca2a967f9 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl +++ b/kratos.gid/apps/ConjugateHeatTransfer/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::ConjugateHeatTransfer::xml { namespace path ::ConjugateHeatTransfer + Kratos::AddNamespace [namespace current] # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl index f3bb252b0..e948740f3 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/HeatedSquare.tcl @@ -1,5 +1,6 @@ namespace eval ::ConvectionDiffusion::examples::HeatedSquare { namespace path ::ConvectionDiffusion::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl index 92ecee093..3391b8373 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::ConvectionDiffusion::examples { namespace path ::ConvectionDiffusion + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/ConvectionDiffusion/start.tcl b/kratos.gid/apps/ConvectionDiffusion/start.tcl index 2b022b6f6..aacd3fbfe 100644 --- a/kratos.gid/apps/ConvectionDiffusion/start.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/start.tcl @@ -1,4 +1,5 @@ namespace eval ::ConvectionDiffusion { + Kratos::AddNamespace [namespace current] # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 7ccfb8f1b..4c4b4c6ac 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::ConvectionDiffusion::write { namespace path ::ConvectionDiffusion + Kratos::AddNamespace [namespace current] # Namespace variables declaration variable ConvectionDiffusionConditions variable writeCoordinatesByGroups diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl index 802c08bda..65741c008 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::ConvectionDiffusion::xml { namespace path ::ConvectionDiffusion + Kratos::AddNamespace [namespace current] # Namespace variables declaration } diff --git a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl index af9821076..4d32ff0ae 100644 --- a/kratos.gid/apps/DEM/examples/CirclesDrop.tcl +++ b/kratos.gid/apps/DEM/examples/CirclesDrop.tcl @@ -1,5 +1,6 @@ namespace eval ::DEM::examples::CirclesDrop { namespace path ::DEM::examples + Kratos::AddNamespace [namespace current] } proc ::DEM::examples::CirclesDrop::Init {args} { diff --git a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl index c40b4122a..40244bdea 100644 --- a/kratos.gid/apps/DEM/examples/SpheresDrop.tcl +++ b/kratos.gid/apps/DEM/examples/SpheresDrop.tcl @@ -1,5 +1,6 @@ namespace eval ::DEM::examples::SpheresDrop { namespace path ::DEM::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/DEM/examples/examples.tcl b/kratos.gid/apps/DEM/examples/examples.tcl index 25626357a..ff16088bd 100644 --- a/kratos.gid/apps/DEM/examples/examples.tcl +++ b/kratos.gid/apps/DEM/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::DEM::examples { namespace path ::DEM + Kratos::AddNamespace [namespace current] } proc ::DEM::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/DEM/start.tcl b/kratos.gid/apps/DEM/start.tcl index 01fd82bed..223af9429 100644 --- a/kratos.gid/apps/DEM/start.tcl +++ b/kratos.gid/apps/DEM/start.tcl @@ -1,4 +1,6 @@ namespace eval ::DEM { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/DEM/write/write.tcl b/kratos.gid/apps/DEM/write/write.tcl index 00136610f..24ec7aabe 100644 --- a/kratos.gid/apps/DEM/write/write.tcl +++ b/kratos.gid/apps/DEM/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::DEM::write { namespace path ::DEM + Kratos::AddNamespace [namespace current] + variable writeAttributes variable partsProperties variable inletProperties diff --git a/kratos.gid/apps/DEM/xml/XmlController.tcl b/kratos.gid/apps/DEM/xml/XmlController.tcl index 79376796e..c7cc2b4d0 100644 --- a/kratos.gid/apps/DEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEM/xml/XmlController.tcl @@ -1,5 +1,7 @@ namespace eval ::DEM::xml { namespace path ::DEM + Kratos::AddNamespace [namespace current] + variable dir } diff --git a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl index 74770a3c8..8b2c6c33d 100644 --- a/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl +++ b/kratos.gid/apps/DEM/xml/material_relations/MaterialRelations.tcl @@ -4,6 +4,8 @@ ################################################################################## namespace eval ::Model { + Kratos::AddNamespace [namespace current] + catch {MaterialRelation destroy} oo::class create MaterialRelation { superclass Entity diff --git a/kratos.gid/apps/DEMLauncher/start.tcl b/kratos.gid/apps/DEMLauncher/start.tcl index b8af86977..8f35a2cab 100644 --- a/kratos.gid/apps/DEMLauncher/start.tcl +++ b/kratos.gid/apps/DEMLauncher/start.tcl @@ -1,4 +1,6 @@ namespace eval ::DemLauncher { + Kratos::AddNamespace [namespace current] + variable available_apps } diff --git a/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl b/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl index 9c1a1d927..5a1dcd4cf 100644 --- a/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl +++ b/kratos.gid/apps/DEMPFEM/examples/InnerSphere.tcl @@ -1,5 +1,6 @@ namespace eval ::DEMPFEM::examples::InnerSphere { namespace path ::DEMPFEM::examples + Kratos::AddNamespace [namespace current] } proc ::DEMPFEM::examples::InnerSphere::Init {args} { diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.tcl b/kratos.gid/apps/DEMPFEM/examples/examples.tcl index 7d7349363..bd659f0a8 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.tcl +++ b/kratos.gid/apps/DEMPFEM/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::DEMPFEM::examples { namespace path ::DEMPFEM + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/DEMPFEM/start.tcl b/kratos.gid/apps/DEMPFEM/start.tcl index 020056545..43cf83129 100644 --- a/kratos.gid/apps/DEMPFEM/start.tcl +++ b/kratos.gid/apps/DEMPFEM/start.tcl @@ -1,4 +1,6 @@ namespace eval ::DEMPFEM { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/DEMPFEM/write/write.tcl b/kratos.gid/apps/DEMPFEM/write/write.tcl index 431739f2c..06bd2894b 100644 --- a/kratos.gid/apps/DEMPFEM/write/write.tcl +++ b/kratos.gid/apps/DEMPFEM/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::DEMPFEM::write { namespace path ::DEMPFEM + Kratos::AddNamespace [namespace current] } proc ::DEMPFEM::write::Init { } { diff --git a/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl b/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl index 35cd05d77..1b05075fe 100644 --- a/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl +++ b/kratos.gid/apps/DEMPFEM/xml/XmlController.tcl @@ -1,6 +1,7 @@ namespace eval ::DEMPFEM::xml { # Namespace variables declaration namespace path ::DEMPFEM + Kratos::AddNamespace [namespace current] } proc ::DEMPFEM::xml::Init { } { diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl index a9e8787ec..fe90507ca 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl @@ -1,5 +1,6 @@ namespace eval ::Dam::examples::ThermoMechaDam2D { namespace path ::Dam::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl index 4866fcbc6..5bd67d958 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam3D.tcl @@ -1,5 +1,6 @@ namespace eval ::Dam::examples::ThermoMechaDam3D { namespace path ::Dam::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Dam/examples/examples.tcl b/kratos.gid/apps/Dam/examples/examples.tcl index f069cbe03..9b8a2c51e 100644 --- a/kratos.gid/apps/Dam/examples/examples.tcl +++ b/kratos.gid/apps/Dam/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam::examples { namespace path ::Dam + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Dam/start.tcl b/kratos.gid/apps/Dam/start.tcl index 398815ef7..69c67cc4a 100644 --- a/kratos.gid/apps/Dam/start.tcl +++ b/kratos.gid/apps/Dam/start.tcl @@ -1,4 +1,5 @@ namespace eval ::Dam { + Kratos::AddNamespace [namespace current] # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index 0a7a22096..cd1a51eeb 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::Dam::write { namespace path ::Dam + Kratos::AddNamespace [namespace current] + variable ConditionsDictGroupIterators variable NodalConditionsGroup variable TableDict diff --git a/kratos.gid/apps/Dam/xml/XmlController.tcl b/kratos.gid/apps/Dam/xml/XmlController.tcl index f25b0f76e..2a719e484 100644 --- a/kratos.gid/apps/Dam/xml/XmlController.tcl +++ b/kratos.gid/apps/Dam/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::Dam::xml { namespace path ::Dam + Kratos::AddNamespace [namespace current] } proc ::Dam::xml::Init { } { diff --git a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl index 1de7c3b85..2fd119728 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/CylinderInFlow.tcl @@ -1,5 +1,7 @@ namespace eval ::EmbeddedFluid::examples::CylinderInFlow { namespace path ::EmbeddedFluid::examples + Kratos::AddNamespace [namespace current] + variable CylinderInFlow_Data } diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl index 4a56efea1..db71e72f0 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::EmbeddedFluid::examples { namespace path ::EmbeddedFluid + Kratos::AddNamespace [namespace current] } proc ::EmbeddedFluid::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/EmbeddedFluid/start.tcl b/kratos.gid/apps/EmbeddedFluid/start.tcl index 3ee0942e9..5fd6c5789 100644 --- a/kratos.gid/apps/EmbeddedFluid/start.tcl +++ b/kratos.gid/apps/EmbeddedFluid/start.tcl @@ -1,4 +1,6 @@ namespace eval ::EmbeddedFluid { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/EmbeddedFluid/write/write.tcl b/kratos.gid/apps/EmbeddedFluid/write/write.tcl index d9448c155..3c43475c1 100644 --- a/kratos.gid/apps/EmbeddedFluid/write/write.tcl +++ b/kratos.gid/apps/EmbeddedFluid/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::EmbeddedFluid::write { namespace path ::EmbeddedFluid + Kratos::AddNamespace [namespace current] + variable writeAttributes } diff --git a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl index 197a4a687..91e654fb0 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/BoundingBoxWindowController.tcl @@ -2,6 +2,7 @@ namespace eval ::EmbeddedFluid::xml::BoundingBox { namespace path ::EmbeddedFluid::xml + Kratos::AddNamespace [namespace current] variable winpath variable box diff --git a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl index 9d82a4798..2add2e2b0 100644 --- a/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/EmbeddedFluid/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::EmbeddedFluid::xml { namespace path ::EmbeddedFluid + Kratos::AddNamespace [namespace current] # Namespace variables declaration variable lastImportMeshSize variable export_dir diff --git a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl index e4a31ea5f..ef9b33c36 100644 --- a/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/FSI/examples/HighRiseBuilding.tcl @@ -1,5 +1,6 @@ namespace eval ::FSI::examples::HighRiseBuilding { namespace path ::FSI::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl index e4c5367a2..fe80b35ce 100644 --- a/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl +++ b/kratos.gid/apps/FSI/examples/MokChannelWithFlexibleWall.tcl @@ -1,5 +1,6 @@ namespace eval ::FSI::examples::MokChannelFlexibleWall { namespace path ::FSI::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl index 4ce9f4063..338643655 100644 --- a/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl +++ b/kratos.gid/apps/FSI/examples/TurekBenchmark.tcl @@ -1,5 +1,6 @@ namespace eval ::FSI::examples::TurekBenchmark { namespace path ::FSI::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/FSI/examples/examples.tcl b/kratos.gid/apps/FSI/examples/examples.tcl index e2ab643e4..f1dc06f8d 100644 --- a/kratos.gid/apps/FSI/examples/examples.tcl +++ b/kratos.gid/apps/FSI/examples/examples.tcl @@ -1,4 +1,5 @@ namespace eval ::FSI::examples { namespace path ::FSI::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/FSI/start.tcl b/kratos.gid/apps/FSI/start.tcl index 827c5be27..d887ebe74 100644 --- a/kratos.gid/apps/FSI/start.tcl +++ b/kratos.gid/apps/FSI/start.tcl @@ -1,4 +1,6 @@ namespace eval ::FSI { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/FSI/write/write.tcl b/kratos.gid/apps/FSI/write/write.tcl index f02e7cfb8..ffc59021f 100644 --- a/kratos.gid/apps/FSI/write/write.tcl +++ b/kratos.gid/apps/FSI/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::FSI::write { namespace path ::FSI + Kratos::AddNamespace [namespace current] + variable fluid_project_parameters variable structure_project_parameters variable mdpa_names diff --git a/kratos.gid/apps/FSI/xml/XmlController.tcl b/kratos.gid/apps/FSI/xml/XmlController.tcl index 99e881ecd..6685296c4 100644 --- a/kratos.gid/apps/FSI/xml/XmlController.tcl +++ b/kratos.gid/apps/FSI/xml/XmlController.tcl @@ -1,5 +1,7 @@ namespace eval ::FSI::xml { namespace path ::FSI + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl index 083f58d2b..117491000 100644 --- a/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/Fluid/examples/CylinderInFlow.tcl @@ -1,6 +1,7 @@ namespace eval ::Fluid::examples::CylinderInFlow { namespace path ::Fluid::examples + Kratos::AddNamespace [namespace current] } proc ::Fluid::examples::CylinderInFlow::Init {args} { diff --git a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl index 2ea0f8aa4..d25337f2c 100644 --- a/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Fluid/examples/HighRiseBuilding.tcl @@ -1,5 +1,6 @@ namespace eval ::Fluid::examples::HighRiseBuilding { namespace path ::Fluid::examples + Kratos::AddNamespace [namespace current] } proc ::Fluid::examples::HighRiseBuilding::Init {args} { diff --git a/kratos.gid/apps/Fluid/examples/examples.tcl b/kratos.gid/apps/Fluid/examples/examples.tcl index c4171b0a0..e00f4cfa9 100644 --- a/kratos.gid/apps/Fluid/examples/examples.tcl +++ b/kratos.gid/apps/Fluid/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::Fluid::examples { namespace path ::Fluid + Kratos::AddNamespace [namespace current] } # Common functions for all examples that uses Fluid App diff --git a/kratos.gid/apps/Fluid/start.tcl b/kratos.gid/apps/Fluid/start.tcl index bdf0e8bf8..4816d4682 100644 --- a/kratos.gid/apps/Fluid/start.tcl +++ b/kratos.gid/apps/Fluid/start.tcl @@ -1,4 +1,6 @@ namespace eval ::Fluid { + Kratos::AddNamespace [namespace current] + # Variable declaration variable _app variable dir diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index 58a9dbcf8..fbc2c671f 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::Fluid::write { namespace path ::Fluid + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes diff --git a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl index f572edf05..b9e96d778 100644 --- a/kratos.gid/apps/Fluid/write/writeByGiDId.tcl +++ b/kratos.gid/apps/Fluid/write/writeByGiDId.tcl @@ -1,5 +1,7 @@ namespace eval ::Fluid::write { namespace path ::Fluid + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index fb9d08ae3..5ca8d805e 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -1,5 +1,7 @@ namespace eval ::Fluid::xml { namespace path ::Fluid + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable dir } diff --git a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl index ea1ddec57..fbfe0a576 100644 --- a/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl +++ b/kratos.gid/apps/FluidDEM/examples/CylinderInFlow.tcl @@ -1,5 +1,6 @@ namespace eval ::FluidDEM::examples::CylinderInFlow { namespace path ::FluidDEM::examples + Kratos::AddNamespace [namespace current] } proc ::FluidDEM::examples::CylinderInFlow::Init {args} { diff --git a/kratos.gid/apps/FluidDEM/examples/examples.tcl b/kratos.gid/apps/FluidDEM/examples/examples.tcl index f5699d7f1..2996d7476 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.tcl +++ b/kratos.gid/apps/FluidDEM/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::FluidDEM::examples { namespace path ::Fluid + Kratos::AddNamespace [namespace current] } proc ::FluidDEM::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/FluidDEM/start.tcl b/kratos.gid/apps/FluidDEM/start.tcl index 53acc995d..d0c4bbc42 100644 --- a/kratos.gid/apps/FluidDEM/start.tcl +++ b/kratos.gid/apps/FluidDEM/start.tcl @@ -1,4 +1,6 @@ namespace eval ::FluidDEM { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 1c89a0d3e..8626dbfcd 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::FluidDEM::write { namespace path ::FluidDEM + Kratos::AddNamespace [namespace current] variable fluid_project_parameters variable dem_project_parameters diff --git a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl index 041632f52..5c4c5d07d 100644 --- a/kratos.gid/apps/FluidDEM/xml/XmlController.tcl +++ b/kratos.gid/apps/FluidDEM/xml/XmlController.tcl @@ -1,6 +1,7 @@ namespace eval ::FluidDEM::xml { # Namespace variables declaration namespace path ::FluidDEM + Kratos::AddNamespace [namespace current] variable dir } diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index 194856220..fb2eb7024 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -1,4 +1,6 @@ namespace eval ::FluidLauncher { + Kratos::AddNamespace [namespace current] + variable available_apps } diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl index 4a5e78eea..4157b14a8 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -1,5 +1,6 @@ namespace eval ::MPM::examples::FallingSandBall { namespace path ::MPM::examples + Kratos::AddNamespace [namespace current] } proc ::MPM::examples::FallingSandBall::Init {args} { diff --git a/kratos.gid/apps/MPM/examples/examples.tcl b/kratos.gid/apps/MPM/examples/examples.tcl index 45ed33cbe..c9eafdaef 100644 --- a/kratos.gid/apps/MPM/examples/examples.tcl +++ b/kratos.gid/apps/MPM/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::MPM::examples { namespace path ::MPM + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/MPM/start.tcl b/kratos.gid/apps/MPM/start.tcl index 7c106c97a..a7863e5c9 100644 --- a/kratos.gid/apps/MPM/start.tcl +++ b/kratos.gid/apps/MPM/start.tcl @@ -1,4 +1,6 @@ namespace eval ::MPM { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 926710cd2..2fc567d95 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -1,5 +1,7 @@ namespace eval MPM::write { namespace path ::MPM + Kratos::AddNamespace [namespace current] + variable writeAttributes variable ConditionsDictGroupIterators } @@ -160,7 +162,6 @@ proc MPM::write::writeCustomFilesEvent { } { write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } - proc MPM::write::UpdateMaterials { } { set matdict [write::getMatDict] foreach {mat props} $matdict { diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl index be7d924eb..56f079a46 100644 --- a/kratos.gid/apps/MPM/xml/XmlController.tcl +++ b/kratos.gid/apps/MPM/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval MPM::xml { namespace path ::MPM + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl index 235ff0c2e..e84f2db6b 100644 --- a/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl +++ b/kratos.gid/apps/PfemFluid/examples/DamBreakFSI.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemFluid::examples::DamBreakFSI { namespace path ::PfemFluid::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl index bfc8a5bf5..103e266e5 100644 --- a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl +++ b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemFluid::examples::WaterDamBreak { namespace path ::PfemFluid::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/PfemFluid/examples/examples.tcl b/kratos.gid/apps/PfemFluid/examples/examples.tcl index 1da9c7be9..989b3e0b4 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.tcl +++ b/kratos.gid/apps/PfemFluid/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemFluid::examples { namespace path ::PfemFluid + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/PfemFluid/start.tcl b/kratos.gid/apps/PfemFluid/start.tcl index 17808e3b1..36cbf91f1 100644 --- a/kratos.gid/apps/PfemFluid/start.tcl +++ b/kratos.gid/apps/PfemFluid/start.tcl @@ -1,4 +1,6 @@ namespace eval ::PfemFluid { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index e64210935..4bac79d85 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::PfemFluid::write { namespace path ::PfemFluid + Kratos::AddNamespace [namespace current] + variable writeAttributes variable remesh_domains_dict variable bodies_list diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index a0ae2506c..85f2597ec 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -1,5 +1,7 @@ namespace eval ::PfemFluid::xml { namespace path ::PfemFluid + Kratos::AddNamespace [namespace current] + variable bodyNodalCondition } diff --git a/kratos.gid/apps/PfemLauncher/start.tcl b/kratos.gid/apps/PfemLauncher/start.tcl index e2906cd60..365d8a424 100644 --- a/kratos.gid/apps/PfemLauncher/start.tcl +++ b/kratos.gid/apps/PfemLauncher/start.tcl @@ -1,5 +1,7 @@ namespace eval ::PfemLauncher { namespace path ::PfemFluid + Kratos::AddNamespace [namespace current] + variable available_apps } diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl index f6275df6b..d984ccdee 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicConvection.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicConvection { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicConvection::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl index b7716ffc1..e57c2b706 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicCubeDrop.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicCubeDrop { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicCubeDrop::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl index 7ef8b09e9..134556641 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicDamBreakFSI.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicDamBreakFSI { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicDamBreakFSI::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl index 76a3e2781..43364a23a 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicFluidDrop.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicFluidDrop { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicFluidDrop::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl index 91c839e52..6fa06c02e 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshing.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicSloshing { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicSloshing::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl index cd7771299..762ad2325 100644 --- a/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl +++ b/kratos.gid/apps/PfemThermic/examples/ThermicSloshingConvection.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples::ThermicSloshingConvection { namespace path ::PfemThermic::examples + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ThermicSloshingConvection::Init {args} { diff --git a/kratos.gid/apps/PfemThermic/examples/examples.tcl b/kratos.gid/apps/PfemThermic/examples/examples.tcl index 2c89394f4..491e39180 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.tcl +++ b/kratos.gid/apps/PfemThermic/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::examples { namespace path ::PfemThermic + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::examples::ErasePreviousIntervals { } { diff --git a/kratos.gid/apps/PfemThermic/start.tcl b/kratos.gid/apps/PfemThermic/start.tcl index 7285c9f5c..e552af964 100644 --- a/kratos.gid/apps/PfemThermic/start.tcl +++ b/kratos.gid/apps/PfemThermic/start.tcl @@ -1,4 +1,6 @@ namespace eval ::PfemThermic { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 0a810c2b9..3907b22ce 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::write { namespace path ::PfemThermic + Kratos::AddNamespace [namespace current] } proc ::PfemThermic::write::Init { } { diff --git a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl index 697a9bc2a..3f564cd61 100644 --- a/kratos.gid/apps/PfemThermic/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemThermic/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::PfemThermic::xml { namespace path ::PfemThermic + Kratos::AddNamespace [namespace current] # Namespace variables declaration } diff --git a/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl b/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl index 0fef3bbb1..5e4dc53e4 100644 --- a/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/NACA0012_2D.tcl @@ -1,5 +1,6 @@ namespace eval ::PotentialFluid::examples::NACA0012_2D { namespace path ::PotentialFluid::examples + Kratos::AddNamespace [namespace current] } proc ::PotentialFluid::examples::NACA0012_2D::Init {args} { diff --git a/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl b/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl index 2f46b019b..3a2ae24f1 100644 --- a/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/NACA0012_3D.tcl @@ -1,5 +1,6 @@ namespace eval ::PotentialFluid::examples::NACA0012_3D { -namespace path ::PotentialFluid::examples + namespace path ::PotentialFluid::examples + Kratos::AddNamespace [namespace current] } proc ::PotentialFluid::examples::NACA0012_3D::Init {args} { diff --git a/kratos.gid/apps/PotentialFluid/examples/examples.tcl b/kratos.gid/apps/PotentialFluid/examples/examples.tcl index efd5a7c2e..9e38c2668 100644 --- a/kratos.gid/apps/PotentialFluid/examples/examples.tcl +++ b/kratos.gid/apps/PotentialFluid/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::PotentialFluid::examples { namespace path ::PotentialFluid + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/PotentialFluid/start.tcl b/kratos.gid/apps/PotentialFluid/start.tcl index d52dd5ac2..f0ad1765f 100644 --- a/kratos.gid/apps/PotentialFluid/start.tcl +++ b/kratos.gid/apps/PotentialFluid/start.tcl @@ -1,4 +1,6 @@ namespace eval ::PotentialFluid { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/PotentialFluid/write/write.tcl b/kratos.gid/apps/PotentialFluid/write/write.tcl index 3ff2a04ae..fa99cf936 100644 --- a/kratos.gid/apps/PotentialFluid/write/write.tcl +++ b/kratos.gid/apps/PotentialFluid/write/write.tcl @@ -1,5 +1,7 @@ namespace eval ::PotentialFluid::write { namespace path ::PotentialFluid + Kratos::AddNamespace [namespace current] + variable writeAttributes variable FluidConditionMap } diff --git a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl index 48aae28bd..5a8cdc3a7 100644 --- a/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PotentialFluid/xml/XmlController.tcl @@ -1,5 +1,7 @@ namespace eval ::PotentialFluid::xml { namespace path ::PotentialFluid + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable lastImportMeshSize variable export_dir diff --git a/kratos.gid/apps/StenosisWizard/start.tcl b/kratos.gid/apps/StenosisWizard/start.tcl index df7757c22..7542c013a 100644 --- a/kratos.gid/apps/StenosisWizard/start.tcl +++ b/kratos.gid/apps/StenosisWizard/start.tcl @@ -1,4 +1,6 @@ namespace eval ::StenosisWizard { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl index e090957a5..37b9e99fc 100644 --- a/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl +++ b/kratos.gid/apps/StenosisWizard/wizard/Wizard_Steps.tcl @@ -1,6 +1,8 @@ namespace eval ::StenosisWizard::Wizard { namespace path ::StenosisWizard + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable curr_win variable ogl_cuts diff --git a/kratos.gid/apps/StenosisWizard/write/write.tcl b/kratos.gid/apps/StenosisWizard/write/write.tcl index 87cbdef60..efdbac8f2 100644 --- a/kratos.gid/apps/StenosisWizard/write/write.tcl +++ b/kratos.gid/apps/StenosisWizard/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::StenosisWizard::write { namespace path ::StenosisWizard + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl index 864fe6541..9d047bed3 100644 --- a/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl +++ b/kratos.gid/apps/StenosisWizard/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::StenosisWizard::xml { namespace path ::StenosisWizard + Kratos::AddNamespace [namespace current] } proc StenosisWizard::xml::Init { } { diff --git a/kratos.gid/apps/Stent/start.tcl b/kratos.gid/apps/Stent/start.tcl index a16cd9982..4f9b994bf 100644 --- a/kratos.gid/apps/Stent/start.tcl +++ b/kratos.gid/apps/Stent/start.tcl @@ -1,4 +1,6 @@ namespace eval ::Stent { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable app_id diff --git a/kratos.gid/apps/Stent/wizard/StentGeometry.tcl b/kratos.gid/apps/Stent/wizard/StentGeometry.tcl index 30262d922..0bde434dd 100644 --- a/kratos.gid/apps/Stent/wizard/StentGeometry.tcl +++ b/kratos.gid/apps/Stent/wizard/StentGeometry.tcl @@ -1,5 +1,7 @@ namespace eval ::Stent::Wizard { namespace path ::Stent + Kratos::AddNamespace [namespace current] + # Namespace variables declaration variable curr_win diff --git a/kratos.gid/apps/Stent/write/write.tcl b/kratos.gid/apps/Stent/write/write.tcl index 46a16650d..7e5a9623a 100644 --- a/kratos.gid/apps/Stent/write/write.tcl +++ b/kratos.gid/apps/Stent/write/write.tcl @@ -1,4 +1,7 @@ -namespace eval Stent::write { } +namespace eval ::Stent::write { + namespace path ::Stent + Kratos::AddNamespace [namespace current] + } proc Stent::write::Init { } { } diff --git a/kratos.gid/apps/Stent/xml/XmlController.tcl b/kratos.gid/apps/Stent/xml/XmlController.tcl index 64a309a5d..f4c4ff587 100644 --- a/kratos.gid/apps/Stent/xml/XmlController.tcl +++ b/kratos.gid/apps/Stent/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::Stent::xml { namespace path ::Stent + Kratos::AddNamespace [namespace current] } proc Stent::xml::Init { } { diff --git a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl index b7ceef544..f449621e6 100644 --- a/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl +++ b/kratos.gid/apps/Structural/examples/HighRiseBuilding.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::examples::HighRiseBuilding { namespace path ::Structural::examples + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl index 46efac698..e1da6b08f 100644 --- a/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl +++ b/kratos.gid/apps/Structural/examples/IncompressibleCookMembrane.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::examples::IncompressibleCookMembrane { namespace path ::Structural::examples + Kratos::AddNamespace [namespace current] } proc ::Structural::examples::IncompressibleCookMembrane::Init {args} { diff --git a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl index 1b1f56378..fc7eeb92d 100644 --- a/kratos.gid/apps/Structural/examples/TrussCantilever.tcl +++ b/kratos.gid/apps/Structural/examples/TrussCantilever.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::examples::TrussCantilever { namespace path ::Structural::examples + Kratos::AddNamespace [namespace current] } proc ::Structural::examples::TrussCantilever::Init {args} { diff --git a/kratos.gid/apps/Structural/examples/examples.tcl b/kratos.gid/apps/Structural/examples/examples.tcl index 420961dfd..da1da84b0 100644 --- a/kratos.gid/apps/Structural/examples/examples.tcl +++ b/kratos.gid/apps/Structural/examples/examples.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::examples { namespace path ::Structural + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Structural/postprocess/formfinding.tcl b/kratos.gid/apps/Structural/postprocess/formfinding.tcl index 355147526..57e09dda8 100644 --- a/kratos.gid/apps/Structural/postprocess/formfinding.tcl +++ b/kratos.gid/apps/Structural/postprocess/formfinding.tcl @@ -1,6 +1,7 @@ namespace eval ::Structural::Formfinding { namespace path ::Structural + Kratos::AddNamespace [namespace current] } diff --git a/kratos.gid/apps/Structural/start.tcl b/kratos.gid/apps/Structural/start.tcl index 10b29d431..bd791418c 100644 --- a/kratos.gid/apps/Structural/start.tcl +++ b/kratos.gid/apps/Structural/start.tcl @@ -1,4 +1,6 @@ namespace eval ::Structural { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable _app diff --git a/kratos.gid/apps/Structural/write/write.tcl b/kratos.gid/apps/Structural/write/write.tcl index 112206369..7af56fa63 100644 --- a/kratos.gid/apps/Structural/write/write.tcl +++ b/kratos.gid/apps/Structural/write/write.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::write { namespace path ::Structural + Kratos::AddNamespace [namespace current] variable ConditionsDictGroupIterators variable NodalConditionsGroup diff --git a/kratos.gid/apps/Structural/xml/XmlController.tcl b/kratos.gid/apps/Structural/xml/XmlController.tcl index 9f471677b..6168ff5b4 100644 --- a/kratos.gid/apps/Structural/xml/XmlController.tcl +++ b/kratos.gid/apps/Structural/xml/XmlController.tcl @@ -1,5 +1,6 @@ namespace eval ::Structural::xml { namespace path ::Structural + Kratos::AddNamespace [namespace current] } proc ::Structural::xml::Init { } { diff --git a/kratos.gid/apps/ThermicLauncher/start.tcl b/kratos.gid/apps/ThermicLauncher/start.tcl index 4ac929ddd..518a878d8 100644 --- a/kratos.gid/apps/ThermicLauncher/start.tcl +++ b/kratos.gid/apps/ThermicLauncher/start.tcl @@ -1,4 +1,6 @@ namespace eval ::ThermicLauncher { + Kratos::AddNamespace [namespace current] + variable available_apps } diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 29417b49e..bc5dee9d2 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -10,6 +10,7 @@ namespace eval ::Kratos { variable must_exist_calc_data variable tmp_init_mesh_time + variable namespaces } # Hard minimum GiD Version is 14 @@ -168,6 +169,9 @@ proc Kratos::InitGlobalVariables {dir} { set kratos_private(ProjectIsNew) 1 # Variables from the problemtype definition (kratos.xml) array set kratos_private [ReadProblemtypeXml [file join $kratos_private(Path) kratos.xml] Infoproblemtype {Name Version CheckMinimumGiDVersion}] + + variable namespaces + set namespaces [list ] } proc Kratos::LoadCommonScripts { } { @@ -300,8 +304,12 @@ proc Kratos::Event_EndProblemtype { } { # Clear private global variable unset -nocomplain ::Kratos::kratos_private + } Drawer::UnregisterAll + + # Clear namespaces + Kratos::DestroyNamespaces } @@ -552,3 +560,18 @@ proc Kratos::Quicktest {example_app example_dim example_cmd} { # And close the windows Kratos::DestroyWindows } + +proc Kratos::AddNamespace { namespace_name } { + variable namespaces + lappend namespaces $namespace_name + +} + +proc Kratos::DestroyNamespaces { } { + variable namespaces + + foreach name $namespaces { + catch {namespace delete $name} + } + uplevel #0 [list namespace delete ::Kratos] +} \ No newline at end of file diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 214d15c52..ecdccf2a3 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -4,6 +4,8 @@ ################################################################################## namespace eval ::apps { + Kratos::AddNamespace [namespace current] + variable activeApp variable appList } diff --git a/kratos.gid/scripts/Controllers/Drawer.tcl b/kratos.gid/scripts/Controllers/Drawer.tcl index bb4c326f3..41165817a 100644 --- a/kratos.gid/scripts/Controllers/Drawer.tcl +++ b/kratos.gid/scripts/Controllers/Drawer.tcl @@ -1,4 +1,6 @@ namespace eval ::Drawer { + Kratos::AddNamespace [namespace current] + variable registered_procs variable vars } diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 185ca2e54..5c6cf70e5 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -1,4 +1,6 @@ namespace eval ::Examples { + Kratos::AddNamespace [namespace current] + # Variable declaration variable dir variable doc diff --git a/kratos.gid/scripts/Model/Condition.tcl b/kratos.gid/scripts/Model/Condition.tcl index d1663ee51..7a0b01b1a 100644 --- a/kratos.gid/scripts/Model/Condition.tcl +++ b/kratos.gid/scripts/Model/Condition.tcl @@ -4,6 +4,8 @@ ################################################################################## namespace eval ::Model { + Kratos::AddNamespace [namespace current] + catch {Condition destroy} oo::class create Condition { superclass Entity diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index ff2933fc2..a3b9c5033 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -5,6 +5,8 @@ ################################################################################## namespace eval ::write { + Kratos::AddNamespace [namespace current] + variable mat_dict variable submodelparts variable MDPA_loop_control diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 37753bca1..6e37c8a23 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -4,8 +4,9 @@ ################################################################################## namespace eval ::spdAux { + Kratos::AddNamespace [namespace current] + # Namespace variables declaration - variable uniqueNames variable initwind From a0956d3cd30105e6642475e20c2e325a54e5289b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 10 Sep 2021 23:42:09 +0200 Subject: [PATCH 390/556] DEM overwrite problem fixed --- kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl | 6 +----- kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl | 14 +++++++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl index 6ff27caa9..b048448d4 100644 --- a/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/CDEM/write/writeMDPA_Parts.tcl @@ -10,11 +10,7 @@ proc DEM::write::WriteMDPAParts { } { DEM::write::writeMaterialsParts # Nodal coordinates (only for DEM Parts ) - write::writeNodalCoordinatesOnParts - write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart] - write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsInitialC] - write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundaryC] - write::writeNodalCoordinatesOnGroups [DEM::write::GetNodesForGraphs] + WriteNodalCoordinatesParts # Element connectivities write::writeElementConnectivities diff --git a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl index 18a848bc5..f4229fd40 100644 --- a/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl +++ b/kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl @@ -9,11 +9,7 @@ proc ::DEM::write::WriteMDPAParts { } { writeMaterialsParts # Nodal coordinates (only for DEM Parts ) - write::writeNodalCoordinatesOnParts - write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart] - write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC] - write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundaryC] - write::writeNodalCoordinatesOnGroups [GetNodesForGraphs] + WriteNodalCoordinatesParts # Element connectivities (Groups on Parts) PrepareCustomMeshedParts @@ -31,6 +27,14 @@ proc ::DEM::write::WriteMDPAParts { } { WriteCustomDEMSmp } +proc ::DEM::write::WriteNodalCoordinatesParts { } { + write::writeNodalCoordinatesOnParts + write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart] + write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC] + write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundaryC] + write::writeNodalCoordinatesOnGroups [GetNodesForGraphs] +} + proc ::DEM::write::GetDEMGroupNamesCustomSubmodelpart { } { set groups [list ] From ae53912fb4db9081087acb64361f9dde9a44a862 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 11:52:30 +0200 Subject: [PATCH 391/556] Enables the description --- kratos.gid/apps/DEMLauncher/start.tcl | 22 ++++++--- kratos.gid/apps/Fluid/app.json | 3 +- kratos.gid/apps/FluidLauncher/start.tcl | 22 ++++++--- kratos.gid/apps/PfemLauncher/start.tcl | 21 +++++--- kratos.gid/apps/ThermicLauncher/app.json | 3 +- kratos.gid/apps/ThermicLauncher/start.tcl | 24 ++++++---- kratos.gid/kratos_default.spd | 1 - kratos.gid/scripts/Applications.tcl | 48 ++++++++++--------- .../Controllers/ApplicationMarketWindow.tcl | 46 +++++++++++++----- 9 files changed, 124 insertions(+), 66 deletions(-) diff --git a/kratos.gid/apps/DEMLauncher/start.tcl b/kratos.gid/apps/DEMLauncher/start.tcl index 8f35a2cab..bc8b9b313 100644 --- a/kratos.gid/apps/DEMLauncher/start.tcl +++ b/kratos.gid/apps/DEMLauncher/start.tcl @@ -28,7 +28,7 @@ proc ::DemLauncher::AppSelectorWindow { } { } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait - set initwind .gid.win_dem_launcher + set initwind $::spdAux::application_window_id spdAux::DestroyWindows spdAux::RegisterWindow $initwind toplevel $initwind @@ -47,21 +47,29 @@ proc ::DemLauncher::AppSelectorWindow { } { ttk::frame $w.top ttk::label $w.top.title_text -text [_ "Select a DEM application"] - ttk::frame $w.information -relief ridge + ttk::frame $w.applications -relief ridge set i 0 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] - set but [ttk::button $w.information.img$app -image $img -command [list ::DemLauncher::ChangeAppTo $app] ] - ttk::label $w.information.text$app -text $app_publicname - grid $w.information.img$app -column $i -row 0 - grid $w.information.text$app -column $i -row 1 + set but [ttk::button $w.applications.img$app -image $img -command [list ::DemLauncher::ChangeAppTo $app] ] + bind $w.applications.img$app {::spdAux::PlaceInformationWindowByPath %W applications} + ttk::label $w.applications.text$app -text $app_publicname + grid $w.applications.img$app -column $i -row 0 + grid $w.applications.text$app -column $i -row 1 incr i } grid $w.top grid $w.top.title_text - grid $w.information + grid $w.applications + + # Information panel + set spdAux::info_main_window_text "" + ttk::labelframe $w.info -text " Information " -relief ridge + ttk::label $w.info.text -textvariable spdAux::info_main_window_text + grid $w.info.text + grid $w.info -sticky we } } diff --git a/kratos.gid/apps/Fluid/app.json b/kratos.gid/apps/Fluid/app.json index 08a8e0754..f60ece17e 100644 --- a/kratos.gid/apps/Fluid/app.json +++ b/kratos.gid/apps/Fluid/app.json @@ -45,5 +45,6 @@ "output_model_part_name": "fluid_computational_model_part" }, "main_launch_file": "python/MainKratos.py", - "examples": "examples/examples.xml" + "examples": "examples/examples.xml", + "description": "" } diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index fb2eb7024..2a80afa3b 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -25,7 +25,7 @@ proc ::FluidLauncher::FluidAppSelectorWindow { } { } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait - set initwind .gid.win_fluid_launcher + set initwind $::spdAux::application_window_id spdAux::DestroyWindows spdAux::RegisterWindow $initwind if { [ winfo exist $initwind]} { @@ -47,24 +47,32 @@ proc ::FluidLauncher::FluidAppSelectorWindow { } { ttk::frame $w.top ttk::label $w.top.title_text -text [_ "Select a fluid application"] - ttk::frame $w.information -relief ridge + ttk::frame $w.applications -relief ridge set r 0 set c 0 set max_cols 3 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] - set but [ttk::button $w.information.img$app -image $img -command [list ::FluidLauncher::ChangeAppTo $app] ] - ttk::label $w.information.text$app -text $app_publicname - grid $w.information.img$app -column $r -row $c - grid $w.information.text$app -column $r -row [expr $c + 1] + set but [ttk::button $w.applications.img$app -image $img -command [list ::FluidLauncher::ChangeAppTo $app] ] + bind $w.applications.img$app {::spdAux::PlaceInformationWindowByPath %W applications} + ttk::label $w.applications.text$app -text $app_publicname + grid $w.applications.img$app -column $r -row $c + grid $w.applications.text$app -column $r -row [expr $c + 1] incr r if {$r >= $max_cols} {incr c 2; set r 0} } grid $w.top grid $w.top.title_text - grid $w.information + grid $w.applications + + # Information panel + set spdAux::info_main_window_text "" + ttk::labelframe $w.info -text " Information " -relief ridge + ttk::label $w.info.text -textvariable spdAux::info_main_window_text + grid $w.info.text + grid $w.info -sticky we } } diff --git a/kratos.gid/apps/PfemLauncher/start.tcl b/kratos.gid/apps/PfemLauncher/start.tcl index 365d8a424..24589cf17 100644 --- a/kratos.gid/apps/PfemLauncher/start.tcl +++ b/kratos.gid/apps/PfemLauncher/start.tcl @@ -27,7 +27,7 @@ proc ::PfemLauncher::AppSelectorWindow { } { } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait - set initwind .gid.win_pfem_launcher + set initwind $::spdAux::application_window_id spdAux::DestroyWindows spdAux::RegisterWindow $initwind toplevel $initwind @@ -46,21 +46,28 @@ proc ::PfemLauncher::AppSelectorWindow { } { ttk::frame $w.top ttk::label $w.top.title_text -text [_ "Select a pfem application"] - ttk::frame $w.information -relief ridge + ttk::frame $w.applications -relief ridge set i 0 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] - set but [ttk::button $w.information.img$app -image $img -command [list ::PfemLauncher::ChangeAppTo $app] ] - ttk::label $w.information.text$app -text $app_publicname - grid $w.information.img$app -column $i -row 0 - grid $w.information.text$app -column $i -row 1 + set but [ttk::button $w.applications.img$app -image $img -command [list ::PfemLauncher::ChangeAppTo $app] ] + bind $w.applications.img$app {::spdAux::PlaceInformationWindowByPath %W applications} + ttk::label $w.applications.text$app -text $app_publicname + grid $w.applications.img$app -column $i -row 0 + grid $w.applications.text$app -column $i -row 1 incr i } grid $w.top grid $w.top.title_text + grid $w.applications - grid $w.information + # Information panel + set spdAux::info_main_window_text "" + ttk::labelframe $w.info -text " Information " -relief ridge + ttk::label $w.info.text -textvariable spdAux::info_main_window_text + grid $w.info.text + grid $w.info -sticky we } } diff --git a/kratos.gid/apps/ThermicLauncher/app.json b/kratos.gid/apps/ThermicLauncher/app.json index d81886c69..d55cc7de0 100644 --- a/kratos.gid/apps/ThermicLauncher/app.json +++ b/kratos.gid/apps/ThermicLauncher/app.json @@ -14,5 +14,6 @@ "show_toolbar": true, "intervals": false, "wizard": false - } + }, + "description": "Thermal applications \n-Convection diffusion\n-Buoyancy\n-Conjugate heat transfer" } diff --git a/kratos.gid/apps/ThermicLauncher/start.tcl b/kratos.gid/apps/ThermicLauncher/start.tcl index 518a878d8..f58e460a9 100644 --- a/kratos.gid/apps/ThermicLauncher/start.tcl +++ b/kratos.gid/apps/ThermicLauncher/start.tcl @@ -15,7 +15,6 @@ proc ::ThermicLauncher::Init { app } { proc ::ThermicLauncher::AppSelectorWindow { } { variable available_apps - set initwind $::spdAux::initwind set root [customlib::GetBaseRoot] set nd [ [$root selectNodes "value\[@n='nDim'\]"] getAttribute v] @@ -26,7 +25,7 @@ proc ::ThermicLauncher::AppSelectorWindow { } { } { [$root selectNodes "value\[@n='nDim'\]"] setAttribute v wait - set initwind .gid.win_thermic_launcher + set initwind $::spdAux::application_window_id spdAux::DestroyWindows spdAux::RegisterWindow $initwind toplevel $initwind @@ -45,21 +44,30 @@ proc ::ThermicLauncher::AppSelectorWindow { } { ttk::frame $w.top ttk::label $w.top.title_text -text [_ "Select a Thermic application"] - ttk::frame $w.information -relief ridge + ttk::frame $w.applications -relief ridge set i 0 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] - set but [ttk::button $w.information.img$app -image $img -command [list ::ThermicLauncher::ChangeAppTo $app] ] - ttk::label $w.information.text$app -text $app_publicname - grid $w.information.img$app -column $i -row 0 - grid $w.information.text$app -column $i -row 1 + set but [ttk::button $w.applications.img$app -image $img -command [list ::ThermicLauncher::ChangeAppTo $app] ] + bind $w.applications.img$app {::spdAux::PlaceInformationWindowByPath %W applications} + ttk::label $w.applications.text$app -text $app_publicname + grid $w.applications.img$app -column $i -row 0 + grid $w.applications.text$app -column $i -row 1 incr i } grid $w.top grid $w.top.title_text - grid $w.information + grid $w.applications + + # Information panel + set spdAux::info_main_window_text "" + ttk::labelframe $w.info -text " Information " -relief ridge + ttk::label $w.info.text -textvariable spdAux::info_main_window_text + grid $w.info.text + grid $w.info -sticky we + } } diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index e77990122..66c720b92 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -19,7 +19,6 @@ - diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index ecdccf2a3..448a448e0 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -247,6 +247,7 @@ oo::class create App { set is_tool 0 set properties [dict create ] + apps::LoadAppProperties [self] } method activate { } {apps::ActivateApp_do [self]} @@ -299,39 +300,40 @@ oo::class create App { method getWriteProperty {n} {variable properties; if {[dict exists $properties write $n]} {return [dict get $properties write $n]} } method getWriteProperties {} {variable properties; return [dict get $properties write} } -proc apps::ActivateApp_do {app} { - # set ::Kratos::must_quit 0 - set app_name [$app getName] - set dir [file join $::Kratos::kratos_private(Path) apps $app_name] + +proc apps::LoadAppProperties {app} { + set dir [file join $::Kratos::kratos_private(Path) apps [$app getName]] set app_definition_file [file join $dir app.json] if {[file exists $app_definition_file]} { set props [Kratos::ReadJsonDict $app_definition_file] $app setProperties $props + } else { + W "MISSING app.json file for app [$app getName]" + } +} - # Load app dependences - if {[dict exists $props requeriments apps]} { - foreach app_id [dict get $props requeriments apps] { - apps::LoadAppById $app_id - } +proc apps::ActivateApp_do {app} { + set dir [file join $::Kratos::kratos_private(Path) apps [$app getName]] + # Load app dependences + if {[dict exists [$app getProperty requeriments] apps]} { + foreach app_id [dict get [$app getProperty requeriments] apps] { + apps::LoadAppById $app_id } + } - # Then load the app files, so we can overwrite functions loaded in dependences - if {[dict exists $props script_files]} { - foreach source_file [dict get $props script_files] { - set fileName [file join $dir $source_file] - apps::loadAppFile $fileName - } + # Then load the app files, so we can overwrite functions loaded in dependences + if {[$app getProperty script_files] ne ""} { + foreach source_file [$app getProperty script_files] { + set fileName [file join $dir $source_file] + apps::loadAppFile $fileName } - - if {[dict exists $props permissions wizard]} {if {[write::isBooleanTrue [dict get $props permissions wizard]]} { Kratos::LoadWizardFiles }} - if {[dict exists $props start_script]} {eval [dict get $props start_script] $app} - apps::ApplyAppPreferences $app - } else { - W "MISSING app.json file for app $app_name" - set fileName [file join $dir start.tcl] - apps::loadAppFile $fileName } + if {[write::isBooleanTrue [$app getPermission wizard]]} { Kratos::LoadWizardFiles } + if {[$app getProperty start_script] ne ""} {eval [$app getProperty start_script] $app} + apps::ApplyAppPreferences $app + + if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { set gid_groups_conds::imagesdirList [lsearch -all -inline -not -exact $gid_groups_conds::imagesdirList [list [file join $dir images]]] gid_groups_conds::add_images_dir [file join $dir images Black] diff --git a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl index f1d17a2c5..04a4f4391 100644 --- a/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl +++ b/kratos.gid/scripts/Controllers/ApplicationMarketWindow.tcl @@ -1,7 +1,14 @@ +namespace eval ::spdAux { + variable info_main_window_text + variable application_window_id + set application_window_id .gid.win_app_selection +} + proc spdAux::CreateWindow {} { variable initwind variable must_open_init_window + variable application_window_id # No graphics, no window if { [GidUtils::IsTkDisabled] } { @@ -16,7 +23,7 @@ proc spdAux::CreateWindow {} { # Window creation - set w .gid.win_app_selection + set w $application_window_id set initwind $w # Close everything else gid_groups_conds::close_all_windows @@ -35,7 +42,7 @@ proc spdAux::CreateWindow {} { spdAux::RegisterWindow $initwind # List of applications -> by family - ttk::labelframe $w.information -text " Applications " -relief ridge + ttk::labelframe $w.applications -text " Applications " -relief ridge set appsid [::apps::getAllApplicationsID 0] set appspn [::apps::getAllApplicationsName 0] @@ -45,12 +52,14 @@ proc spdAux::CreateWindow {} { foreach appname $appspn appid $appsid { if {[apps::isPublic $appid]} { set img [::apps::getImgFrom $appid] - ttk::button $w.information.img$appid -image $img -command [list apps::setActiveApp $appid] - ttk::label $w.information.text$appid -text $appname + ttk::button $w.applications.img$appid -image $img -command [list apps::setActiveApp $appid] + ttk::label $w.applications.text$appid -text $appname - grid $w.information.img$appid -column $col -row $row - grid $w.information.text$appid -column $col -row [expr $row +1] + grid $w.applications.img$appid -column $col -row $row + grid $w.applications.text$appid -column $col -row [expr $row +1] + bind $w.applications.img$appid {::spdAux::PlaceInformationWindowByPath %W applications} + incr col if {$col >= 5} {set col 0; incr row; incr row} } @@ -65,12 +74,14 @@ proc spdAux::CreateWindow {} { foreach toolname $toolspn toolid $toolsid { if {[apps::isPublic $toolid]} { set img [::apps::getImgFrom $toolid] - ttk::button $w.tools.img$toolid -image $img -command [list apps::setActiveApp $toolid] + set img_button $w.tools.img$toolid + ttk::button $img_button -image $img -command [list apps::setActiveApp $toolid] ttk::label $w.tools.text$toolid -text $toolname - grid $w.tools.img$toolid -column $col -row $row + grid $img_button -column $col -row $row grid $w.tools.text$toolid -column $col -row [expr $row +1] - + bind $w.tools.img$toolid {::spdAux::PlaceInformationWindowByPath %W tools} + incr col if {$col >= 5} {set col 0; incr row; incr row} } @@ -89,6 +100,11 @@ proc spdAux::CreateWindow {} { if {$col >= 5} {set col 0; incr row; incr row} } + # Information panel + ttk::labelframe $w.info -text " Information " -relief ridge + ttk::label $w.info.text -textvariable spdAux::info_main_window_text + grid $w.info.text + # Settings set settings_path [file nativename [file join $::Kratos::kratos_private(Path) images "settings.png"] ] set img [gid_themes::GetImage $settings_path Kratos] @@ -100,12 +116,20 @@ proc spdAux::CreateWindow {} { incr col if {$col >= 5} {set col 0; incr row; incr row} - grid $w.top # grid $w.top.title_text - grid $w.information + grid $w.applications grid $w.tools -columnspan 5 -sticky w + grid $w.info -columnspan 5 -sticky we +} + +proc spdAux::PlaceInformationWindowByPath {win_path what} { + variable application_window_id + set app_id [string trimleft $win_path $application_window_id.$what.img] + set app [::apps::getAppById $app_id] + set description [$app getProperty description] + set ::spdAux::info_main_window_text $description } proc spdAux::DestroyInitWindow { } { From 7e997a94565e523e3803471233e4ac3175a10b33 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 12:18:24 +0200 Subject: [PATCH 392/556] Description in example --- kratos.gid/apps/Fluid/examples/examples.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/Fluid/examples/examples.xml b/kratos.gid/apps/Fluid/examples/examples.xml index 21434f7f4..e48998a8b 100644 --- a/kratos.gid/apps/Fluid/examples/examples.xml +++ b/kratos.gid/apps/Fluid/examples/examples.xml @@ -1,6 +1,8 @@ - + + + \ No newline at end of file From 46f983252b8556be62cba28eff4a437d6dfe7612 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 12:34:28 +0200 Subject: [PATCH 393/556] remove unused prefix --- kratos.gid/apps/FluidDEM/app.json | 2 +- kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl | 1 - kratos.gid/apps/FluidDEM/xml/Main.spd | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/app.json b/kratos.gid/apps/FluidDEM/app.json index 97a7048e5..e49db79b5 100644 --- a/kratos.gid/apps/FluidDEM/app.json +++ b/kratos.gid/apps/FluidDEM/app.json @@ -1,7 +1,7 @@ { "id": "FluidDEM", "name": "Swimming DEM", - "prefix": "FluidDEM_", + "prefix": "DEM", "themed": false, "kratos_name": "FluidDEMapplication", "dimensions": [ diff --git a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl index f3d803764..112c288cc 100644 --- a/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/FluidDEM/write/writeProjectParameters.tcl @@ -21,7 +21,6 @@ proc ::FluidDEM::write::getParametersDict { } { # Problem data - calling directly GetDefaultProblemDataDict should be enough dict set project_parameters_dict problem_data [write::GetDefaultProblemDataDict [::Fluid::GetAttribute id]] - #set do_print_results_option [write::getValue FluidDEM_GeneralParameters PrintResults] dict set project_parameters_dict "do_print_results_option" true # coupling FDEMCoupling diff --git a/kratos.gid/apps/FluidDEM/xml/Main.spd b/kratos.gid/apps/FluidDEM/xml/Main.spd index 4704ec622..705fefe45 100644 --- a/kratos.gid/apps/FluidDEM/xml/Main.spd +++ b/kratos.gid/apps/FluidDEM/xml/Main.spd @@ -1,6 +1,6 @@ - + @@ -25,7 +25,7 @@ - + From f4860496ff459bbb61e124d7f80215a4ba1d4a93 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 12:39:46 +0200 Subject: [PATCH 394/556] Validation --- kratos.gid/apps/FluidDEM/write/write.tcl | 5 +++++ kratos.gid/scripts/spdAuxiliar.tcl | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 8626dbfcd..0e35e5d4b 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -17,6 +17,7 @@ proc ::FluidDEM::write::Init { } { # Events proc FluidDEM::write::writeModelPartEvent { } { + Validate set filename [Kratos::GetModelName] Fluid::write::Init @@ -30,6 +31,10 @@ proc FluidDEM::write::writeModelPartEvent { } { write::writeAppMDPA DEM } +proc FluidDEM::write::Validate { } { + if {[GiD_Info mesh] eq 0} {[error "Model not meshed"]} +} + proc FluidDEM::write::writeCustomFilesEvent { } { FluidDEM::write::WriteMaterialsFile write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 6e37c8a23..2bff91642 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -77,7 +77,7 @@ proc spdAux::TryRefreshTree { } { } set ::spdAux::refreshTreeTurn 0 } - after 750 {spdAux::TryRefreshTree} + after 750 {catch {spdAux::TryRefreshTree}} } proc spdAux::OpenTree { } { @@ -92,7 +92,7 @@ proc spdAux::OpenTree { } { proc spdAux::EndRefreshTree { } { variable refreshTreeTurn set refreshTreeTurn 0 - after cancel {spdAux::TryRefreshTree} + after cancel {catch {spdAux::TryRefreshTree}} } # Includes From 9bd25718f6dbd5bec2a6fe27a21a0d68fa1d3996 Mon Sep 17 00:00:00 2001 From: Eduard Gomez Date: Mon, 13 Sep 2021 12:44:37 +0200 Subject: [PATCH 395/556] Fixed error --- kratos.gid/apps/Common/xml/Processes.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/Common/xml/Processes.xml b/kratos.gid/apps/Common/xml/Processes.xml index 6143ebe09..366d7cd4b 100644 --- a/kratos.gid/apps/Common/xml/Processes.xml +++ b/kratos.gid/apps/Common/xml/Processes.xml @@ -44,7 +44,7 @@ - + From 6d985b4f28353484603cf21a56effe229b361ffb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 14:45:56 +0200 Subject: [PATCH 396/556] Text also in examples --- .../apps/Buoyancy/examples/examples.xml | 4 +- kratos.gid/apps/CDEM/examples/examples.xml | 8 +++- .../examples/examples.xml | 12 +++-- .../ConvectionDiffusion/examples/examples.xml | 4 +- kratos.gid/apps/DEM/examples/examples.xml | 8 +++- kratos.gid/apps/DEMPFEM/examples/examples.xml | 8 +++- kratos.gid/apps/Dam/examples/examples.xml | 8 +++- .../apps/EmbeddedFluid/examples/examples.xml | 4 +- kratos.gid/apps/FSI/examples/examples.xml | 48 ++++++++++++++----- kratos.gid/apps/Fluid/examples/examples.xml | 13 ++++- .../apps/FluidDEM/examples/examples.xml | 16 +++++-- kratos.gid/apps/MPM/examples/examples.xml | 4 +- .../apps/PfemFluid/examples/examples.xml | 8 +++- .../apps/PfemThermic/examples/examples.xml | 24 +++++++--- .../apps/PotentialFluid/examples/examples.xml | 8 +++- .../apps/Structural/examples/examples.xml | 20 ++++++-- .../scripts/Controllers/ExamplesWindow.tcl | 33 ++++++++++++- 17 files changed, 181 insertions(+), 49 deletions(-) diff --git a/kratos.gid/apps/Buoyancy/examples/examples.xml b/kratos.gid/apps/Buoyancy/examples/examples.xml index da2c4ef50..8d8fa9641 100644 --- a/kratos.gid/apps/Buoyancy/examples/examples.xml +++ b/kratos.gid/apps/Buoyancy/examples/examples.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/kratos.gid/apps/CDEM/examples/examples.xml b/kratos.gid/apps/CDEM/examples/examples.xml index 67a99f1f7..7b3b74a15 100644 --- a/kratos.gid/apps/CDEM/examples/examples.xml +++ b/kratos.gid/apps/CDEM/examples/examples.xml @@ -1,5 +1,9 @@ - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml index 8bb5bdba4..e6ccdce49 100644 --- a/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml +++ b/kratos.gid/apps/ConjugateHeatTransfer/examples/examples.xml @@ -1,6 +1,12 @@ - - - + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml index eb6f7b2ef..69eb772c9 100644 --- a/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml +++ b/kratos.gid/apps/ConvectionDiffusion/examples/examples.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEM/examples/examples.xml b/kratos.gid/apps/DEM/examples/examples.xml index c93a86412..46c1e3be8 100644 --- a/kratos.gid/apps/DEM/examples/examples.xml +++ b/kratos.gid/apps/DEM/examples/examples.xml @@ -1,5 +1,9 @@ - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/DEMPFEM/examples/examples.xml b/kratos.gid/apps/DEMPFEM/examples/examples.xml index 4012c9d45..a85f04e7e 100644 --- a/kratos.gid/apps/DEMPFEM/examples/examples.xml +++ b/kratos.gid/apps/DEMPFEM/examples/examples.xml @@ -1,9 +1,13 @@ - + + + - + + + \ No newline at end of file diff --git a/kratos.gid/apps/Dam/examples/examples.xml b/kratos.gid/apps/Dam/examples/examples.xml index ce9241302..520fd7423 100644 --- a/kratos.gid/apps/Dam/examples/examples.xml +++ b/kratos.gid/apps/Dam/examples/examples.xml @@ -1,5 +1,9 @@ - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml index c6ac00859..996947bdd 100644 --- a/kratos.gid/apps/EmbeddedFluid/examples/examples.xml +++ b/kratos.gid/apps/EmbeddedFluid/examples/examples.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/kratos.gid/apps/FSI/examples/examples.xml b/kratos.gid/apps/FSI/examples/examples.xml index 5166d81c6..f9a5ae56d 100644 --- a/kratos.gid/apps/FSI/examples/examples.xml +++ b/kratos.gid/apps/FSI/examples/examples.xml @@ -1,21 +1,45 @@ - - - - + + + + + + + + + + + + - - - - + + + + + + + + + + + + - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Fluid/examples/examples.xml b/kratos.gid/apps/Fluid/examples/examples.xml index e48998a8b..e82672af6 100644 --- a/kratos.gid/apps/Fluid/examples/examples.xml +++ b/kratos.gid/apps/Fluid/examples/examples.xml @@ -1,8 +1,17 @@ + This example applies an inlet condition to the air surrounding a 2D building. + The default mesh is made of 4.000 trianglular elements, and the calculation generates results for 800 timesteps. + - Size of model: 0.4 MB + - Time: Avg calulation time: < 2 minutes + - Size with results: 250 MB + + + + + + - - \ No newline at end of file diff --git a/kratos.gid/apps/FluidDEM/examples/examples.xml b/kratos.gid/apps/FluidDEM/examples/examples.xml index 732a35b2b..70e8b5019 100644 --- a/kratos.gid/apps/FluidDEM/examples/examples.xml +++ b/kratos.gid/apps/FluidDEM/examples/examples.xml @@ -1,11 +1,19 @@ - - + + + + - - + + + + \ No newline at end of file diff --git a/kratos.gid/apps/MPM/examples/examples.xml b/kratos.gid/apps/MPM/examples/examples.xml index 0fa688af0..dbd426f99 100644 --- a/kratos.gid/apps/MPM/examples/examples.xml +++ b/kratos.gid/apps/MPM/examples/examples.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemFluid/examples/examples.xml b/kratos.gid/apps/PfemFluid/examples/examples.xml index ed0ba3485..d67b53d76 100644 --- a/kratos.gid/apps/PfemFluid/examples/examples.xml +++ b/kratos.gid/apps/PfemFluid/examples/examples.xml @@ -1,7 +1,11 @@ - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/examples/examples.xml b/kratos.gid/apps/PfemThermic/examples/examples.xml index 0f6008c13..4590c5b40 100644 --- a/kratos.gid/apps/PfemThermic/examples/examples.xml +++ b/kratos.gid/apps/PfemThermic/examples/examples.xml @@ -1,11 +1,23 @@ - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/PotentialFluid/examples/examples.xml b/kratos.gid/apps/PotentialFluid/examples/examples.xml index b09e8c64b..55a559643 100644 --- a/kratos.gid/apps/PotentialFluid/examples/examples.xml +++ b/kratos.gid/apps/PotentialFluid/examples/examples.xml @@ -1,5 +1,9 @@ - - + + + + + + \ No newline at end of file diff --git a/kratos.gid/apps/Structural/examples/examples.xml b/kratos.gid/apps/Structural/examples/examples.xml index 618170084..dc226be6f 100644 --- a/kratos.gid/apps/Structural/examples/examples.xml +++ b/kratos.gid/apps/Structural/examples/examples.xml @@ -1,9 +1,19 @@ - - - - - + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index 5c6cf70e5..f601977f9 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -10,6 +10,8 @@ namespace eval ::Examples { variable _canvas_scroll variable _canvas_scroll_w + + variable info_main_window_text } proc Examples::Init { } { @@ -77,7 +79,7 @@ proc Examples::StartWindow { {filter ""} } { set _canvas_scroll $fcenter set _canvas_scroll_w $examples_window.center AddToScrolledCanvas $examples_window.center $fcenter - grid $examples_window.center -sticky nsew + grid $examples_window.center -row 0 -column 0 -sticky nsew set Examples::filter_entry $filter set filter_txt [ttk::label $fcenter.filter_text -text [_ "Search an example:"]] @@ -85,6 +87,12 @@ proc Examples::StartWindow { {filter ""} } { set filter_btn [ttk::button $fcenter.filter_button -text "Filter" -command [list Examples::PrintGroups]] grid $filter_txt $filter_ent $filter_btn -sticky ew + # Information panel + ttk::labelframe $examples_window.info -text " Information " -relief ridge + ttk::label $examples_window.info.text -textvariable Examples::info_main_window_text + grid $examples_window.info.text + grid $examples_window.info -sticky ew + set groups [GetGroupsFromXML] PrintGroups @@ -128,6 +136,8 @@ proc Examples::PrintGroups { } { grid $buttons_frame.title$example_id -column $col -row [expr $row +1] grid $buttons_frame.text$example_id -column $col -row [expr $row +2] + bind $buttons_frame.img$example_id {::Examples::PlaceInformationWindowByPath %W} + incr col if {$col >= 4} {set col 0; incr row; incr row; incr row} } @@ -147,6 +157,26 @@ proc Examples::PrintGroups { } { ResizeScrolledCanvas $_canvas_scroll_w } +proc Examples::PlaceInformationWindowByPath {win_path} { + set example_id [string trimleft $win_path .gid.examples_window.center.c.fcenter.title_textFluid.buttonframe.img] + set example [::Examples::getExampleById $example_id] + if {$example ne ""} { + set description [dict get $example description] + set ::Examples::info_main_window_text $description + } +} + +proc Examples::getExampleById {example_id} { + variable groups_of_examples + + foreach group_id [dict keys $groups_of_examples] { + set group [dict get $groups_of_examples $group_id] + foreach example [dict keys [dict get $group examples]] { + if {$example_id eq $example} {return [dict get $group examples $example]} + } + } +} + proc Examples::IsAproved {example group filter} { # if empty, no filter, go if {$filter eq ""} {return 1} @@ -181,6 +211,7 @@ proc Examples::GetGroupsFromXML {} { dict set groups_of_examples $group_id examples $example_id dim [$example @dim] dict set groups_of_examples $group_id examples $example_id app [$example @app] dict set groups_of_examples $group_id examples $example_id cmd [$example @cmd] + dict set groups_of_examples $group_id examples $example_id description [[$example getElementsByTagName "Description"] text] } } } From 46fe0ad8efcbd41dbb017a6647fdb8137b9d00cb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 13 Sep 2021 15:12:44 +0200 Subject: [PATCH 397/556] Better display and search --- kratos.gid/apps/Fluid/examples/examples.xml | 2 +- kratos.gid/scripts/Controllers/ExamplesWindow.tcl | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/Fluid/examples/examples.xml b/kratos.gid/apps/Fluid/examples/examples.xml index e82672af6..3fda1852f 100644 --- a/kratos.gid/apps/Fluid/examples/examples.xml +++ b/kratos.gid/apps/Fluid/examples/examples.xml @@ -4,7 +4,7 @@ This example applies an inlet condition to the air surrounding a 2D building. The default mesh is made of 4.000 trianglular elements, and the calculation generates results for 800 timesteps. - Size of model: 0.4 MB - - Time: Avg calulation time: < 2 minutes + - Time: Avg calulation time: 2 minutes - Size with results: 250 MB diff --git a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl index f601977f9..dca8bd90c 100644 --- a/kratos.gid/scripts/Controllers/ExamplesWindow.tcl +++ b/kratos.gid/scripts/Controllers/ExamplesWindow.tcl @@ -123,20 +123,21 @@ proc Examples::PrintGroups { } { foreach example_id [dict keys [dict get $group examples]] { set example [dict get $group examples $example_id] if {[IsAproved $example $group_name $filter]} { + set inner_id "$group_id*$example_id" set example_name [subst -nocommands -novariables [dict get $example name]] set example_logo [dict get $example logo] set example_dim [dict get $example dim] set example_app [dict get $example app] set example_cmd [dict get $example cmd] set img [Examples::getImgFrom $example_app $example_logo] - ttk::button $buttons_frame.img$example_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] + ttk::button $buttons_frame.img~$inner_id -image $img -command [list Examples::LaunchExample $example_app $example_dim $example_cmd ] ttk::label $buttons_frame.title$example_id -text $example_app -font {bold} ttk::label $buttons_frame.text$example_id -text $example_name - grid $buttons_frame.img$example_id -column $col -row $row + grid $buttons_frame.img~$inner_id -column $col -row $row grid $buttons_frame.title$example_id -column $col -row [expr $row +1] grid $buttons_frame.text$example_id -column $col -row [expr $row +2] - bind $buttons_frame.img$example_id {::Examples::PlaceInformationWindowByPath %W} + bind $buttons_frame.img~$inner_id {::Examples::PlaceInformationWindowByPath %W} incr col if {$col >= 4} {set col 0; incr row; incr row; incr row} @@ -158,9 +159,13 @@ proc Examples::PrintGroups { } { } proc Examples::PlaceInformationWindowByPath {win_path} { - set example_id [string trimleft $win_path .gid.examples_window.center.c.fcenter.title_textFluid.buttonframe.img] - set example [::Examples::getExampleById $example_id] + variable examples_window + variable groups_of_examples + set inner_id [lindex [split $win_path "~"] end] + lassign [split $inner_id "*"] example_group example_id + set example [dict get $groups_of_examples $example_group examples $example_id] if {$example ne ""} { + $examples_window.info configure -text "Information: [dict get $example name]" set description [dict get $example description] set ::Examples::info_main_window_text $description } From 2eea94502f0041f24b1d6e28562b126c779ef8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Thu, 16 Sep 2021 14:40:16 +0200 Subject: [PATCH 398/556] Update README.md --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a1356d975..3476a4ea2 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,14 @@ The interface of Kratos with [GiD](http://www.gidhome.com). If you need the latest release, launch your GiD, navigate to Data > Problemtype > Internet retrieve and download Kratos there. Available for Linux. Windows, and macOS. If you need the developer version, you are on the right place ## First steps -* Install the latest GiD developer version -> [Developer version](http://www.gidhome.com/download/developer-versions) -* Navigate to GiD's problemtype folder and delete previous kratos.gid -* Create there a link to our [kratos.gid](./kratos.gid/) -* Navigate to kratos.gid/exec/ -* Create there a symbolic link to the kratos installation folder (where runkratos is located) - * Unix : `ln -s ~/Kratos Kratos` or maybe `ln -s ~/Kratos/bin/Release Kratos` if that's the destination folder - * Windows : `mklink /J Kratos C:\kratos` or maybe `mklink /J Kratos C:\kratos\bin\Release` (choose actual Kratos installation folder) +* 1- Clone this repository, or install a [release](https://github.com/KratosMultiphysics/GiDInterface/releases) +* 2- Install the latest GiD developer version -> [Developer version](http://www.gidhome.com/download/developer-versions) +* 3- Navigate to GiD's problemtype folder and delete previous kratos.gid + * Create there a link to our [kratos.gid](./kratos.gid/) downloaded in step 1 +* 4- Navigate to kratos.gid/exec/ + * Create there a symbolic link to the kratos installation folder (where runkratos is located) + * Unix : `ln -s ~/Kratos Kratos` or maybe `ln -s ~/Kratos/bin/Release Kratos` if that's the destination folder + * Windows : `mklink /J Kratos C:\kratos` or maybe `mklink /J Kratos C:\kratos\bin\Release` (choose actual Kratos installation folder) ## Usage * Run GiD From e0311c27ec7d424372652338afdc1a2fa06446c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Mon, 20 Sep 2021 13:54:34 +0200 Subject: [PATCH 399/556] Debugging leftover --- .../apps/ConvectionDiffusion/write/write.tcl | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl index 4c4b4c6ac..57b29657c 100644 --- a/kratos.gid/apps/ConvectionDiffusion/write/write.tcl +++ b/kratos.gid/apps/ConvectionDiffusion/write/write.tcl @@ -45,16 +45,16 @@ proc ::ConvectionDiffusion::write::writeModelPartEvent { } { # Element connectivities (Groups on CNVDFFParts) write::writeElementConnectivities - + # Nodal conditions and conditions writeConditions - + # Custom SubmodelParts write::writeBasicSubmodelParts [getLastConditionId] - + # SubmodelParts writeMeshes - + } proc ::ConvectionDiffusion::write::writeCustomFilesEvent { } { @@ -64,13 +64,13 @@ proc ::ConvectionDiffusion::write::writeCustomFilesEvent { } { } proc ::ConvectionDiffusion::write::Validate {} { - set err "" + set err "" set root [customlib::GetBaseRoot] return $err } -proc ::ConvectionDiffusion::write::getLastConditionId { } { +proc ::ConvectionDiffusion::write::getLastConditionId { } { variable ConvectionDiffusionConditions set top 1 # Kratos::PrintArray ConvectionDiffusionConditions @@ -85,9 +85,6 @@ proc ::ConvectionDiffusion::write::getLastConditionId { } { proc ::ConvectionDiffusion::write::WriteMaterialsFile { {write_const_law True} {include_modelpart_name True} } { set model_part_name "" if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} - W [GetAttribute parts_un] - W [GetAttribute materials_file] - W $include_modelpart_name write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name } @@ -140,7 +137,7 @@ proc ::ConvectionDiffusion::write::writeMeshes { } { proc ::ConvectionDiffusion::write::writeConditionsMesh { } { variable ConvectionDiffusionConditions - + set root [customlib::GetBaseRoot] set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" set grouped_conditions [list ] @@ -175,7 +172,7 @@ proc ::ConvectionDiffusion::write::writeConditionsMesh { } { set end $ConvectionDiffusionConditions($groupid,final) dict set groups_dict $groupid what "Conditions" dict set groups_dict $groupid iniend [list $ini $end] - } + } write::writeConditionGroupedSubmodelParts $condid $groups_dict } } From 5da8eefc7d7e48a3093dddb2348215b4a76709d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Zorrilla?= Date: Mon, 20 Sep 2021 15:32:40 +0200 Subject: [PATCH 400/556] Update output to MainModelPart --- kratos.gid/apps/ConvectionDiffusion/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/app.json b/kratos.gid/apps/ConvectionDiffusion/app.json index 9684d42ea..4c1bf91bc 100644 --- a/kratos.gid/apps/ConvectionDiffusion/app.json +++ b/kratos.gid/apps/ConvectionDiffusion/app.json @@ -38,7 +38,7 @@ "materials_file": "ConvectionDiffusionMaterials.json", "properties_location": "json", "model_part_name": "ThermalModelPart", - "output_model_part_name": "thermal_computing_domain" + "output_model_part_name": "" }, "main_launch_file": "python/MainKratos.py", "examples": "examples/examples.xml" From 5e95bfdefa73c81c1b34affd4c5c46d45e459dc4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 18:46:20 +0200 Subject: [PATCH 401/556] Add files manager --- kratos.gid/libs/FileManager.tcl | 173 ----------- kratos.gid/libs/gid-pt-file-manager/LICENSE | 21 ++ kratos.gid/libs/gid-pt-file-manager/README.md | 1 + .../gid_pt_file_manager.tcl | 276 ++++++++++++++++++ .../libs/gid-pt-file-manager/pkgIndex.tcl | 2 + 5 files changed, 300 insertions(+), 173 deletions(-) delete mode 100644 kratos.gid/libs/FileManager.tcl create mode 100644 kratos.gid/libs/gid-pt-file-manager/LICENSE create mode 100644 kratos.gid/libs/gid-pt-file-manager/README.md create mode 100644 kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl create mode 100644 kratos.gid/libs/gid-pt-file-manager/pkgIndex.tcl diff --git a/kratos.gid/libs/FileManager.tcl b/kratos.gid/libs/FileManager.tcl deleted file mode 100644 index ffa9db1f6..000000000 --- a/kratos.gid/libs/FileManager.tcl +++ /dev/null @@ -1,173 +0,0 @@ -# Usage: -# source {E:\PROYECTOS\FileWizard\NativeFileManager\NativeFileOpener.tcl} -# FileSelector::InitWindow W -# FileSelector::InitWindow puts -# W $::FileSelector::files_to_model -# puts W $::FileSelector::files_to_model -# FileSelector::CopyFilesIntoModel {E:\TEMP\aaaa} - -namespace eval FileSelector { - variable selected_file - variable save_to_model - variable result_proc_name - variable result_proc_args - variable w - variable files_to_model - variable files_list -} - -proc FileSelector::Start {} { - variable selected_file - set selected_file "" - - variable result_proc_name - set result_proc_name "" - variable result_proc_args - set result_proc_args "" - - variable w - set w .gid.fileSelector - - variable files_to_model - set files_to_model [list ] - - variable files_list - set files_list [list ] -} -FileSelector::Start - -# PUBLIC FUNCTIONS -proc FileSelector::InitWindow {updateProcname args} { - set ::FileSelector::selected_file "" - set ::FileSelector::save_to_model 0 - variable result_proc_name - variable result_proc_args - set result_proc_name $updateProcname - set result_proc_args $args - FileSelector::_OpenFileSelector -} -proc FileSelector::FinishWindow {result} { - variable result_proc_name - variable result_proc_args - - if {$result} { - variable save_to_model - variable files_to_model - variable selected_file - variable files_list - - if {$save_to_model} { - lappend files_to_model $selected_file - set selected_file [file join . [file tail $selected_file] ] - } - lappend files_list $selected_file - $result_proc_name $selected_file $result_proc_args - } else { - $result_proc_name "" $result_proc_args - } - catch {variable w; destroy $w} -} - -proc FileSelector::CopyFilesIntoModel { dir } { - variable files_to_model - variable files_list - foreach f $files_to_model { - set files_list [lsearch -all -inline -not -exact $files_list $f] - file copy -force $f $dir - lappend files_list [file join $dir $f] - } - set files_to_model [list ] -} - -proc FileSelector::GetAllFiles { } { - variable files_list - return $files_list -} -proc FileSelector::AddFile { fileid } { - variable files_list - if {$fileid ne "" && $fileid ni $files_list} {lappend files_list $fileid} -} - - -# PRIVATE FUNCTIONS -proc FileSelector::_OpenFileSelector2 { } { - variable w - catch {destroy $w} - toplevel $w - wm title $w "Select a file" - wm minsize $w 400 200 - wm resizable $w 0 0 - # Top frame - set fr1 [ttk::frame $w.fr1 -borderwidth 10] - - # Label - set lab1 [ttk::label $fr1.lab1 -text {Filename: } -justify left -anchor w ] - grid $lab1 -row 0 -column 0 -sticky ew - - # Entry - grid [ttk::entry $fr1.ent1 -width 40 -textvariable ::FileSelector::selected_file] -column 1 -row 0 -sticky we; # -state readonly - - # Button browse - grid [ttk::button $fr1.browse -text "Browse" -command "set ::FileSelector::selected_file \[tk_getOpenFile\]" ] -column 2 -row 0 -sticky we - - # Checkbutton - grid [ttk::checkbutton $fr1.check -text "Save file into model?" -variable ::FileSelector::save_to_model] -column 0 -row 1 -columnspan 3 -sticky we - grid $fr1 -column 0 -row 0 -sticky nw - - # Bottom frame - set fr2 [ttk::frame $w.fr2 -borderwidth 10] - - # Button browse - grid [ttk::button $fr2.cancel -text "Cancel" -command [list FileSelector::FinishWindow 0 ]] -column 0 -row 0 -sticky w - grid [ttk::button $fr2.ok -text "Ok" -command [list FileSelector::FinishWindow 1] ] -column 1 -row 0 -sticky e - - grid $fr2 -column 0 -row 1 -sticky swe -} - -proc FileSelector::_OpenFileSelector { } { - variable w - ::InitWindow $w [_ "Select a file"] PreFileSelectorWindowGeom FileSelector - if { ![winfo exists $w] } return ;# windows disabled || usemorewindows == 0 - - # Top frame - set fr1 [ttk::frame $w.fr1 -borderwidth 10] - - # Label - set lab1 [ttk::label $fr1.lab1 -text {Filename: } -justify left -anchor w ] - grid $lab1 -row 0 -column 0 -sticky ew - - # Entry - grid [ttk::entry $fr1.ent1 -width 40 -textvariable ::FileSelector::selected_file] -column 1 -row 0 -sticky we; # -state readonly - - # Button browse - grid [ttk::button $fr1.browse -text "Browse" -command "set ::FileSelector::selected_file \[tk_getOpenFile\]" ] -column 2 -row 0 -sticky we - - # Checkbutton - grid [ttk::checkbutton $fr1.check -text "Save file into model?" -variable ::FileSelector::save_to_model] -column 0 -row 1 -columnspan 3 -sticky we - - grid $fr1 -column 0 -row 0 -sticky nw - - ttk::frame $w.but -style BottomFrame.TFrame - ttk::button $w.but.accept -text [_ "Apply"] -command "[list FileSelector::FinishWindow 1 ]" -underline 0 -style BottomFrame.TButton - ttk::button $w.but.close -text [_ "Close"] -command "[list FileSelector::FinishWindow 0 ]" -underline 0 -style BottomFrame.TButton - - - grid columnconfigure $w.fr1 1 -weight 1 - - grid $w.but.accept -row 1 -column 1 -padx 5 -pady 6 - grid $w.but.close -row 1 -column 3 -padx 5 -pady 6 - grid $w.but -row 4 -column 0 -sticky ews -columnspan 7 - if { $::tcl_version >= 8.5 } { grid anchor $w.but center } - - grid $w.but -row 3 -sticky ews -columnspan 7 - - grid columnconfigure $w 0 -weight 1 - grid rowconfigure $w 3 -weight 1 - # - ## Resize behavior management - #wm minsize $w 180 200 - - focus $w.but.accept - bind $w "$w.but.close invoke" - bind $w "$w.but.close invoke" -} \ No newline at end of file diff --git a/kratos.gid/libs/gid-pt-file-manager/LICENSE b/kratos.gid/libs/gid-pt-file-manager/LICENSE new file mode 100644 index 000000000..67afb7f1e --- /dev/null +++ b/kratos.gid/libs/gid-pt-file-manager/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 GiD + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/kratos.gid/libs/gid-pt-file-manager/README.md b/kratos.gid/libs/gid-pt-file-manager/README.md new file mode 100644 index 000000000..96ec9a5f6 --- /dev/null +++ b/kratos.gid/libs/gid-pt-file-manager/README.md @@ -0,0 +1 @@ +# gid-pt-file-manager \ No newline at end of file diff --git a/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl b/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl new file mode 100644 index 000000000..8e9bf623d --- /dev/null +++ b/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl @@ -0,0 +1,276 @@ +package provide gid_pt_file_manager 1.0 + +# Usage: +# FileSelector::InitWindow W +# FileSelector::InitWindow puts +# W $::FileSelector::files_to_model +# puts W $::FileSelector::files_to_model +# FileSelector::CopyFilesIntoModel {E:\TEMP\aaaa} + +namespace eval ::FileSelector { + + # Kratos modifications on package + Kratos::AddNamespace [namespace current] + + variable selected_file + variable save_to_model + variable w + variable w_list + variable files_to_model + variable files_list + + variable callback_after_new_file + variable callback_view_file + variable callback_delete_file +} + +proc FileSelector::Start {} { + variable selected_file + set selected_file "" + + variable w + set w .gid.fileSelector + variable w_list + set w_list .gid.fileList + + variable files_to_model + set files_to_model [list ] + + variable files_list + set files_list [list ] +} +FileSelector::Start + +# PUBLIC FUNCTIONS +proc FileSelector::InitFileHandler { } { + + variable w_list + catch {destroy $w_list} + toplevel $w_list + wm title $w_list "File handler" + wm minsize $w_list 400 200 + wm resizable $w_list 0 0 + + ttk::frame $w_list.frame#2 -style groove.TFrame -borderwidth 3 + ttk::frame $w_list.frame#6 -style BottomFrame.TFrame + ttk::frame $w_list.frame#1 -borderwidth 2 -style groove.TFrame + label $w_list.label#1 -text [_ "File name"] + listbox $w_list.listbox#1 \ + -height 8 \ + -width 40 \ + -xscrollcommand "$w_list.scrollbar#1 set" \ + -yscrollcommand "$w_list.scrollbar#2 set" -selectmode single + + ttk::scrollbar $w_list.scrollbar#2 -command [list $w_list.listbox#1 yview] -orient vertical + ttk::scrollbar $w_list.scrollbar#1 -command [list $w_list.listbox#1 xview] -orient horizontal + + menu $w_list.runprocmenu + bind $w_list.listbox#1 <1> "focus $w_list.listbox#1" + if { [esMac] } { + bind $w_list.listbox#1 <$::gid_central_button> "event generate $w_list.listbox#1 <1> -rootx %X -rooty %Y ; ShowRunprocMenu $w_list %X %Y" + } else { + bind $w_list.listbox#1 <$::gid_right_button> "event generate $w_list.listbox#1 <1> -rootx %X -rooty %Y ; ShowRunprocMenu $w_list %X %Y" + } + + ttk::button $w_list.button#1 -text [_ "View file"] -command [list FileSelector::ViewFile] -style BottomFrame.TButton + ttk::button $w_list.button#2 -text [_ "Delete file"] -command [list FileSelector::DeleteFile] -style BottomFrame.TButton + + ttk::button $w_list.button#4 -text [_ "Add file"] -command [list FileSelector::InitWindow] -style BottomFrame.TButton + + focus $w_list.button#4 + ttk::button $w_list.button#5 -text [_ "Close"] -command [list destroy $w_list] -style BottomFrame.TButton + + # Geometry management + grid $w_list.frame#2 -in $w_list.frame#1 -row 4 -column 1 -sticky nw -padx 1 -pady 1 + grid $w_list.frame#6 -in $w_list -row 3 -column 1 -sticky ew + grid anchor $w_list.frame#6 center + grid $w_list.frame#1 -in $w_list -row 1 -column 1 -sticky nesw -columnspan 2 -padx 3 -pady 3 + grid $w_list.label#1 -in $w_list.frame#1 -row 1 -column 1 -sticky w -pady 3 -padx 3 + grid $w_list.listbox#1 -in $w_list.frame#1 -row 2 -column 1 -sticky nesw + grid $w_list.scrollbar#2 -in $w_list.frame#1 -row 2 -column 2 -sticky ns + grid $w_list.scrollbar#1 -in $w_list.frame#1 -row 3 -column 1 -sticky ew + grid $w_list.button#4 -in $w_list.frame#2 -row 1 -column 1 -sticky w -padx 3 + grid $w_list.button#1 -in $w_list.frame#2 -row 1 -column 2 -sticky w -padx 3 + grid $w_list.button#2 -in $w_list.frame#2 -row 1 -column 3 -sticky w -padx 3 + + grid $w_list.button#5 -in $w_list.frame#6 -padx 3 -pady 3 + + grid columnconfigure $w_list.frame#2 "1 2" -weight 1 + + grid rowconfigure $w_list 1 -weight 1 + grid columnconfigure $w_list 1 -weight 1 + + grid rowconfigure $w_list.frame#1 2 -weight 1 + grid columnconfigure $w_list.frame#1 1 -weight 1 + + FileSelector::FillFileList +} + + +# what can be: current or window +proc FileSelector::DeleteFile { } { + variable w_list + variable files_list + + set wbase $w_list + set w $w_list.listbox#1 + if { [$w size] == 1 } { $w sel set 0} + set sel [$w curselection] + if {$sel eq ""} {return ""} + set fil [$w get $sel] + set idx [lsearch $files_list $fil] + set files_list [lreplace $files_list $idx $idx] + FileSelector::FillFileList + + variable callback_delete_file + $callback_delete_file $fil +} + +proc FileSelector::ViewFile { } { + variable w_list + + set wbase $w_list + set w $w_list.listbox#1 + if { [$w size] == 1 } { $w sel set 0} + set sel [$w curselection] + if {$sel eq ""} {return ""} + set fil [$w get $sel] + + variable callback_view_file + $callback_view_file $fil +} + +proc FileSelector::FillFileList { } { + variable w_list + variable files_list + if { [GidUtils::AreWindowsDisabled] } { + return + } + if { ![winfo exists $w_list] } { + return + } + + $w_list.listbox#1 delete 0 end + foreach name $files_list { + $w_list.listbox#1 insert end $name + } +} + +proc FileSelector::InitWindow {} { + set ::FileSelector::selected_file "" + set ::FileSelector::save_to_model 0 + FileSelector::_OpenFileSelector +} + +proc FileSelector::FinishWindow {result} { + variable result_proc_name + variable result_proc_args + + if {$result} { + variable save_to_model + variable files_to_model + variable selected_file + variable files_list + + if {$save_to_model} { + lappend files_to_model $selected_file + set selected_file [file join . [file tail $selected_file] ] + + } + variable callback_after_new_file + if {$callback_after_new_file ne ""} {$callback_after_new_file $selected_file} + } + catch {variable w; destroy $w} + + variable w_list + + if { ![winfo exists $w_list] } { + return + } + FileSelector::FillFileList + + focus $w_list.button#4 + +} + +proc FileSelector::CopyFilesIntoModel { dir } { + variable files_to_model + # variable files_list + foreach f $files_to_model { + # set files_list [lsearch -all -inline -not -exact $files_list $f] + file copy -force $f $dir + #lappend files_list [file join $dir $f] + } + set files_to_model [list ] +} + +proc FileSelector::GetAllFiles { } { + variable files_list + return $files_list +} +proc FileSelector::AddFile { fileid } { + variable files_list + + if {$fileid ne "" && $fileid ni $files_list} { + lappend files_list $fileid + } +} + +proc FileSelector::ClearFileList { } { + variable files_list + set files_list [list ] +} + +# PRIVATE FUNCTIONS +proc FileSelector::_OpenFileSelector { } { + variable w + ::InitWindow $w [_ "Select a file"] PreFileSelectorWindowGeom FileSelector + if { ![winfo exists $w] } return ;# windows disabled || usemorewindows == 0 + + # Top frame + set fr1 [ttk::frame $w.fr1 -borderwidth 10] + + # Label + set lab1 [ttk::label $fr1.lab1 -text {Filename: } -justify left -anchor w ] + grid $lab1 -row 0 -column 0 -sticky ew + + # Entry + grid [ttk::entry $fr1.ent1 -width 40 -textvariable ::FileSelector::selected_file] -column 1 -row 0 -sticky we; # -state readonly + + # Button browse + grid [ttk::button $fr1.browse -text "Browse" -command "set ::FileSelector::selected_file \[tk_getOpenFile\]" ] -column 2 -row 0 -sticky we + + # Checkbutton + set ::FileSelector::save_to_model 1 + grid [ttk::label $fr1.check -text "File will be copied into your model folder" ] -column 0 -row 1 -columnspan 3 -sticky we + #grid [ttk::checkbutton $fr1.check -text "Save file into model?" -variable ::FileSelector::save_to_model] -column 0 -row 1 -columnspan 3 -sticky we + + grid $fr1 -column 0 -row 0 -sticky nw + + ttk::frame $w.but -style BottomFrame.TFrame + ttk::button $w.but.accept -text [_ "Apply"] -command "[list FileSelector::FinishWindow 1 ]" -underline 0 -style BottomFrame.TButton + ttk::button $w.but.close -text [_ "Close"] -command "[list FileSelector::FinishWindow 0 ]" -underline 0 -style BottomFrame.TButton + + + grid columnconfigure $w.fr1 1 -weight 1 + + grid $w.but.accept -row 1 -column 1 -padx 5 -pady 6 + grid $w.but.close -row 1 -column 3 -padx 5 -pady 6 + grid $w.but -row 4 -column 0 -sticky ews -columnspan 7 + if { $::tcl_version >= 8.5 } { grid anchor $w.but center } + + grid $w.but -row 3 -sticky ews -columnspan 7 + + grid columnconfigure $w 0 -weight 1 + grid rowconfigure $w 3 -weight 1 + # + ## Resize behavior management + #wm minsize $w 180 200 + + focus $w.but.accept + bind $w "$w.but.close invoke" + bind $w "$w.but.close invoke" +} +set FileSelector::callback_after_new_file "" +set FileSelector::callback_view_file "" +set FileSelector::callback_delete_file "" \ No newline at end of file diff --git a/kratos.gid/libs/gid-pt-file-manager/pkgIndex.tcl b/kratos.gid/libs/gid-pt-file-manager/pkgIndex.tcl new file mode 100644 index 000000000..cc7fc27de --- /dev/null +++ b/kratos.gid/libs/gid-pt-file-manager/pkgIndex.tcl @@ -0,0 +1,2 @@ + +package ifneeded gid_pt_file_manager 1.0 [list source [file join $dir gid_pt_file_manager.tcl]] From 6bb36b72185f2100ada25d944629ea0427ca5f0d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 18:46:46 +0200 Subject: [PATCH 402/556] Load file manager --- kratos.gid/kratos.tcl | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index bc5dee9d2..2249a7755 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -181,6 +181,9 @@ proc Kratos::LoadCommonScripts { } { if { [lsearch -exact $::auto_path [file join $kratos_private(Path) scripts]] == -1 } { lappend ::auto_path [file join $kratos_private(Path) scripts] } + if { [lsearch -exact $::auto_path [file join $kratos_private(Path) libs]] == -1 } { + lappend ::auto_path [file join $kratos_private(Path) libs] + } # Writing common scripts foreach filename {Writing.tcl WriteHeadings.tcl WriteMaterials.tcl WriteNodes.tcl @@ -201,7 +204,7 @@ proc Kratos::LoadCommonScripts { } { uplevel #0 [list source [file join $kratos_private(Path) scripts Model $filename]] } # Libs - foreach filename {SimpleXMLViewer.tcl FileManager.tcl } { + foreach filename {SimpleXMLViewer.tcl} { uplevel #0 [list source [file join $kratos_private(Path) libs $filename]] } } @@ -343,6 +346,13 @@ proc Kratos::LoadWizardFiles { } { package require gid_smart_wizard Kratos::UpdateMenus } +proc Kratos::LoadImportFiles { } { + variable kratos_private + # Load the wizard package + set kratos_private(UseFiles) 1 + package require gid_pt_file_manager + Kratos::UpdateMenus +} proc Kratos::TransformProblemtype {old_dom old_filespd} { # Check if current problemtype allows transforms From 7e0a90db1b6fb094861c2c184e91cdd84c31643c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 18:47:42 +0200 Subject: [PATCH 403/556] Add to the menu if the app uses it --- kratos.gid/images/files.png | Bin 0 -> 2087 bytes kratos.gid/scripts/Applications.tcl | 1 + kratos.gid/scripts/Menus.tcl | 7 +++++-- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 kratos.gid/images/files.png diff --git a/kratos.gid/images/files.png b/kratos.gid/images/files.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5fd2b02ad15f756f111c1e9151317e99495a9c GIT binary patch literal 2087 zcmV+?2-x?DP)Nklhe zEsw{un|@=R@t%kDW76SA0T96sNk~X|IyLoq{NRT_L2z&&ghC-abo}JxB-CmZ4j(>( zD@_e>PPkyP+F=^Ez-Af8wJUXv^nM!Y&{qK%9)!f|N-;|V=BxF8Pyi>eqnu+J;3dg+wewLq~uPxrY52i8moYeL9 z>fuMZU?rAR6b3sn;&4qOIy@NTW-CGh{bz!hm5KWRs~zjoSSsr4-W%Zn$vqB0@toXl}g$wL%Ji zDmA0g1hLc?QJQd^uf2qCy_iN7pyVYxYBFQYVuP>DhgXT6lGJRq@toT6_M5ocaQQVl z_Ta1latS~Q0bmV=Nkd~3eB}!C^!1Yy8A3yXU^1B~M3acrgrTXq1xvoR7*>k~GP#T& zX|vmjH8DmBXlQr@?-TulxA6YKQq-QU_5vW60F;)(MR8}+-gy%f#76(%5W>TP$Z06d z<7Vjk3_QNN{sBBi046CkQYt@2`@{sXClJ6vNhzbyjG1j1HjZKMomJfeMZR^f=*ozf&$f$NrZ5_-LShv z2&Zsd`22GuKe3SC*yHw4m$XAnjY%%2n~#~WZ21ae#049H*z(pd@zL+A<_3_RlcOyo z04$rCTy1WJowB=!dVO46G&v1`kUCyda~nda3R*ilv1Y|mV#iIDASVD0SSjfO0s;u= zBvdLD4=0-|Z@%#hR8=1F0w6m_TUuTYu}H)Xm+P-k-*=&_yB7=Mq7bN7(q#o`ZSR35 zJQTI{4M<)248`69iA2KxvhSJW>9Dwo87Jk%&o^(z(IbcE29TAVtt~6B;QgJ+-%p%^ zQmMv`jxI!Kf)NtH;yePA#f9jo2>k2pd93()BK-XQd1z$h)Mzx)XFtTpFTQgyV_@^9 z0vh990AyxmYs(3Mk5s}9)ir0So`vYV*^Q83HReZ!^Afw>)lXFrh??`~@S}AvVR(2L zO1d?>y^mCig$oznbub&_n;3vYA3PiYHqn?gUvEceS1)wEeOSCG4k<|q+{r&qUxc4Z zfg4mE8LxbY(>zT-V^1oT^3NiAW=>coJQRS8%q(qrMFn*-+3gUVJVhDoApreQ%7oN( z;`!w3>>EV@4Wlz>&*7Dq(&h=~frB1%M|NQm0T>r|eBl%(}om$r(Rot65(NG#$BXfc~9?oO;- z`y4-q4Y!8^ke-oA01nWMzYXA0-4!%`(Ml`V0OB8u#_HuM+(Xm z32Q`~3SOrwI6OCi4FsTq7+~ualUmv_&s}PwKG27hC5c%5>=GW^kB(RKJQ<~Bbo(25 z-T}~#P(Tb+dIgZ4!5Lud7L&hx@>hJ(+Kr*1A*aOd`{1|lzDGkRkT;e8hp?m_pgr-`{5%~0 Date: Mon, 20 Sep 2021 18:47:51 +0200 Subject: [PATCH 404/556] Dam uses it as example --- kratos.gid/apps/Dam/app.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/Dam/app.json b/kratos.gid/apps/Dam/app.json index 5fae66862..3dceabebd 100644 --- a/kratos.gid/apps/Dam/app.json +++ b/kratos.gid/apps/Dam/app.json @@ -26,7 +26,8 @@ "open_tree": true, "show_toolbar": true, "intervals": true, - "wizard": false + "wizard": false, + "import_files":true }, "unique_names": { "parts": "DamParts", From 499c4e6902b71d7c01c5822a67114b1ad9c8623e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 19:13:42 +0200 Subject: [PATCH 405/556] Create a controller for the files handler package --- kratos.gid/kratos.tcl | 2 +- .../scripts/Controllers/CommonProcs.tcl | 7 -- .../scripts/Controllers/ImportFiles.tcl | 68 +++++++++++++++++++ kratos.gid/scripts/spdAuxiliar.tcl | 29 -------- 4 files changed, 69 insertions(+), 37 deletions(-) create mode 100644 kratos.gid/scripts/Controllers/ImportFiles.tcl diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 2249a7755..655e498ca 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -196,7 +196,7 @@ proc Kratos::LoadCommonScripts { } { uplevel #0 [list source [file join $kratos_private(Path) scripts $filename]] } # Common controllers - foreach filename {ApplicationMarketWindow.tcl ExamplesWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl Drawer.tcl} { + foreach filename {ApplicationMarketWindow.tcl ExamplesWindow.tcl CommonProcs.tcl PreferencesWindow.tcl TreeInjections.tcl MdpaImportMesh.tcl Drawer.tcl ImportFiles.tcl} { uplevel #0 [list source [file join $kratos_private(Path) scripts Controllers $filename]] } # Model class diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 4cd7a1100..6d2a61cfe 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -555,13 +555,6 @@ proc spdAux::ProcShowInMode { domNode args } { } } -proc spdAux::ProcGetFilesValues { } { - lappend listilla "- No file" - lappend listilla {*}[FileSelector::GetAllFiles] - lappend listilla "- Add new file" - return [join $listilla ","] -} - proc spdAux::ProcGetIntervals {domNode args} { set lista [::spdAux::getIntervals] if {$lista eq ""} {$domNode setAttribute state "hidden"; spdAux::RequestRefresh} diff --git a/kratos.gid/scripts/Controllers/ImportFiles.tcl b/kratos.gid/scripts/Controllers/ImportFiles.tcl new file mode 100644 index 000000000..31ee6ff75 --- /dev/null +++ b/kratos.gid/scripts/Controllers/ImportFiles.tcl @@ -0,0 +1,68 @@ + +# Handle file input +proc ::spdAux::LaunchFileWindow { } { + if {[GiD_Info Project Modelname] eq "UNNAMED"} { + MessageBoxOk [_ "Model error"] [_ "Save your model first"] error + return + } + set FileSelector::callback_after_new_file "::spdAux::SaveModelFile" + set FileSelector::callback_view_file "::spdAux::ViewFile" + set FileSelector::callback_delete_file "::spdAux::DeleteFile" + FileSelector::InitFileHandler +} + +proc ::spdAux::ViewFile {file_id} { + exec {*}[auto_execok start] "" [file join [file nativename [GiD_Info Project ModelName].gid] $file_id] +} + +proc ::spdAux::LoadModelFiles { {root "" }} { + if {$root eq ""} { + set root [customlib::GetBaseRoot] + customlib::UpdateDocument + } + set files [$root getElementsByTagName "file"] + if {[llength $files] > 0} { + Kratos::LoadImportFiles + foreach elem $files { + FileSelector::AddFile [$elem @n] + } + } +} + +proc ::spdAux::SaveModelFile { fileid } { + customlib::UpdateDocument + FileSelector::AddFile $fileid + gid_groups_conds::addF {container[@n='files']} file [list n ${fileid}] + customlib::UpdateDocument + FileSelector::CopyFilesIntoModel [file nativename [GiD_Info Project ModelName] ].gid +} + +proc ::spdAux::ProcGetFilesValues { domNode } { + customlib::UpdateDocument + spdAux::LoadModelFiles + lappend listilla "- No file - (add files using File handler toolbar)" + lappend listilla {*}[FileSelector::GetAllFiles] + if {[get_domnode_attribute $domNode v] ni $listilla} {$domNode setAttribute v [lindex $listilla 0]} + return [join $listilla ","] +} + +proc ::spdAux::DeleteFile { fileid } { + customlib::UpdateDocument + + set used_nodes [[customlib::GetBaseRoot] selectNodes "//value\[@type = 'file' and @v = '$fileid'\]"] + foreach used_node $used_nodes { + W "Warning: Deleted file $fileid was used in [[$used_node parent] @pn] > [$used_node @pn]" + } + + set file_node [[customlib::GetBaseRoot] selectNodes "//file\[@n = '$fileid'\]"] + if {$file_node ne ""} {$file_node delete} + RequestRefresh +} + +proc spdAux::UpdateFileField { fileid domNode} { + if {$fileid ne ""} { + $domNode setAttribute v $fileid + spdAux::SaveModelFile $fileid + RequestRefresh + } +} diff --git a/kratos.gid/scripts/spdAuxiliar.tcl b/kratos.gid/scripts/spdAuxiliar.tcl index 2bff91642..e9746070a 100644 --- a/kratos.gid/scripts/spdAuxiliar.tcl +++ b/kratos.gid/scripts/spdAuxiliar.tcl @@ -436,35 +436,6 @@ proc spdAux::GetAppliedGroups { {root ""} } { } return [lsort -unique $group_list] } - -proc spdAux::LoadModelFiles { {root "" }} { - if {$root eq ""} { - set root [customlib::GetBaseRoot] - customlib::UpdateDocument - } - foreach elem [$root getElementsByTagName "file"] { - FileSelector::AddFile [$elem @n] - } -} - -proc spdAux::SaveModelFile { fileid } { - customlib::UpdateDocument - FileSelector::AddFile $fileid - gid_groups_conds::addF {container[@n='files']} file [list n ${fileid}] -} - -proc spdAux::AddFile { domNode } { - FileSelector::InitWindow "spdAux::UpdateFileField" $domNode -} - -proc spdAux::UpdateFileField { fileid domNode} { - if {$fileid ne ""} { - $domNode setAttribute v $fileid - spdAux::SaveModelFile $fileid - RequestRefresh - } -} - proc spdAux::RegisterWindow {window_name} { variable list_of_windows lappend list_of_windows $window_name From 40c5f0656d12425dd48468d41e11a224782eaf95 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 19:14:06 +0200 Subject: [PATCH 406/556] namespace and usage --- .../gid_pt_file_manager.tcl | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl b/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl index 8e9bf623d..db1752ae7 100644 --- a/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl +++ b/kratos.gid/libs/gid-pt-file-manager/gid_pt_file_manager.tcl @@ -1,16 +1,13 @@ package provide gid_pt_file_manager 1.0 # Usage: -# FileSelector::InitWindow W -# FileSelector::InitWindow puts -# W $::FileSelector::files_to_model -# puts W $::FileSelector::files_to_model -# FileSelector::CopyFilesIntoModel {E:\TEMP\aaaa} + # set FileSelector::callback_after_new_file "PFEM::xml::SaveModelFile" + # set FileSelector::callback_view_file "PFEM::xml::ViewFile" + # set FileSelector::callback_delete_file "PFEM::xml::DeleteFile" + # FileSelector::InitFileHandler namespace eval ::FileSelector { - # Kratos modifications on package - Kratos::AddNamespace [namespace current] variable selected_file variable save_to_model @@ -24,7 +21,7 @@ namespace eval ::FileSelector { variable callback_delete_file } -proc FileSelector::Start {} { +proc ::FileSelector::Start {} { variable selected_file set selected_file "" @@ -42,7 +39,7 @@ proc FileSelector::Start {} { FileSelector::Start # PUBLIC FUNCTIONS -proc FileSelector::InitFileHandler { } { +proc ::FileSelector::InitFileHandler { } { variable w_list catch {destroy $w_list} @@ -106,9 +103,8 @@ proc FileSelector::InitFileHandler { } { FileSelector::FillFileList } - # what can be: current or window -proc FileSelector::DeleteFile { } { +proc ::FileSelector::DeleteFile { } { variable w_list variable files_list @@ -126,7 +122,7 @@ proc FileSelector::DeleteFile { } { $callback_delete_file $fil } -proc FileSelector::ViewFile { } { +proc ::FileSelector::ViewFile { } { variable w_list set wbase $w_list @@ -140,7 +136,7 @@ proc FileSelector::ViewFile { } { $callback_view_file $fil } -proc FileSelector::FillFileList { } { +proc ::FileSelector::FillFileList { } { variable w_list variable files_list if { [GidUtils::AreWindowsDisabled] } { @@ -156,13 +152,13 @@ proc FileSelector::FillFileList { } { } } -proc FileSelector::InitWindow {} { +proc ::FileSelector::InitWindow {} { set ::FileSelector::selected_file "" set ::FileSelector::save_to_model 0 FileSelector::_OpenFileSelector } -proc FileSelector::FinishWindow {result} { +proc ::FileSelector::FinishWindow {result} { variable result_proc_name variable result_proc_args @@ -193,7 +189,7 @@ proc FileSelector::FinishWindow {result} { } -proc FileSelector::CopyFilesIntoModel { dir } { +proc ::FileSelector::CopyFilesIntoModel { dir } { variable files_to_model # variable files_list foreach f $files_to_model { @@ -204,11 +200,11 @@ proc FileSelector::CopyFilesIntoModel { dir } { set files_to_model [list ] } -proc FileSelector::GetAllFiles { } { +proc ::FileSelector::GetAllFiles { } { variable files_list return $files_list } -proc FileSelector::AddFile { fileid } { +proc ::FileSelector::AddFile { fileid } { variable files_list if {$fileid ne "" && $fileid ni $files_list} { @@ -216,13 +212,13 @@ proc FileSelector::AddFile { fileid } { } } -proc FileSelector::ClearFileList { } { +proc ::FileSelector::ClearFileList { } { variable files_list set files_list [list ] } # PRIVATE FUNCTIONS -proc FileSelector::_OpenFileSelector { } { +proc ::FileSelector::_OpenFileSelector { } { variable w ::InitWindow $w [_ "Select a file"] PreFileSelectorWindowGeom FileSelector if { ![winfo exists $w] } return ;# windows disabled || usemorewindows == 0 From ad01fab389c288f5f12bd9ff7c0a3c5ef82b0466 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 19:14:14 +0200 Subject: [PATCH 407/556] missing param --- kratos.gid/kratos_default.spd | 2 +- kratos.gid/scripts/Menus.tcl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 66c720b92..1f075b60f 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -315,7 +315,7 @@ diff --git a/kratos.gid/scripts/Menus.tcl b/kratos.gid/scripts/Menus.tcl index fff498536..232d0fb56 100644 --- a/kratos.gid/scripts/Menus.tcl +++ b/kratos.gid/scripts/Menus.tcl @@ -43,7 +43,7 @@ proc Kratos::CreatePreprocessModelTBar { {type "DEFAULT INSIDELEFT"} } { Kratos::ToolbarAddItem "Stop" "stop.png" {Utilities CancelProcess} [= "Cancel process"] Kratos::ToolbarAddItem "SpacerApp1" "" "" "" if {[info exists kratos_private(UseFiles)] && $kratos_private(UseFiles) == 1} { - Kratos::ToolbarAddItem "Files" "files.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "File handler window"] + Kratos::ToolbarAddItem "Files" "files.png" [list -np- spdAux::LaunchFileWindow] [= "File handler window"] } Kratos::ToolbarAddItem "Examples" "losta.png" [list -np- ::Examples::StartWindow [apps::getActiveAppId]] [= "Examples window"] Kratos::ToolbarAddItem "SpacerApp2" "" "" "" From 2feb110ca92b835346af08bbcecb919002738d48 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 20 Sep 2021 19:18:50 +0200 Subject: [PATCH 408/556] Enable files in apps that uses files --- kratos.gid/apps/PfemThermic/app.json | 3 ++- kratos.gid/apps/Structural/app.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/PfemThermic/app.json b/kratos.gid/apps/PfemThermic/app.json index 736c3c03a..3218b9495 100644 --- a/kratos.gid/apps/PfemThermic/app.json +++ b/kratos.gid/apps/PfemThermic/app.json @@ -30,7 +30,8 @@ "open_tree": true, "show_toolbar": true, "intervals": true, - "wizard": false + "wizard": false, + "import_files":true }, "unique_names": { "nodal_conditions": "PFEMFLUID_NodalConditions", diff --git a/kratos.gid/apps/Structural/app.json b/kratos.gid/apps/Structural/app.json index be3fb9b2e..64ac40a17 100644 --- a/kratos.gid/apps/Structural/app.json +++ b/kratos.gid/apps/Structural/app.json @@ -29,7 +29,8 @@ "open_tree": true, "show_toolbar": true, "intervals": true, - "wizard": false + "wizard": false, + "import_files":true }, "unique_names": { "parts": "STParts", From 5891a026eed001bf7b3b46d7521ef871266cf45e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 21 Sep 2021 15:19:04 +0200 Subject: [PATCH 409/556] hotfix pfemfluid --- kratos.gid/apps/PfemLauncher/start.tcl | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/apps/PfemLauncher/start.tcl b/kratos.gid/apps/PfemLauncher/start.tcl index 24589cf17..e94b55f93 100644 --- a/kratos.gid/apps/PfemLauncher/start.tcl +++ b/kratos.gid/apps/PfemLauncher/start.tcl @@ -1,5 +1,4 @@ namespace eval ::PfemLauncher { - namespace path ::PfemFluid Kratos::AddNamespace [namespace current] variable available_apps From 5654a0a526f46d53517f73cf63277d78fb5a5bad Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 23 Sep 2021 10:32:48 +0200 Subject: [PATCH 410/556] hotfix #840 --- kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl index 103e266e5..398ea2ca5 100644 --- a/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl +++ b/kratos.gid/apps/PfemFluid/examples/WaterDamBreak.tcl @@ -13,7 +13,7 @@ proc ::PfemFluid::examples::WaterDamBreak::Init {args} { Kratos::ResetModel DrawGeometry$::Model::SpatialDimension - AssignGroupsGeometry$::Model::SpatialDimension + AssignGroups$::Model::SpatialDimension TreeAssignation$::Model::SpatialDimension GiD_Process 'Redraw From 3919eb48bbd020b9e2297e896027674950e47665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 23 Sep 2021 10:52:46 +0200 Subject: [PATCH 411/556] some changes --- kratos.gid/apps/ShallowWater/app.json | 35 +++++++++++++++++++ .../{shallow_water_main.py => MainKratos.py} | 0 .../ShallowWater/xml/BoundaryConditions.spd | 2 +- .../ShallowWater/xml/InitialConditions.spd | 2 +- .../ShallowWater/xml/SolutionStrategy.spd | 4 +-- .../apps/ShallowWater/xml/TopographicData.spd | 2 +- 6 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/app.json rename kratos.gid/apps/ShallowWater/python/{shallow_water_main.py => MainKratos.py} (100%) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json new file mode 100644 index 000000000..74e190e1c --- /dev/null +++ b/kratos.gid/apps/ShallowWater/app.json @@ -0,0 +1,35 @@ +{ + "id": "Shallow", + "name": "ShallowWater", + "prefix": "SW", + "themed": false, + "kratos_name": "ShallowWaterApplication", + "script_files": [ + "start.tcl", + "xml/XmlController.tcl" + ], + "start_script":"::ShallowWater::Init", + "requirements":{}, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": true, + "wizard": false + }, + "unique_names": { + "parts": "FLParts", + "topography_data": "SWTopographicData", + "initial_conditions": "SWInitialConditions", + "conditions": "SWConditions", + "gravity": "SWGravity", + "time_parameters": "SWTimeParameters" + }, + "write": { + "coordinates": "all", + "materials_file": "TopographicMaterials.json", + "properties_location": "json", + "model_part_name": "main_model_part", + "output_model_part_name": "main_model_part" + }, + "main_launch_file": "python/MainKratos.py" +} diff --git a/kratos.gid/apps/ShallowWater/python/shallow_water_main.py b/kratos.gid/apps/ShallowWater/python/MainKratos.py similarity index 100% rename from kratos.gid/apps/ShallowWater/python/shallow_water_main.py rename to kratos.gid/apps/ShallowWater/python/MainKratos.py diff --git a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd index da4d960c1..ca1f6d701 100644 --- a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd index 9631d109a..30841c143 100644 --- a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index cef45a9b0..389690e67 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -5,8 +5,8 @@ - - + + diff --git a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd index 199784b26..672c55e86 100644 --- a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd +++ b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd @@ -1,4 +1,4 @@ - + From bcec660a6b031ce1c8a17332bc8a32f9822c4add Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 23 Sep 2021 11:19:32 +0200 Subject: [PATCH 412/556] damn namespaces #841 --- kratos.gid/apps/PfemFluid/write/write.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/PfemFluid/write/write.tcl b/kratos.gid/apps/PfemFluid/write/write.tcl index 4bac79d85..1b575e1e7 100644 --- a/kratos.gid/apps/PfemFluid/write/write.tcl +++ b/kratos.gid/apps/PfemFluid/write/write.tcl @@ -64,7 +64,7 @@ proc PfemFluid::write::writeMeshes { } { proc PfemFluid::write::writeNodalConditions { keyword } { - write::writeNodalConditions $keyword + ::write::writeNodalConditions $keyword } proc PfemFluid::write::GetPartsUN { } { From 169359e14dd8a0ab585041e6627dd5c9520be2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 23 Sep 2021 11:57:31 +0200 Subject: [PATCH 413/556] not running yet --- kratos.gid/apps/ShallowWater/app.json | 6 +- kratos.gid/apps/ShallowWater/start.tcl | 63 +++++-------------- .../apps/ShallowWater/xml/Conditions.xml | 43 +++++++++---- .../ShallowWater/xml/InitialConditions.spd | 2 +- .../apps/ShallowWater/xml/NodalConditions.xml | 8 ++- kratos.gid/apps/ShallowWater/xml/Procs.spd | 35 ----------- .../apps/ShallowWater/xml/XmlController.tcl | 31 +++------ 7 files changed, 65 insertions(+), 123 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 74e190e1c..bd9b1a303 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -1,6 +1,6 @@ { "id": "Shallow", - "name": "ShallowWater", + "name": "Shallow water", "prefix": "SW", "themed": false, "kratos_name": "ShallowWaterApplication", @@ -8,7 +8,7 @@ "start.tcl", "xml/XmlController.tcl" ], - "start_script":"::ShallowWater::Init", + "start_script":"::Shallow::Init", "requirements":{}, "permissions": { "open_tree": true, @@ -17,7 +17,7 @@ "wizard": false }, "unique_names": { - "parts": "FLParts", + "parts": "SWParts", "topography_data": "SWTopographicData", "initial_conditions": "SWInitialConditions", "conditions": "SWConditions", diff --git a/kratos.gid/apps/ShallowWater/start.tcl b/kratos.gid/apps/ShallowWater/start.tcl index 339214021..773d1cfc5 100644 --- a/kratos.gid/apps/ShallowWater/start.tcl +++ b/kratos.gid/apps/ShallowWater/start.tcl @@ -1,57 +1,22 @@ -namespace eval ::ShallowWater { +namespace eval ::Shallow { + Kratos::AddNamespace [namespace current] + # Variable declaration + variable _app variable dir - variable prefix - variable attributes - variable app_id - variable kratos_name -} - -proc ::ShallowWater::Init { } { - # Variable initialization - variable dir - variable prefix - variable attributes - variable kratos_name - set app_id "ShallowWater" - set kratos_name "ShallowWaterApplication" - -# apps::LoadAppById "Fluid" - - set dir [apps::getMyDir "ShallowWater"] - set attributes [dict create] - set prefix SW - - spdAux::SetSpatialDimmension "2D" - - # Allow to open the tree - set ::spdAux::TreeVisibility 1 - dict set attributes UseIntervals 0 - - LoadMyFiles - - Kratos::AddRestoreVar "::GidPriv(DuplicateEntities)" - set ::GidPriv(DuplicateEntities) 1 + proc GetAttribute {name} {variable _app; return [$_app getProperty $name]} + proc GetUniqueName {name} {variable _app; return [$_app getUniqueName $name]} + proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } -proc ::ShallowWater::LoadMyFiles { } { +proc ::Shallow::Init {app} { + # Variable initialization + variable _app variable dir + set _app $app + set dir [apps::getMyDir "Shallow"] - uplevel #0 [list source [file join $dir xml XmlController.tcl]] -# uplevel #0 [list source [file join $dir write write.tcl]] -# uplevel #0 [list source [file join $dir write writeProjectParameters.tcl]] -} - -proc ::ShallowWater::GetAttribute {name} { - variable attributes - set value "" - catch {set value [dict get $attributes $name]} - return $value -} - -proc ::ShallowWater::CustomToolbarItems { } { -# Kratos::ToolbarAddItem "Example" "example.png" [list -np- ::ShallowWater::examples::DamBreak] [= "Example\nDamBreak"] + ::Shallow::xml::Init + # ::Shallow::write::Init } - -::ShallowWater::Init diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 3218a09ec..300f7b791 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -1,6 +1,21 @@ - + @@ -9,16 +24,22 @@ - - - - - - - - - - + diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd index 30841c143..1a34bc7b8 100644 --- a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 348789ca1..808bdf8c0 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -1,6 +1,12 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/Procs.spd b/kratos.gid/apps/ShallowWater/xml/Procs.spd index e4acdfbeb..da863d2cf 100644 --- a/kratos.gid/apps/ShallowWater/xml/Procs.spd +++ b/kratos.gid/apps/ShallowWater/xml/Procs.spd @@ -1,38 +1,3 @@ - - - - - 1} { - foreach group [lrange $childs 1 end] {$group delete} - gid_groups_conds::actualize_conditions_window - error "You can only set one part" - } - ]]> - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 38ad944fe..c0e522cb7 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -1,17 +1,11 @@ -namespace eval ShallowWater::xml { - # Namespace variables declaration - variable dir - variable lastImportMeshSize - variable export_dir +namespace eval ::Shallow::xml { + namespace path ::Shallow + Kratos::AddNamespace [namespace current] } -proc ShallowWater::xml::Init { } { - # Namespace variables inicialization - variable dir - Model::DestroyEverything - Model::InitVariables dir $ShallowWater::dir +proc ::Shallow::xml::Init {} { + Model::InitVariables dir $::Shallow::dir - Model::getSolutionStrategies Strategies.xml Model::getElements "../../Common/xml/Elements.xml" Model::getConditions Conditions.xml Model::getNodalConditions NodalConditions.xml @@ -20,20 +14,11 @@ proc ShallowWater::xml::Init { } { Model::getSolvers "../../Common/xml/Solvers.xml" } -# proc ShallowWater::xml::MultiAppEvent {args} { -# if {$args eq "init"} { -# spdAux::parseRoutes -# spdAux::ConvertAllUniqueNames FL ${::ShallowWater::prefix} -# } -# } - -proc ShallowWater::xml::getUniqueName {name} { - return ${::ShallowWater::prefix}${name} +proc ::Shallow::xml::getUniqueName {name} { + return [::Shallow::GetAttribute prefix]${name} } -# proc ShallowWater::xml::CustomTree { args } { +# proc ::Shallow::xml::CustomTree {args} { # spdAux::SetValueOnTreeItem state normal FLGravity # spdAux::SetValueOnTreeItem state normal FLTimeParameters # } - -ShallowWater::xml::Init From 6d01e927746629c91a7423173c2542b1f1b0c115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 23 Sep 2021 12:22:19 +0200 Subject: [PATCH 414/556] fix misleading names --- kratos.gid/apps/ShallowWater/app.json | 4 ++-- kratos.gid/apps/ShallowWater/start.tcl | 10 +++++----- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 14 +++++++------- kratos.gid/kratos_default.spd | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index bd9b1a303..7f4c80b26 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -1,5 +1,5 @@ { - "id": "Shallow", + "id": "ShallowWater", "name": "Shallow water", "prefix": "SW", "themed": false, @@ -8,7 +8,7 @@ "start.tcl", "xml/XmlController.tcl" ], - "start_script":"::Shallow::Init", + "start_script":"::ShallowWater::Init", "requirements":{}, "permissions": { "open_tree": true, diff --git a/kratos.gid/apps/ShallowWater/start.tcl b/kratos.gid/apps/ShallowWater/start.tcl index 773d1cfc5..3eeaba4f9 100644 --- a/kratos.gid/apps/ShallowWater/start.tcl +++ b/kratos.gid/apps/ShallowWater/start.tcl @@ -1,4 +1,4 @@ -namespace eval ::Shallow { +namespace eval ::ShallowWater { Kratos::AddNamespace [namespace current] # Variable declaration @@ -10,13 +10,13 @@ namespace eval ::Shallow { proc GetWriteProperty {name} {variable _app; return [$_app getWriteProperty $name]} } -proc ::Shallow::Init {app} { +proc ::ShallowWater::Init {app} { # Variable initialization variable _app variable dir set _app $app - set dir [apps::getMyDir "Shallow"] + set dir [apps::getMyDir "ShallowWater"] - ::Shallow::xml::Init - # ::Shallow::write::Init + ::ShallowWater::xml::Init + # ::ShallowWater::write::Init } diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index c0e522cb7..dcad3807d 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -1,10 +1,10 @@ -namespace eval ::Shallow::xml { - namespace path ::Shallow +namespace eval ::ShallowWater::xml { + namespace path ::ShallowWater Kratos::AddNamespace [namespace current] } -proc ::Shallow::xml::Init {} { - Model::InitVariables dir $::Shallow::dir +proc ::ShallowWater::xml::Init {} { + Model::InitVariables dir $::ShallowWater::dir Model::getElements "../../Common/xml/Elements.xml" Model::getConditions Conditions.xml @@ -14,11 +14,11 @@ proc ::Shallow::xml::Init {} { Model::getSolvers "../../Common/xml/Solvers.xml" } -proc ::Shallow::xml::getUniqueName {name} { - return [::Shallow::GetAttribute prefix]${name} +proc ::ShallowWater::xml::getUniqueName {name} { + return [::ShallowWater::GetAttribute prefix]${name} } -# proc ::Shallow::xml::CustomTree {args} { +# proc ::ShallowWater::xml::CustomTree {args} { # spdAux::SetValueOnTreeItem state normal FLGravity # spdAux::SetValueOnTreeItem state normal FLTimeParameters # } diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index ed430ae97..dd30b7ea1 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -29,7 +29,7 @@ - + From 955b9e96ef2e82b50c6327c149771204c4f523e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 23 Sep 2021 12:45:25 +0200 Subject: [PATCH 415/556] set dimension --- kratos.gid/apps/ShallowWater/app.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 7f4c80b26..45286b7df 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -4,6 +4,9 @@ "prefix": "SW", "themed": false, "kratos_name": "ShallowWaterApplication", + "dimensions": [ + "2D" + ], "script_files": [ "start.tcl", "xml/XmlController.tcl" From b5c3c98be2cd88a113d1476ccb0e120773494af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 23 Sep 2021 15:24:24 +0200 Subject: [PATCH 416/556] modify some confitions --- .../apps/ShallowWater/xml/Conditions.xml | 22 ------------------- .../apps/ShallowWater/xml/NodalConditions.xml | 11 +++++++--- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 300f7b791..865dd7c07 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -47,26 +47,4 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 808bdf8c0..c75790cd8 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -7,8 +7,13 @@ App="ShallowWater" Type="Initial" ImplementedInApplication="ShallowWaterApplication"> - - - + + From 8ca49fbef13cdf49834634ae96e4cf78b99b3f78 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 24 Sep 2021 13:27:10 +0200 Subject: [PATCH 417/556] hotfix intervals --- kratos.gid/apps/Fluid/xml/XmlController.tcl | 2 -- kratos.gid/scripts/Controllers/TreeInjections.tcl | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/kratos.gid/apps/Fluid/xml/XmlController.tcl b/kratos.gid/apps/Fluid/xml/XmlController.tcl index 5ca8d805e..cb28e5bcf 100644 --- a/kratos.gid/apps/Fluid/xml/XmlController.tcl +++ b/kratos.gid/apps/Fluid/xml/XmlController.tcl @@ -91,10 +91,8 @@ proc ::Fluid::xml::CreateNewInlet { base_group_name {interval_data {new true nam W "Warning - Couldn't find property Inlet $prop" } } - } - proc ::Fluid::xml::ClearInlets { delete_groups {fluid_conditions_UN FLBC} {inlet_condition_name_base AutomaticInlet} } { set nd $::Model::SpatialDimension diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 7b94145bc..8c0fffc76 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -253,7 +253,7 @@ proc spdAux::_injectCondsToTree {basenode cond_list {cond_type "normal"} args } append node [GetParameterValueString $in $forcedParams $cnd] } set CondUsesIntervals [$cnd getAttribute "Interval"] - if {$app_uses_intervals && $CondUsesIntervals ne "False"} { + if {$app_uses_intervals && ![write::isBooleanFalse $CondUsesIntervals]} { set state normal if {$initial_conds_flag} { set CondUsesIntervals Initial From 7be2a97c92104080912c7d17f297c020b7ac3840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 24 Sep 2021 14:00:02 +0200 Subject: [PATCH 418/556] replace some icons --- .../apps/ShallowWater/images/channel_inlet.png | Bin 0 -> 707 bytes kratos.gid/apps/ShallowWater/images/land.png | Bin 0 -> 745 bytes kratos.gid/apps/ShallowWater/images/wave.png | Bin 0 -> 555 bytes .../apps/ShallowWater/xml/BoundaryConditions.spd | 2 +- .../apps/ShallowWater/xml/InitialConditions.spd | 2 +- kratos.gid/apps/ShallowWater/xml/Main.spd | 6 +++--- kratos.gid/apps/ShallowWater/xml/Parts.spd | 4 ++-- .../apps/ShallowWater/xml/SolutionStrategy.spd | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/images/channel_inlet.png create mode 100644 kratos.gid/apps/ShallowWater/images/land.png create mode 100644 kratos.gid/apps/ShallowWater/images/wave.png diff --git a/kratos.gid/apps/ShallowWater/images/channel_inlet.png b/kratos.gid/apps/ShallowWater/images/channel_inlet.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc849a7f104fd82677869497584673675dd5040 GIT binary patch literal 707 zcmV;!0zCbRP)e+E!@lgrq14D}o9N zQu?3^At-`wx(KSfpce}1Dhj-@Zj*=#!@h1(36z3BA#|js4O6kKrsAB=_oEA)%(-Em z%jbE{;hYDKU@Zh-2XX)fkbnW`KmwQt%ydF3Y=Co_m<>RY9}idFYB}TddX=;jn_}|^n&!ucT=9{9MxWnj;pYg>k_r^NGfhocmD~--J^RmI zaEEF>{pxx#mfT3st|RV(-A6GN7cg~=sqS|A?_MJItv6#lA!UK1xa`%=d+#6l4%X!X zLR2?)eMZR8WM>ODkDuJ)ax6|)wim7b7a}n?60Wrrn3Lmwq%TxhbMl{vt6X8`Z1Lw` zmRpU1cmK^!LD2ZxCR7zEJ=aDRMHDIMB*?))GJ}gKZhqro0v{TdH3BYXw8D;ub^*|= zh62Gt>mVX?XAC40_!uI{Alvyu8FS>aH~yx!@#^i?m7cUVgbsM~t?k)_Qem3H=$rG_ zUA+GGC8U+DSq%kBHd$H~DJrrF=!V%B8I7H&zcVnLoMmdPe5O`byYpqe!>Sw-LIh3I p9EvaM?a^tY`Lx>G%~EGp@D~dFzm3{bIk^A;002ovPDHLkV1gFCIK~y-6g_BQ66j2<#YHD4?Box|Oky3~*2B{T6 z5O@gcW=NEWpeP|D2rN+O5sLRCHM<}QcB&43TE zfT#k2RDULj6pxM_BJ4bT;5N6Cz>jtH-IMv~RC|6GTb^71l( z*+gQscV;Fo01v>*=<7jjJ0_`~+N`3obl~&4{&CGP+SUxC&9ba8Kvf_xRuu@09Vskq z1ytDyNm~Cr5i6=|$`u}8WB#EN!GfClby-rr4UG@a4n`v5gOSL1LrKYDS%|%<1Cq8q zI+nr6?Ou8)i^EiI(pT-)*@mDQe#3-`XJ zHn$ADZ}Mv6xxW~R2_O#GZZ@Z6j~CZRlw_r%pr%3NPuM^_RR?~jrLq5RZ-?y5KEJu# znltrypB4W#Wh~8q`u_g;^z!7pWgzMIE)Pr00000NkvXXu0mjfXiQaZ literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ShallowWater/images/wave.png b/kratos.gid/apps/ShallowWater/images/wave.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebff29e857ff4f8008d7893fadb1eec75328fc0 GIT binary patch literal 555 zcmV+`0@VG9P)E z`|;#AGs1ZU@PQnl0R>o~1^fnn0Zl(fa1fn-_(l;dPbsDu}vtKCtRFR&CTj9yPjI zl=A!uNq-Y5mhVib^qsyuK6MwkmNJCu@ydPWd!b(}ozzbDzjd^mGW=v`8Qjw}Ng`B) zZGEs&^BCv8;%ps}*K&JpySLF$?-Ba{Pn1x?XWzGjYHz+;(?&066#z~Q3w!g`ngTdj z8ru|O9%mDnhlh(3FXKdixwX3cz(vhf=WO?@iG0#Jw{WmndG)8%IdfxuH&l&iRw0uP tcU_z-Igu||-l1fxmDd|@=PLjF&?#;!Z1(*>5iI}!002ovPDHLkV1m*P?7aX0 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd index ca1f6d701..ee44e459b 100644 --- a/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/BoundaryConditions.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd index 1a34bc7b8..ffa8646a7 100644 --- a/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd +++ b/kratos.gid/apps/ShallowWater/xml/InitialConditions.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index b1c8f5659..f0876ebe8 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,10 +1,10 @@ - + - - + + diff --git a/kratos.gid/apps/ShallowWater/xml/Parts.spd b/kratos.gid/apps/ShallowWater/xml/Parts.spd index 08e6f3379..59305faf0 100644 --- a/kratos.gid/apps/ShallowWater/xml/Parts.spd +++ b/kratos.gid/apps/ShallowWater/xml/Parts.spd @@ -1,3 +1,3 @@ - - \ No newline at end of file + + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 389690e67..5c4c66e43 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,8 +1,8 @@ - + - + From a7f02386fbc755f8d19601a5666177fa6151610a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 12:14:39 +0200 Subject: [PATCH 419/556] parts --- kratos.gid/apps/ShallowWater/xml/Parts.spd | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Parts.spd b/kratos.gid/apps/ShallowWater/xml/Parts.spd index 59305faf0..a241c418e 100644 --- a/kratos.gid/apps/ShallowWater/xml/Parts.spd +++ b/kratos.gid/apps/ShallowWater/xml/Parts.spd @@ -1,3 +1,11 @@ - + + + + + + + + + From 2b56ae1552880f96e4ce6b3512b221c038c3495a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 14:50:49 +0200 Subject: [PATCH 420/556] add materials --- kratos.gid/apps/ShallowWater/app.json | 3 ++- kratos.gid/apps/ShallowWater/xml/Main.spd | 1 + kratos.gid/apps/ShallowWater/xml/Materials.spd | 4 ++++ kratos.gid/apps/ShallowWater/xml/Materials.xml | 13 +++++++++++++ kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 1 + 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/ShallowWater/xml/Materials.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Materials.xml diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 45286b7df..33a77173a 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -21,6 +21,7 @@ }, "unique_names": { "parts": "SWParts", + "materials": "SWMaterials", "topography_data": "SWTopographicData", "initial_conditions": "SWInitialConditions", "conditions": "SWConditions", @@ -29,7 +30,7 @@ }, "write": { "coordinates": "all", - "materials_file": "TopographicMaterials.json", + "materials_file": "TopographyMaterials.json", "properties_location": "json", "model_part_name": "main_model_part", "output_model_part_name": "main_model_part" diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index f0876ebe8..176e66da8 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -7,4 +7,5 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/Materials.spd b/kratos.gid/apps/ShallowWater/xml/Materials.spd new file mode 100644 index 000000000..827c138ed --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Materials.spd @@ -0,0 +1,4 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Materials.xml b/kratos.gid/apps/ShallowWater/xml/Materials.xml new file mode 100644 index 000000000..5909c9bb5 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Materials.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index dcad3807d..efc2b3448 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -8,6 +8,7 @@ proc ::ShallowWater::xml::Init {} { Model::getElements "../../Common/xml/Elements.xml" Model::getConditions Conditions.xml + Model::getMaterials Materials.xml Model::getNodalConditions NodalConditions.xml Model::getProcesses "../../Common/xml/Processes.xml" Model::getProcesses Processes.xml From 97569fcdf64f7e310ff6d68f259e44f3a5a056d6 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 15:29:57 +0200 Subject: [PATCH 421/556] fixing tree initial conditions --- kratos.gid/apps/ShallowWater/xml/Main.spd | 1 + kratos.gid/apps/ShallowWater/xml/Materials.xml | 4 ++-- kratos.gid/apps/ShallowWater/xml/NodalConditions.xml | 10 ++++++---- kratos.gid/apps/ShallowWater/xml/Parts.spd | 2 +- kratos.gid/apps/ShallowWater/xml/TopographicData.spd | 2 +- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 10 +++++----- 6 files changed, 16 insertions(+), 13 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 176e66da8..4f761725c 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -7,5 +7,6 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/Materials.xml b/kratos.gid/apps/ShallowWater/xml/Materials.xml index 5909c9bb5..cd61318f8 100644 --- a/kratos.gid/apps/ShallowWater/xml/Materials.xml +++ b/kratos.gid/apps/ShallowWater/xml/Materials.xml @@ -2,12 +2,12 @@ - + - + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index c75790cd8..a0a6cfb12 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -6,14 +6,16 @@ ProcessName="InitialWaterLevelProcess" App="ShallowWater" Type="Initial" - ImplementedInApplication="ShallowWaterApplication"> + ImplementedInApplication="ShallowWaterApplication" + Interval="Initial"> + Type="TopographicData" + ImplementedInApplication="ShallowWaterApplication" + Interval="False"> diff --git a/kratos.gid/apps/ShallowWater/xml/Parts.spd b/kratos.gid/apps/ShallowWater/xml/Parts.spd index a241c418e..52f2d4b0b 100644 --- a/kratos.gid/apps/ShallowWater/xml/Parts.spd +++ b/kratos.gid/apps/ShallowWater/xml/Parts.spd @@ -1,6 +1,6 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd index 672c55e86..3c6444596 100644 --- a/kratos.gid/apps/ShallowWater/xml/TopographicData.spd +++ b/kratos.gid/apps/ShallowWater/xml/TopographicData.spd @@ -1,4 +1,4 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index efc2b3448..845c6cd20 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -16,10 +16,10 @@ proc ::ShallowWater::xml::Init {} { } proc ::ShallowWater::xml::getUniqueName {name} { - return [::ShallowWater::GetAttribute prefix]${name} + return [GetAttribute prefix]${name} } -# proc ::ShallowWater::xml::CustomTree {args} { - # spdAux::SetValueOnTreeItem state normal FLGravity - # spdAux::SetValueOnTreeItem state normal FLTimeParameters -# } +proc ::ShallowWater::xml::CustomTree {args} { + gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] +} From 054888b9676b476226e2fae8880ed6aab2ea1db3 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 15:54:44 +0200 Subject: [PATCH 422/556] Tree things --- kratos.gid/apps/ShallowWater/xml/AnalysisType.spd | 7 +++++++ kratos.gid/apps/ShallowWater/xml/Conditions.xml | 10 ++++++---- kratos.gid/apps/ShallowWater/xml/NodalConditions.xml | 4 ++++ kratos.gid/apps/ShallowWater/xml/Processes.xml | 6 +++--- kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 10 +++++----- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 2 ++ 6 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/xml/AnalysisType.spd diff --git a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd new file mode 100644 index 000000000..126d66748 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd @@ -0,0 +1,7 @@ + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 865dd7c07..3768b5960 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -15,13 +15,14 @@ ProcessName="AssignVectorVariableProcess" help="" units="m^2/s" - unit_magnitude="Flow_rate"> + unit_magnitude="L^2/T"> - + + + unit_magnitude="L"> - + + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index a0a6cfb12..9b12440f3 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -17,5 +17,9 @@ Type="TopographicData" ImplementedInApplication="ShallowWaterApplication" Interval="False"> + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index 39fc835a1..1069b1159 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -11,7 +11,7 @@ - + @@ -19,14 +19,14 @@ - + - + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 5c4c66e43..cc70a7582 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,17 +1,17 @@ - - - + + + - + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 845c6cd20..daf364712 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -22,4 +22,6 @@ proc ::ShallowWater::xml::getUniqueName {name} { proc ::ShallowWater::xml::CustomTree {args} { gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] + + gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'MOMENTUM'\]" [list state normal] } From 7c33b4e76b5d88e200f6c48332cddeaf980b66b6 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 16:31:43 +0200 Subject: [PATCH 423/556] mdpa write --- kratos.gid/apps/ShallowWater/app.json | 3 +- kratos.gid/apps/ShallowWater/start.tcl | 2 +- kratos.gid/apps/ShallowWater/write/write.tcl | 122 +++++++++++++++++++ 3 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/write/write.tcl diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 33a77173a..ec7054b8b 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -9,7 +9,8 @@ ], "script_files": [ "start.tcl", - "xml/XmlController.tcl" + "xml/XmlController.tcl", + "write/write.tcl" ], "start_script":"::ShallowWater::Init", "requirements":{}, diff --git a/kratos.gid/apps/ShallowWater/start.tcl b/kratos.gid/apps/ShallowWater/start.tcl index 3eeaba4f9..68eb33a08 100644 --- a/kratos.gid/apps/ShallowWater/start.tcl +++ b/kratos.gid/apps/ShallowWater/start.tcl @@ -18,5 +18,5 @@ proc ::ShallowWater::Init {app} { set dir [apps::getMyDir "ShallowWater"] ::ShallowWater::xml::Init - # ::ShallowWater::write::Init + ::ShallowWater::write::Init } diff --git a/kratos.gid/apps/ShallowWater/write/write.tcl b/kratos.gid/apps/ShallowWater/write/write.tcl new file mode 100644 index 000000000..4084b08da --- /dev/null +++ b/kratos.gid/apps/ShallowWater/write/write.tcl @@ -0,0 +1,122 @@ +namespace eval ::ShallowWater::write { + namespace path ::ShallowWater + Kratos::AddNamespace [namespace current] + + variable ConditionsDictGroupIterators + variable writeAttributes +} + +proc ::ShallowWater::write::Init { } { + variable ConditionsDictGroupIterators + set ConditionsDictGroupIterators [dict create ] + variable writeAttributes + set writeAttributes [dict create] + + SetAttribute parts_un [GetUniqueName parts] + SetAttribute materials_un [GetUniqueName materials] + SetAttribute initial_conditions_un [GetUniqueName initial_conditions] + SetAttribute nodal_conditions_un [GetUniqueName topography_data] + SetAttribute conditions_un [GetUniqueName conditions] + + SetAttribute main_launch_file [ShallowWater::GetAttribute main_launch_file] + SetAttribute properties_location [GetWriteProperty properties_location] + SetAttribute materials_file [GetWriteProperty materials_file] + SetAttribute model_part_name [GetWriteProperty model_part_name] +} + + +# MDPA write event +proc ::ShallowWater::write::writeModelPartEvent { } { + # Validation + set err [Validate] + if {$err ne ""} {error $err} + + # Init data + ::write::initWriteConfiguration [GetAttributes] + + # Headers + ::write::writeModelPartData + writeProperties + + # Nodal Coordinates + ::write::writeNodalCoordinates + + # Element connectivities + ::write::writeElementConnectivities + + # Conditions + ::ShallowWater::write::writeConditions + + # SubmodelParts + ShallowWater::write::writeSubModelParts +} + +proc ::ShallowWater::write::writeConditions { } { + variable ConditionsDictGroupIterators + set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] +} + +proc ::ShallowWater::write::writeSubModelParts {} { + + write::writePartSubModelPart + + write::writeNodalConditions [GetAttribute nodal_conditions_un] + write::writeNodalConditions [GetAttribute initial_conditions_un] + + WriteConditionsSubModelParts +} + +proc ::ShallowWater::write::WriteConditionsSubModelParts { } { + 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] + 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" + } + } +} + +# MDPA Blocks +proc ::ShallowWater::write::writeProperties { } { + # Begin Properties + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" +} + + +proc ::ShallowWater::write::Validate {} { + set err "" + + return $err +} + +proc ::ShallowWater::write::GetAttribute {att} { + variable writeAttributes + return [dict get $writeAttributes $att] +} + +proc ::ShallowWater::write::GetAttributes {} { + variable writeAttributes + return $writeAttributes +} + +proc ::ShallowWater::write::SetAttribute {att val} { + variable writeAttributes + dict set writeAttributes $att $val +} + +proc ::ShallowWater::write::AddAttribute {att val} { + variable writeAttributes + dict lappend writeAttributes $att $val +} + +proc ::ShallowWater::write::AddAttributes {configuration} { + variable writeAttributes + set writeAttributes [dict merge $writeAttributes $configuration] +} \ No newline at end of file From be925cbb87173e6f21f8509ec342fd9cbbb60ba9 Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 16:42:13 +0200 Subject: [PATCH 424/556] init project parameters --- kratos.gid/apps/ShallowWater/app.json | 3 +- .../write/writeProjectParameters.tcl | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index ec7054b8b..e134b22d3 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -10,7 +10,8 @@ "script_files": [ "start.tcl", "xml/XmlController.tcl", - "write/write.tcl" + "write/write.tcl", + "write/writeProjectParameters.tcl" ], "start_script":"::ShallowWater::Init", "requirements":{}, diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl new file mode 100644 index 000000000..6aaf240d9 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -0,0 +1,47 @@ +# Project Parameters +proc ::Structural::write::getParametersDict { } { + set projectParametersDict [dict create] + + # Set the problem data section + dict set projectParametersDict problem_data [ShallowWater::write::GetProblemDataDict] + + # Solver settings + dict set projectParametersDict solver_settings [ConvectionDiffusion::write::GetSolverSettingsDict] + + set processes [dict create] + # Boundary conditions processes + dict set processes initial_conditions_process_list [write::getConditionsParametersDict [GetAttribute nodal_conditions_un] "Nodal"] + dict set processes constraints_process_list [write::getConditionsParametersDict [GetAttribute conditions_un]] + + dict set projectParametersDict processes $processes + + # Output configuration + dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict] + + return $projectParametersDict +} + +proc ::ShallowWater::write::writeParametersEvent { } { + write::WriteJSON [::ShallowWater::write::getParametersDict] +} + + + +proc ::ShallowWater::write::GetProblemDataDict { } { + + # First section -> Problem data + set problem_data_dict [dict create] + set model_name [Kratos::GetModelName] + dict set problem_data_dict problem_name $model_name + + # Parallelization + set paralleltype [write::getValue ParallelType] + dict set problem_data_dict parallel_type $paralleltype + + # Time step + set timeSteppingDict [dict create] + dict set problem_data_dict start_time [write::getValue SWTimeParameters StartTime] + dict set problem_data_dict end_time [write::getValue SWTimeParameters EndTime] + + return $problem_data_dict +} \ No newline at end of file From 8e0acaaf982cc61cf224017596933ca0c3d0e46b Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 16:47:56 +0200 Subject: [PATCH 425/556] project parameters and materials --- kratos.gid/apps/ShallowWater/write/write.tcl | 13 +++++++++++++ .../ShallowWater/write/writeProjectParameters.tcl | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/write.tcl b/kratos.gid/apps/ShallowWater/write/write.tcl index 4084b08da..e1141d5ba 100644 --- a/kratos.gid/apps/ShallowWater/write/write.tcl +++ b/kratos.gid/apps/ShallowWater/write/write.tcl @@ -96,6 +96,19 @@ proc ::ShallowWater::write::Validate {} { return $err } + +proc ::ShallowWater::write::writeCustomFilesEvent { } { + # Write the fluid materials json file + ::ShallowWater::write::WriteMaterialsFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] +} +# Custom files +proc ::ShallowWater::write::WriteMaterialsFile { {write_const_law False} {include_modelpart_name True} } { + set model_part_name "" + if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} + write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name +} + proc ::ShallowWater::write::GetAttribute {att} { variable writeAttributes return [dict get $writeAttributes $att] diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 6aaf240d9..5cb39a17f 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -1,12 +1,12 @@ # Project Parameters -proc ::Structural::write::getParametersDict { } { +proc ::ShallowWater::write::getParametersDict { } { set projectParametersDict [dict create] # Set the problem data section dict set projectParametersDict problem_data [ShallowWater::write::GetProblemDataDict] # Solver settings - dict set projectParametersDict solver_settings [ConvectionDiffusion::write::GetSolverSettingsDict] + # dict set projectParametersDict solver_settings [ConvectionDiffusion::write::GetSolverSettingsDict] set processes [dict create] # Boundary conditions processes From 6516eacec0cfd92bb1215d27b55d073dec422abc Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 28 Sep 2021 16:51:35 +0200 Subject: [PATCH 426/556] place app inside fluid launcher --- kratos.gid/apps/FluidLauncher/app.json | 2 +- kratos.gid/apps/FluidLauncher/start.tcl | 4 ++-- kratos.gid/apps/ShallowWater/app.json | 3 ++- kratos.gid/kratos_default.spd | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/FluidLauncher/app.json b/kratos.gid/apps/FluidLauncher/app.json index 500a6a824..29da94213 100644 --- a/kratos.gid/apps/FluidLauncher/app.json +++ b/kratos.gid/apps/FluidLauncher/app.json @@ -6,7 +6,7 @@ ], "start_script":"::FluidLauncher::Init", "requeriments":{ - "apps_exist":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], + "apps_exist":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM","ShallowWater"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index 2a80afa3b..85f366365 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -8,7 +8,7 @@ proc ::FluidLauncher::Init { app } { variable available_apps # TODO: Get apps from json - set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM] + set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM ShallowWater] ::FluidLauncher::FluidAppSelectorWindow } @@ -50,7 +50,7 @@ proc ::FluidLauncher::FluidAppSelectorWindow { } { ttk::frame $w.applications -relief ridge set r 0 set c 0 - set max_cols 3 + set max_cols 4 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index e134b22d3..44254972d 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -37,5 +37,6 @@ "model_part_name": "main_model_part", "output_model_part_name": "main_model_part" }, - "main_launch_file": "python/MainKratos.py" + "main_launch_file": "python/MainKratos.py", + "description": "this appli" } diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index dd30b7ea1..db1e7a297 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -29,7 +29,7 @@ - + From 481ceb69825ae391282a1e45ce5375a147bc6089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 17:22:05 +0200 Subject: [PATCH 427/556] write mdpa simplifications --- kratos.gid/apps/ShallowWater/write/write.tcl | 53 ++++++-------------- 1 file changed, 16 insertions(+), 37 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/write.tcl b/kratos.gid/apps/ShallowWater/write/write.tcl index e1141d5ba..6e4cb1e15 100644 --- a/kratos.gid/apps/ShallowWater/write/write.tcl +++ b/kratos.gid/apps/ShallowWater/write/write.tcl @@ -24,8 +24,6 @@ proc ::ShallowWater::write::Init { } { SetAttribute model_part_name [GetWriteProperty model_part_name] } - -# MDPA write event proc ::ShallowWater::write::writeModelPartEvent { } { # Validation set err [Validate] @@ -36,7 +34,9 @@ proc ::ShallowWater::write::writeModelPartEvent { } { # Headers ::write::writeModelPartData - writeProperties + ::write::WriteString "Begin Properties 0" + ::write::WriteString "End Properties" + ::write::WriteString "" # Nodal Coordinates ::write::writeNodalCoordinates @@ -44,11 +44,16 @@ proc ::ShallowWater::write::writeModelPartEvent { } { # Element connectivities ::write::writeElementConnectivities - # Conditions - ::ShallowWater::write::writeConditions + # Conditions connectivities + writeConditions # SubmodelParts - ShallowWater::write::writeSubModelParts + writeSubModelParts +} + +proc ::ShallowWater::write::Validate {} { + set err "" + return $err } proc ::ShallowWater::write::writeConditions { } { @@ -57,12 +62,9 @@ proc ::ShallowWater::write::writeConditions { } { } proc ::ShallowWater::write::writeSubModelParts {} { - - write::writePartSubModelPart - - write::writeNodalConditions [GetAttribute nodal_conditions_un] - write::writeNodalConditions [GetAttribute initial_conditions_un] - + ::write::writePartSubModelPart + ::write::writeNodalConditions [GetAttribute nodal_conditions_un] + ::write::writeNodalConditions [GetAttribute initial_conditions_un] WriteConditionsSubModelParts } @@ -81,33 +83,10 @@ proc ::ShallowWater::write::WriteConditionsSubModelParts { } { } } -# MDPA Blocks -proc ::ShallowWater::write::writeProperties { } { - # Begin Properties - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - write::WriteString "" -} - - -proc ::ShallowWater::write::Validate {} { - set err "" - - return $err -} - - proc ::ShallowWater::write::writeCustomFilesEvent { } { - # Write the fluid materials json file - ::ShallowWater::write::WriteMaterialsFile + write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] false [GetAttribute model_part_name] write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } -# Custom files -proc ::ShallowWater::write::WriteMaterialsFile { {write_const_law False} {include_modelpart_name True} } { - set model_part_name "" - if {[write::isBooleanTrue $include_modelpart_name]} {set model_part_name [GetAttribute model_part_name]} - write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] $write_const_law $model_part_name -} proc ::ShallowWater::write::GetAttribute {att} { variable writeAttributes @@ -132,4 +111,4 @@ proc ::ShallowWater::write::AddAttribute {att val} { proc ::ShallowWater::write::AddAttributes {configuration} { variable writeAttributes set writeAttributes [dict merge $writeAttributes $configuration] -} \ No newline at end of file +} From c839ecf3182c1218af9e199e831fea600c80c02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 17:31:17 +0200 Subject: [PATCH 428/556] hide generic element, show materials, descriptions --- kratos.gid/apps/ShallowWater/xml/Parts.spd | 5 ++--- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Parts.spd b/kratos.gid/apps/ShallowWater/xml/Parts.spd index 52f2d4b0b..a6c9464bf 100644 --- a/kratos.gid/apps/ShallowWater/xml/Parts.spd +++ b/kratos.gid/apps/ShallowWater/xml/Parts.spd @@ -1,11 +1,10 @@ - + - + - diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index daf364712..9678993ad 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -20,8 +20,10 @@ proc ::ShallowWater::xml::getUniqueName {name} { } proc ::ShallowWater::xml::CustomTree {args} { + # Set the nodal conditions active gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] + # Register the outputs from topography data gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'MOMENTUM'\]" [list state normal] } From ce3f584846c5378375ab7e506a403dcb6c397b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 17:41:03 +0200 Subject: [PATCH 429/556] add default values --- kratos.gid/apps/ShallowWater/xml/NodalConditions.xml | 5 ++++- kratos.gid/apps/ShallowWater/xml/Processes.xml | 4 ++-- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 4 ++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 9b12440f3..2cfb1cf50 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -18,8 +18,11 @@ ImplementedInApplication="ShallowWaterApplication" Interval="False"> - + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index 1069b1159..e1df7b17b 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -19,7 +19,7 @@ - + @@ -31,4 +31,4 @@ - \ No newline at end of file + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 9678993ad..3465b6e08 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -26,4 +26,8 @@ proc ::ShallowWater::xml::CustomTree {args} { # Register the outputs from topography data gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'MOMENTUM'\]" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'VELOCITY'\]" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'HEIGHT'\]" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'TOPOGRAPHY'\]" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'FREE_SURFACE_ELEVATION'\]" [list state normal] } From d363a12e838c2ef52da64217e6f6647f1d065ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 28 Sep 2021 18:23:41 +0200 Subject: [PATCH 430/556] write project parameters --- kratos.gid/apps/ShallowWater/write/write.tcl | 4 +- .../write/writeProjectParameters.tcl | 61 ++++++++++++++----- .../apps/ShallowWater/xml/Processes.xml | 2 +- .../ShallowWater/xml/SolutionStrategy.spd | 12 ++-- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/write.tcl b/kratos.gid/apps/ShallowWater/write/write.tcl index 6e4cb1e15..73a7d3213 100644 --- a/kratos.gid/apps/ShallowWater/write/write.tcl +++ b/kratos.gid/apps/ShallowWater/write/write.tcl @@ -15,7 +15,7 @@ proc ::ShallowWater::write::Init { } { SetAttribute parts_un [GetUniqueName parts] SetAttribute materials_un [GetUniqueName materials] SetAttribute initial_conditions_un [GetUniqueName initial_conditions] - SetAttribute nodal_conditions_un [GetUniqueName topography_data] + SetAttribute topography_data_un [GetUniqueName topography_data] SetAttribute conditions_un [GetUniqueName conditions] SetAttribute main_launch_file [ShallowWater::GetAttribute main_launch_file] @@ -63,7 +63,7 @@ proc ::ShallowWater::write::writeConditions { } { proc ::ShallowWater::write::writeSubModelParts {} { ::write::writePartSubModelPart - ::write::writeNodalConditions [GetAttribute nodal_conditions_un] + ::write::writeNodalConditions [GetAttribute topography_data_un] ::write::writeNodalConditions [GetAttribute initial_conditions_un] WriteConditionsSubModelParts } diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 5cb39a17f..2413841f9 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -1,32 +1,30 @@ # Project Parameters +proc ::ShallowWater::write::writeParametersEvent { } { + write::WriteJSON [getParametersDict] +} + proc ::ShallowWater::write::getParametersDict { } { set projectParametersDict [dict create] # Set the problem data section - dict set projectParametersDict problem_data [ShallowWater::write::GetProblemDataDict] + dict set projectParametersDict problem_data [GetProblemDataDict] # Solver settings - # dict set projectParametersDict solver_settings [ConvectionDiffusion::write::GetSolverSettingsDict] + dict set projectParametersDict solver_settings [GetSolverSettingsDict] + # Regular processes set processes [dict create] - # Boundary conditions processes - dict set processes initial_conditions_process_list [write::getConditionsParametersDict [GetAttribute nodal_conditions_un] "Nodal"] - dict set processes constraints_process_list [write::getConditionsParametersDict [GetAttribute conditions_un]] - + dict set processes topography_process_list [write::getConditionsParametersDict [GetAttribute topography_data_un] "Nodal"] + dict set processes initial_conditions_process_list [write::getConditionsParametersDict [GetAttribute initial_conditions_un] "Nodal"] + dict set processes boundary_conditions_process_list [write::getConditionsParametersDict [GetAttribute conditions_un]] dict set projectParametersDict processes $processes - # Output configuration + # Output processes dict set projectParametersDict output_processes [write::GetDefaultOutputProcessDict] return $projectParametersDict } -proc ::ShallowWater::write::writeParametersEvent { } { - write::WriteJSON [::ShallowWater::write::getParametersDict] -} - - - proc ::ShallowWater::write::GetProblemDataDict { } { # First section -> Problem data @@ -44,4 +42,39 @@ proc ::ShallowWater::write::GetProblemDataDict { } { dict set problem_data_dict end_time [write::getValue SWTimeParameters EndTime] return $problem_data_dict -} \ No newline at end of file +} + +proc ::ShallowWater::write::GetSolverSettingsDict { } { + # General data + set solverSettingsDict [dict create] + dict set solverSettingsDict solver_type "stabilized_shallow_water_solver" + dict set solverSettingsDict model_part_name [GetAttribute model_part_name] + dict set solverSettingsDict domain_size 2 + + # Model import settings + set modelImportDict [dict create] + dict set modelImportDict input_type "mdpa" + dict set modelImportDict input_filename [Kratos::GetModelName] + dict set solverSettingsDict model_import_settings $modelImportDict + + # Materials + set materialsDict [dict create] + dict set materialsDict materials_filename [GetAttribute materials_file] + dict set solverSettingsDict material_import_settings $materialsDict + + # set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict CNVDFFSolStrat CNVDFFScheme CNVDFFStratParams] ] + # set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict ConvectionDiffusion] ] + + # Time stepping settings + set timeSteppingDict [dict create] + if {[write::getValue SWAutomaticDeltaTime] eq "Yes"} { + dict set timeSteppingDict courant_number [write::getValue SWTimeParameters CFLNumber] + dict set timeSteppingDict maximum_delta_time [write::getValue SWTimeParameters MaximumDeltaTime] + dict set timeSteppingDict minimum_delta_time [write::getValue SWTimeParameters MinimumDeltaTime] + } else { + dict set timeSteppingDict time_step [write::getValue SWTimeParameters DeltaTime] + } + dict set solverSettingsDict time_stepping $timeSteppingDict + + return $solverSettingsDict +} diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index e1df7b17b..80b479bc8 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -19,7 +19,7 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index cc70a7582..304856690 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,5 +1,5 @@ - + - + From 5194fff7e5621a6a43d381ee4b70b2f00e4cabb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 30 Sep 2021 16:31:08 +0200 Subject: [PATCH 432/556] not print topography always --- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 3465b6e08..747e8e3be 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -24,10 +24,9 @@ proc ::ShallowWater::xml::CustomTree {args} { gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] - # Register the outputs from topography data + # Register the primary outputs from topography data gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'MOMENTUM'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'VELOCITY'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'HEIGHT'\]" [list state normal] - gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'TOPOGRAPHY'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'FREE_SURFACE_ELEVATION'\]" [list state normal] } From b9e6d8c9a447181112fb4e7a664d2eb0bc590b4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 5 Oct 2021 16:48:12 +0200 Subject: [PATCH 433/556] update problemtype --- .../apps/ShallowWater/write/writeProjectParameters.tcl | 6 +++++- kratos.gid/apps/ShallowWater/xml/Conditions.xml | 6 ------ kratos.gid/apps/ShallowWater/xml/Materials.xml | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 827ca1f4e..2c5999c47 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -36,10 +36,14 @@ proc ::ShallowWater::write::GetProblemDataDict { } { set paralleltype [write::getValue ParallelType] dict set problem_data_dict parallel_type $paralleltype - # Time step + # Time settings set timeSteppingDict [dict create] dict set problem_data_dict start_time [write::getValue SWTimeParameters StartTime] dict set problem_data_dict end_time [write::getValue SWTimeParameters EndTime] + + # Write the echo level in the problem data section + set echo_level [write::getValue Results EchoLevel] + dict set problem_data_dict echo_level $echo_level return $problem_data_dict } diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 3768b5960..ad70b482c 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -8,9 +8,6 @@ App="ShallowWater" Type="BoundaryCondition" ElementType="Line" - WorkingSpaceDimension="2D" - LocalSpaceDimension="1" - SkinConditions="True" VariableName="MOMENTUM" ProcessName="AssignVectorVariableProcess" help="" @@ -33,9 +30,6 @@ App="ShallowWater" Type="BoundaryCondition" ElementType="Line" - WorkingSpaceDimension="2D" - LocalSpaceDimension="1" - SkinConditions="True" VariableName="HEIGHT" ProcessName="AssignScalarVariableProcess" help="" diff --git a/kratos.gid/apps/ShallowWater/xml/Materials.xml b/kratos.gid/apps/ShallowWater/xml/Materials.xml index cd61318f8..b3887d682 100644 --- a/kratos.gid/apps/ShallowWater/xml/Materials.xml +++ b/kratos.gid/apps/ShallowWater/xml/Materials.xml @@ -2,12 +2,12 @@ - + - + From 1ca77f6568ade1082083cc21a09698a089177467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Tue, 5 Oct 2021 17:03:36 +0200 Subject: [PATCH 434/556] minor --- kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 2c5999c47..fa863238f 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -44,7 +44,7 @@ proc ::ShallowWater::write::GetProblemDataDict { } { # Write the echo level in the problem data section set echo_level [write::getValue Results EchoLevel] dict set problem_data_dict echo_level $echo_level - + return $problem_data_dict } From 48f231b0bd06544cbb3e091214997f8493b5c37b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 10:38:12 +0200 Subject: [PATCH 435/556] add description --- kratos.gid/apps/ShallowWater/app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 44254972d..409a782e2 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -38,5 +38,5 @@ "output_model_part_name": "main_model_part" }, "main_launch_file": "python/MainKratos.py", - "description": "this appli" + "description": "Tools for the simulation of free surface flows under the shallow water assumptions." } From 1eb53aa4e330dc7f417086f9d7238774ca5f1117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 10:38:38 +0200 Subject: [PATCH 436/556] initial example shallow water --- .../apps/ShallowWater/examples/DamBreak.tcl | 69 +++++++++++++++++++ .../apps/ShallowWater/examples/examples.tcl | 4 ++ .../apps/ShallowWater/examples/examples.xml | 6 ++ 3 files changed, 79 insertions(+) create mode 100644 kratos.gid/apps/ShallowWater/examples/DamBreak.tcl create mode 100644 kratos.gid/apps/ShallowWater/examples/examples.tcl create mode 100644 kratos.gid/apps/ShallowWater/examples/examples.xml diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl new file mode 100644 index 000000000..d04266035 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -0,0 +1,69 @@ +namespace eval ::ShallowWater::examples::DamBreak { + namespace path ::ShallowWater::examples + Kratos::AddNamespace [namespace current] +} + +proc ::ShallowWater::examples::DamBreak::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + DrawGeometry + AssignGroups + TreeAssignation + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +proc ::ShallowWater::examples::DamBreak::DrawGeometry {args} { + Kratos::ResetModel + GiD_Layers create main_layer + GiD_Layers edit to_use main_layer + + # Geometry creation + ## Points ## + set coordinates [list 0 0 0 10 0 0 10 1 0 0 1 0] + set geom_points [list ] + foreach {x y z} $coordinates { + lappend geom_points [GiD_Geometry create point append main_layer $x $y $z] + } + + ## Lines ## + set geom_lines [list ] + set initial [lindex $geom_points 0] + foreach point [lrange $geom_points 1 end] { + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial $point] + set initial $point + } + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points 0]] + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines escape escape +} + +proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { + # Create and assign the groups + GiD_Groups create Body + GiD_Groups edit color Body "#26d1a8ff" + GiD_EntitiesGroups assign Body surfaces 1 + + GiD_Groups create Walls + GiD_Groups edit color Left_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Left_Wall lines 1 3 + + GiD_Groups create Left + GiD_Groups edit color Top_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Top_Wall lines 4 + + GiD_Groups create Right + GiD_Groups edit color Right_Wall "#3b3b3bff" + GiD_EntitiesGroups assign Right_Wall lines 2 +} + +proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { + +} diff --git a/kratos.gid/apps/ShallowWater/examples/examples.tcl b/kratos.gid/apps/ShallowWater/examples/examples.tcl new file mode 100644 index 000000000..a5d7ee15a --- /dev/null +++ b/kratos.gid/apps/ShallowWater/examples/examples.tcl @@ -0,0 +1,4 @@ +namespace eval ::ShallowWater::examples { + namespace path ::ShallowWater + Kratos::AddNamespace [namespace current] +} diff --git a/kratos.gid/apps/ShallowWater/examples/examples.xml b/kratos.gid/apps/ShallowWater/examples/examples.xml new file mode 100644 index 000000000..c1c3c1531 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/examples/examples.xml @@ -0,0 +1,6 @@ + + + + + + From 88dee9955d586db835ab2bd4786105406e8295f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 10:38:54 +0200 Subject: [PATCH 437/556] register examples --- kratos.gid/apps/Examples/xml/examples.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/Examples/xml/examples.xml b/kratos.gid/apps/Examples/xml/examples.xml index dcdcb6e4e..7ca5de691 100644 --- a/kratos.gid/apps/Examples/xml/examples.xml +++ b/kratos.gid/apps/Examples/xml/examples.xml @@ -21,4 +21,5 @@ + From 6053482a2806e7371163ed8fe627af15d3052301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 11:25:39 +0200 Subject: [PATCH 438/556] add benchmark --- kratos.gid/apps/ShallowWater/app.json | 1 + .../apps/ShallowWater/examples/DamBreak.tcl | 51 ++++++++++++++++--- .../apps/ShallowWater/xml/Benchmarks.spd | 4 ++ kratos.gid/apps/ShallowWater/xml/Main.spd | 1 + .../apps/ShallowWater/xml/NodalConditions.xml | 11 ++++ .../apps/ShallowWater/xml/Processes.xml | 8 +++ .../apps/ShallowWater/xml/XmlController.tcl | 1 + 7 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/xml/Benchmarks.spd diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 409a782e2..fd13c1d14 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -24,6 +24,7 @@ "unique_names": { "parts": "SWParts", "materials": "SWMaterials", + "benchmarks": "SWBenchmarks", "topography_data": "SWTopographicData", "initial_conditions": "SWInitialConditions", "conditions": "SWConditions", diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index d04266035..6045d717c 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -52,18 +52,57 @@ proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { GiD_EntitiesGroups assign Body surfaces 1 GiD_Groups create Walls - GiD_Groups edit color Left_Wall "#3b3b3bff" - GiD_EntitiesGroups assign Left_Wall lines 1 3 + GiD_Groups edit color Walls "#3b3b3bff" + GiD_EntitiesGroups assign Walls lines 1 3 GiD_Groups create Left - GiD_Groups edit color Top_Wall "#3b3b3bff" - GiD_EntitiesGroups assign Top_Wall lines 4 + GiD_Groups edit color Left "#3b3b3bff" + GiD_EntitiesGroups assign Left lines 4 GiD_Groups create Right - GiD_Groups edit color Right_Wall "#3b3b3bff" - GiD_EntitiesGroups assign Right_Wall lines 2 + GiD_Groups edit color Right "#3b3b3bff" + GiD_EntitiesGroups assign Right lines 2 } proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { + # Parts + set parts [spdAux::getRoute "SWParts"] + set part_node [customlib::AddConditionGroupOnXPath $parts Body] + set props [list Element Element2D Material Concrete MANNING 0.01] + spdAux::SetValuesOnBaseNode $part_node $props + + # Nodal Conditions + set nodal_conditions [spdAux::getRoute "SWBenchmarks"] + set benchmark_cond "$nodal_conditions/condition\[@n='DamBreakBenchmark'\]" + GiD_Groups create "Body//Benchmark" ### Creo que no hace falta + GiD_Groups edit state "Body//Benchmark" hidden ### Creo que no hace falta + spdAux::AddIntervalGroup Body "Body//Benchmark" ### Creo que no hace falta + set benchmark_node [customlib::AddConditionGroupOnXPath $thermalnodcond Body] + $benchmark_node setAttribute ov surface + set props [list value 303.15 Interval Initial] ### Con los valores por defecto de Kratos ya va bien + spdAux::SetValuesOnBaseNode $thermalnodNode $props + + # Conditions + set boundary_conditions [spdAux::getRoute "SWConditions"] + set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Walls] + $flow_rate_node setAttribute ov line + set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Right] + $flow_rate_node setAttribute ov line + set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: X impuesto, Y libre + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Left] + $flow_rate_node setAttribute ov line + set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + # Refresh + spdAux::RequestRefresh } diff --git a/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd b/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd new file mode 100644 index 000000000..987e6697d --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd @@ -0,0 +1,4 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 4f761725c..8cb979c32 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,6 +1,7 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 2cfb1cf50..4e86afda7 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -25,4 +25,15 @@ + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index 80b479bc8..01c2abfdf 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -31,4 +31,12 @@ + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 747e8e3be..939b4c200 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -21,6 +21,7 @@ proc ::ShallowWater::xml::getUniqueName {name} { proc ::ShallowWater::xml::CustomTree {args} { # Set the nodal conditions active + gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName benchmarks]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] From 2702a9aa5afdceabfa575d29798a7bb0fd9ba073 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 6 Oct 2021 14:53:32 +0200 Subject: [PATCH 439/556] Load examples --- kratos.gid/apps/ShallowWater/app.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index fd13c1d14..7b81ea217 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -11,7 +11,9 @@ "start.tcl", "xml/XmlController.tcl", "write/write.tcl", - "write/writeProjectParameters.tcl" + "write/writeProjectParameters.tcl", + "examples/examples.tcl", + "examples/DamBreak.tcl" ], "start_script":"::ShallowWater::Init", "requirements":{}, From 1b164d075c971898a8f8daed99dee54e24ef6567 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 6 Oct 2021 14:53:40 +0200 Subject: [PATCH 440/556] Set ImposedFlowRate false Z --- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 939b4c200..8eac110a0 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -30,4 +30,7 @@ proc ::ShallowWater::xml::CustomTree {args} { gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'VELOCITY'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'HEIGHT'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'FREE_SURFACE_ELEVATION'\]" [list state normal] + + # + gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName conditions]]/condition\[@n = 'ImposedFlowRate'\]/value\[@n = 'selector_component_Z'\]" [list v Not] } From 45c152c3035e5c9e4b4f051ef905e780bdabfb85 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 6 Oct 2021 15:43:39 +0200 Subject: [PATCH 441/556] example fixes --- .../apps/ShallowWater/examples/DamBreak.tcl | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index 6045d717c..f1ba54fbe 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -53,7 +53,7 @@ proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { GiD_Groups create Walls GiD_Groups edit color Walls "#3b3b3bff" - GiD_EntitiesGroups assign Walls lines 1 3 + GiD_EntitiesGroups assign Walls lines [list 1 3] GiD_Groups create Left GiD_Groups edit color Left "#3b3b3bff" @@ -69,39 +69,37 @@ proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { # Parts set parts [spdAux::getRoute "SWParts"] set part_node [customlib::AddConditionGroupOnXPath $parts Body] - set props [list Element Element2D Material Concrete MANNING 0.01] + set props [list Element Element2D Material Concrete] spdAux::SetValuesOnBaseNode $part_node $props # Nodal Conditions - set nodal_conditions [spdAux::getRoute "SWBenchmarks"] - set benchmark_cond "$nodal_conditions/condition\[@n='DamBreakBenchmark'\]" - GiD_Groups create "Body//Benchmark" ### Creo que no hace falta - GiD_Groups edit state "Body//Benchmark" hidden ### Creo que no hace falta - spdAux::AddIntervalGroup Body "Body//Benchmark" ### Creo que no hace falta - set benchmark_node [customlib::AddConditionGroupOnXPath $thermalnodcond Body] - $benchmark_node setAttribute ov surface - set props [list value 303.15 Interval Initial] ### Con los valores por defecto de Kratos ya va bien - spdAux::SetValuesOnBaseNode $thermalnodNode $props + # set nodal_conditions [spdAux::getRoute "SWBenchmarks"] + # set benchmark_cond "$nodal_conditions/condition\[@n='DamBreakBenchmark'\]" + # set benchmark_node [customlib::AddConditionGroupOnXPath $thermalnodcond Body] + # $benchmark_node setAttribute ov surface + # set props [list value 303.15] ### Con los valores por defecto de Kratos ya va bien + # spdAux::SetValuesOnBaseNode $thermalnodNode $props # Conditions set boundary_conditions [spdAux::getRoute "SWConditions"] set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" - set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Walls] + spdAux::AddIntervalGroup Walls "Walls//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] $flow_rate_node setAttribute ov line - set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre + set props [list value_component_X 303.15 selector_component_Y Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props - set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" - set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Right] - $flow_rate_node setAttribute ov line - set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: X impuesto, Y libre - spdAux::SetValuesOnBaseNode $flow_rate_node $props - - set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" - set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Left] - $flow_rate_node setAttribute ov line - set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre - spdAux::SetValuesOnBaseNode $flow_rate_node $props + # set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Right] + # $flow_rate_node setAttribute ov line + # set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: X impuesto, Y libre + # spdAux::SetValuesOnBaseNode $flow_rate_node $props + + # set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Left] + # $flow_rate_node setAttribute ov line + # set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre + # spdAux::SetValuesOnBaseNode $flow_rate_node $props # Refresh spdAux::RequestRefresh From 38a09f780cf8214f83652ad6f94bcf9c6e0c7d5b Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 6 Oct 2021 15:49:04 +0200 Subject: [PATCH 442/556] fix element name --- kratos.gid/apps/ShallowWater/examples/DamBreak.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index f1ba54fbe..4c48117c0 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -69,7 +69,7 @@ proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { # Parts set parts [spdAux::getRoute "SWParts"] set part_node [customlib::AddConditionGroupOnXPath $parts Body] - set props [list Element Element2D Material Concrete] + set props [list Element GENERIC_ELEMENT Material Concrete] spdAux::SetValuesOnBaseNode $part_node $props # Nodal Conditions From 5f65caa4cc5f0a2e80fa2a0a7b9ed3c1888e7d26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 16:14:44 +0200 Subject: [PATCH 443/556] move shallow water to main window --- kratos.gid/apps/FluidLauncher/app.json | 2 +- kratos.gid/apps/FluidLauncher/start.tcl | 4 ++-- kratos.gid/kratos_default.spd | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/FluidLauncher/app.json b/kratos.gid/apps/FluidLauncher/app.json index 29da94213..500a6a824 100644 --- a/kratos.gid/apps/FluidLauncher/app.json +++ b/kratos.gid/apps/FluidLauncher/app.json @@ -6,7 +6,7 @@ ], "start_script":"::FluidLauncher::Init", "requeriments":{ - "apps_exist":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM","ShallowWater"], + "apps_exist":["Fluid","EmbeddedFluid", "PotentialFluid", "Buoyancy", "ConjugateHeatTransfer", "FluidDEM"], "minimum_gid_version":"15.1.3d" }, "permissions": { diff --git a/kratos.gid/apps/FluidLauncher/start.tcl b/kratos.gid/apps/FluidLauncher/start.tcl index 85f366365..2a80afa3b 100644 --- a/kratos.gid/apps/FluidLauncher/start.tcl +++ b/kratos.gid/apps/FluidLauncher/start.tcl @@ -8,7 +8,7 @@ proc ::FluidLauncher::Init { app } { variable available_apps # TODO: Get apps from json - set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM ShallowWater] + set available_apps [list Fluid EmbeddedFluid PotentialFluid Buoyancy ConjugateHeatTransfer FluidDEM] ::FluidLauncher::FluidAppSelectorWindow } @@ -50,7 +50,7 @@ proc ::FluidLauncher::FluidAppSelectorWindow { } { ttk::frame $w.applications -relief ridge set r 0 set c 0 - set max_cols 4 + set max_cols 3 foreach app $available_apps { set img [::apps::getImgFrom $app] set app_publicname [[::apps::getAppById $app] getPublicName] diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index db1e7a297..dd30b7ea1 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -29,7 +29,7 @@ - + From f7b24bdedee111aa1ab9f04eb5ef5603f164d4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 16:22:04 +0200 Subject: [PATCH 444/556] remove benchmark processes --- kratos.gid/apps/ShallowWater/app.json | 1 - kratos.gid/apps/ShallowWater/xml/Benchmarks.spd | 4 ---- kratos.gid/apps/ShallowWater/xml/Main.spd | 1 - kratos.gid/apps/ShallowWater/xml/NodalConditions.xml | 11 ----------- kratos.gid/apps/ShallowWater/xml/Processes.xml | 8 -------- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 3 +-- 6 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 kratos.gid/apps/ShallowWater/xml/Benchmarks.spd diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 7b81ea217..7a59440cc 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -26,7 +26,6 @@ "unique_names": { "parts": "SWParts", "materials": "SWMaterials", - "benchmarks": "SWBenchmarks", "topography_data": "SWTopographicData", "initial_conditions": "SWInitialConditions", "conditions": "SWConditions", diff --git a/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd b/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd deleted file mode 100644 index 987e6697d..000000000 --- a/kratos.gid/apps/ShallowWater/xml/Benchmarks.spd +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 8cb979c32..4f761725c 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,7 +1,6 @@ - diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 4e86afda7..2cfb1cf50 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -25,15 +25,4 @@ - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/Processes.xml b/kratos.gid/apps/ShallowWater/xml/Processes.xml index 01c2abfdf..80b479bc8 100644 --- a/kratos.gid/apps/ShallowWater/xml/Processes.xml +++ b/kratos.gid/apps/ShallowWater/xml/Processes.xml @@ -31,12 +31,4 @@ - - - - - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 8eac110a0..1a237b009 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -21,7 +21,6 @@ proc ::ShallowWater::xml::getUniqueName {name} { proc ::ShallowWater::xml::CustomTree {args} { # Set the nodal conditions active - gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName benchmarks]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] @@ -31,6 +30,6 @@ proc ::ShallowWater::xml::CustomTree {args} { gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'HEIGHT'\]" [list state normal] gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'FREE_SURFACE_ELEVATION'\]" [list state normal] - # + # Set the default value for the Z component in the boundary conditions gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName conditions]]/condition\[@n = 'ImposedFlowRate'\]/value\[@n = 'selector_component_Z'\]" [list v Not] } From 1e383e486ff7129859b2482e38876b277c62c738 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 17:10:57 +0200 Subject: [PATCH 445/556] add example --- .../apps/ShallowWater/examples/DamBreak.tcl | 105 ++++++++++++------ 1 file changed, 73 insertions(+), 32 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index 4c48117c0..a79922721 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -26,34 +26,60 @@ proc ::ShallowWater::examples::DamBreak::DrawGeometry {args} { # Geometry creation ## Points ## - set coordinates [list 0 0 0 10 0 0 10 1 0 0 1 0] - set geom_points [list ] - foreach {x y z} $coordinates { - lappend geom_points [GiD_Geometry create point append main_layer $x $y $z] + set coordinates_left [list 0 0 0 5 0 0 5 1 0 0 1 0] + set geom_points_left [list ] + foreach {x y z} $coordinates_left { + lappend geom_points_left [GiD_Geometry create point append main_layer $x $y $z] + } + + set coordinates_right [list 5 0 0 10 0 0 10 1 0 5 1 0] + set geom_points_right [list ] + foreach {x y z} $coordinates_right { + lappend geom_points_right [GiD_Geometry create point append main_layer $x $y $z] } ## Lines ## - set geom_lines [list ] - set initial [lindex $geom_points 0] - foreach point [lrange $geom_points 1 end] { - lappend geom_lines [GiD_Geometry create line append stline main_layer $initial $point] + set geom_lines_left [list ] + set initial [lindex $geom_points_left 0] + foreach point [lrange $geom_points_left 1 end] { + lappend geom_lines_left [GiD_Geometry create line append stline main_layer $initial $point] set initial $point } - lappend geom_lines [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points 0]] + lappend geom_lines_left [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points_left 0]] + + set geom_lines_right [list ] + set initial [lindex $geom_points_right 0] + foreach point [lrange $geom_points_right 1 end] { + lappend geom_lines_right [GiD_Geometry create line append stline main_layer $initial $point] + set initial $point + } + lappend geom_lines_right [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points_right 0]] ## Surface ## - GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines escape escape + GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines_left escape escape + GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines_right escape escape + + ## Remove the duplicated line + GiD_Process Mescape Utilities Collapse model Yes } proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { # Create and assign the groups GiD_Groups create Body GiD_Groups edit color Body "#26d1a8ff" - GiD_EntitiesGroups assign Body surfaces 1 + GiD_EntitiesGroups assign Body surfaces {1 2} + + GiD_Groups create Reservoir + GiD_Groups edit color Reservoir "#26d1a8ff" + GiD_EntitiesGroups assign Reservoir surfaces 1 + + GiD_Groups create Channel + GiD_Groups edit color Channel "#26d1a8ff" + GiD_EntitiesGroups assign Channel surfaces 2 GiD_Groups create Walls GiD_Groups edit color Walls "#3b3b3bff" - GiD_EntitiesGroups assign Walls lines [list 1 3] + GiD_EntitiesGroups assign Walls lines {1 3 5 7} GiD_Groups create Left GiD_Groups edit color Left "#3b3b3bff" @@ -61,7 +87,7 @@ proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { GiD_Groups create Right GiD_Groups edit color Right "#3b3b3bff" - GiD_EntitiesGroups assign Right lines 2 + GiD_EntitiesGroups assign Right lines 6 } proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { @@ -72,13 +98,28 @@ proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { set props [list Element GENERIC_ELEMENT Material Concrete] spdAux::SetValuesOnBaseNode $part_node $props - # Nodal Conditions - # set nodal_conditions [spdAux::getRoute "SWBenchmarks"] - # set benchmark_cond "$nodal_conditions/condition\[@n='DamBreakBenchmark'\]" - # set benchmark_node [customlib::AddConditionGroupOnXPath $thermalnodcond Body] - # $benchmark_node setAttribute ov surface - # set props [list value 303.15] ### Con los valores por defecto de Kratos ya va bien - # spdAux::SetValuesOnBaseNode $thermalnodNode $props + # Topography data + set topography_conditions [spdAux::getRoute "SWTopographicData"] + set topography_cond "$topography_conditions/condition\[@n='Topography'\]" + set topography_node [customlib::AddConditionGroupOnXPath $topography_cond Body] + $topography_node setAttribute ov surface + set props [list value 0.0] + spdAux::SetValuesOnBaseNode $topography_node $props + + # Initial conditions + set initial_conditions [spdAux::getRoute "SWInitialConditions"] + set initial_cond "$initial_conditions/condition\[@n='InitialWaterLevel'\]" + spdAux::AddIntervalGroup Reservoir "Reservoir//Initial" + set initial_node [customlib::AddConditionGroupOnXPath $initial_cond "Reservoir//Initial"] + $initial_node setAttribute ov surface + set props [list value 1.0 Interval Initial] + spdAux::SetValuesOnBaseNode $initial_node $props + + spdAux::AddIntervalGroup Channel "Channel//Initial" + set initial_node [customlib::AddConditionGroupOnXPath $initial_cond "Channel//Initial"] + $initial_node setAttribute ov surface + set props [list value 0.8 Interval Initial] + spdAux::SetValuesOnBaseNode $initial_node $props # Conditions set boundary_conditions [spdAux::getRoute "SWConditions"] @@ -86,20 +127,20 @@ proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { spdAux::AddIntervalGroup Walls "Walls//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] $flow_rate_node setAttribute ov line - set props [list value_component_X 303.15 selector_component_Y Not Interval Total] + set props [list selector_component_X Not value_component_Y 0.0 Interval Total] + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + spdAux::AddIntervalGroup Right "Right//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Right//Total"] + $flow_rate_node setAttribute ov line + set props [list value_component_X 0.0 selector_component_Y Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props - # set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" - # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Right] - # $flow_rate_node setAttribute ov line - # set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: X impuesto, Y libre - # spdAux::SetValuesOnBaseNode $flow_rate_node $props - - # set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" - # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond Left] - # $flow_rate_node setAttribute ov line - # set props [list value 303.15 Interval Total] ### que es esto? ASIGNAR: Y impuesto, X libre - # spdAux::SetValuesOnBaseNode $flow_rate_node $props + spdAux::AddIntervalGroup Left "Left//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Left//Total"] + $flow_rate_node setAttribute ov line + set props [list value_component_X 0.0 selector_component_Y Not Interval Total] + spdAux::SetValuesOnBaseNode $flow_rate_node $props # Refresh spdAux::RequestRefresh From beb25cab4d9a95a95ef0ed226bbdbeebe5b15957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 6 Oct 2021 22:47:46 +0200 Subject: [PATCH 446/556] update icons --- .../apps/ShallowWater/images/channel_inlet.png | Bin 707 -> 755 bytes kratos.gid/apps/ShallowWater/images/land.png | Bin 745 -> 767 bytes kratos.gid/apps/ShallowWater/images/wave.png | Bin 555 -> 599 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/images/channel_inlet.png b/kratos.gid/apps/ShallowWater/images/channel_inlet.png index 6dc849a7f104fd82677869497584673675dd5040..90e01dafd513ed983e5ea0d51d098d52d0ac8a17 100644 GIT binary patch delta 657 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 JPDHLkV1hU>N8kVe diff --git a/kratos.gid/apps/ShallowWater/images/wave.png b/kratos.gid/apps/ShallowWater/images/wave.png index 9ebff29e857ff4f8008d7893fadb1eec75328fc0..633ccc28b73cd29c332de813966e8d8c04678df0 100644 GIT binary patch delta 499 zcmV zsm11jYysQ^7Ipyu3v>QvdNxST&0W9oR!mm-8n*+8=VyH55~iRbHOzE|8f)3eW| zo)92u-+SYz<$o__cIu|9W253yu6YdfS$>fH^5wT}UqG{Bc74lt4iscOWS4q50Omgw zdHB9avFdgkuiA&g_Hyn=ZK@Z<08c({lF5}g90_n_Fi0e55e`U(LUKji$i7vt@?O4F z^L$JDX)tKjClbK}a^~E)9vcqL?iC<_@sa+!x6Yg_{A^vot4k}H*ZH5R9=SHase|Fn z+~jB)S{Cp@`o!evMC8suPL<)_)F~;1fr{3NS#VxuX+{S&X z$@}r-H#5R{1n_|zpaBI~pauK}egdv@A&CbB@nSbD@E!PdR)5fmW&sE<5MPwki_guZ z#ES)4=%IbZmWs_mM!^{YAR5Rg;$=kuXK4RIn=q8YnU#@z|G=d3{82<*jegXhA3wVP zEJc(vfWA_lEfq(`rgacZA$lM=VG6+vkS5Xk=E|EFg`wefmGdfyx^zCU>NQqv)IT0I zx>=O+{0T{a6Mrd|?@XukoxVIibr-mnGKA{!%6;W~p+0<3xYCwYvMjMa@;`Z1<~)d_dAVw{WmndG)8%IdfxuH&l&i xRw0uPcU_z-Igu||-l1fxmDd|@=PLjF&?#;!Z1(*>5iI}!002ovPDHLkV1o71)`tK9 From 10b81ac17919a3d712989b55c1eb1f7a29885240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 7 Oct 2021 11:55:01 +0200 Subject: [PATCH 447/556] add another initial condition --- .../apps/ShallowWater/xml/NodalConditions.xml | 9 ++++++ .../apps/ShallowWater/xml/Processes.xml | 28 +++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml index 2cfb1cf50..a05261b97 100644 --- a/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/NodalConditions.xml @@ -9,6 +9,15 @@ ImplementedInApplication="ShallowWaterApplication" Interval="Initial"> + + - + - + - - - - - + + + + + + + + + + + + + + + - + - + From 7f7bafe394cb04935598b126cba3ed5ca5796de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 7 Oct 2021 15:37:23 +0200 Subject: [PATCH 448/556] missing time step option --- kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl | 1 + 1 file changed, 1 insertion(+) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index fa863238f..d62f4cd57 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -71,6 +71,7 @@ proc ::ShallowWater::write::GetSolverSettingsDict { } { # Time stepping settings set timeSteppingDict [dict create] + dict set timeSteppingDict automatic_time_step [write::getValue SWAutomaticDeltaTime] if {[write::getValue SWAutomaticDeltaTime] eq "Yes"} { dict set timeSteppingDict courant_number [write::getValue SWTimeParameters CFLNumber] dict set timeSteppingDict maximum_delta_time [write::getValue SWTimeParameters MaximumDeltaTime] From b57baae724573cf10b2d623fe9e76422f2244e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 7 Oct 2021 23:46:41 +0200 Subject: [PATCH 449/556] add more logos --- .../apps/ShallowWater/examples/Waves.tcl | 99 ++++++++++++++++++ .../apps/ShallowWater/examples/examples.xml | 8 +- .../apps/ShallowWater/images/dam_break.png | Bin 0 -> 975 bytes kratos.gid/apps/ShallowWater/images/jump.png | Bin 0 -> 1648 bytes kratos.gid/apps/ShallowWater/images/logo.png | Bin 2020 -> 3771 bytes .../apps/ShallowWater/images/logo_old.png | Bin 0 -> 2020 bytes kratos.gid/apps/ShallowWater/images/waves.png | Bin 0 -> 9795 bytes 7 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 kratos.gid/apps/ShallowWater/examples/Waves.tcl create mode 100644 kratos.gid/apps/ShallowWater/images/dam_break.png create mode 100644 kratos.gid/apps/ShallowWater/images/jump.png create mode 100644 kratos.gid/apps/ShallowWater/images/logo_old.png create mode 100644 kratos.gid/apps/ShallowWater/images/waves.png diff --git a/kratos.gid/apps/ShallowWater/examples/Waves.tcl b/kratos.gid/apps/ShallowWater/examples/Waves.tcl new file mode 100644 index 000000000..aaa181388 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/examples/Waves.tcl @@ -0,0 +1,99 @@ +namespace eval ::ShallowWater::examples::Waves { + namespace path ::ShallowWater::examples + Kratos::AddNamespace [namespace current] +} + +proc ::ShallowWater::examples::Waves::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + DrawGeometry + AssignGroups + TreeAssignation + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +proc ::ShallowWater::examples::Waves::DrawGeometry {args} { + Kratos::ResetModel + GiD_Layers create main_layer + GiD_Layers edit to_use main_layer + + # Geometry creation + ## Points ## + set coordinates [list 0 0 0 10 0 0 10 10 0 0 10 0] + set geom_points [list ] + foreach {x y z} $coordinates { + lappend geom_points [GiD_Geometry create point append main_layer $x $y $z] + } + + ## Lines ## + set geom_lines [list ] + set initial [lindex $geom_points 0] + foreach point [lrange $geom_points 1 end] { + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial $point] + set initial $point + } + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points_left 0]] + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines escape escape +} + +proc ::ShallowWater::examples::Waves::AssignGroups {args} { + # Create and assign the groups + GiD_Groups create Body + GiD_Groups edit color Body "#26d1a8ff" + GiD_EntitiesGroups assign Body surfaces 1 + + GiD_Groups create Walls + GiD_Groups edit color Walls "#3b3b3bff" + GiD_EntitiesGroups assign Walls lines {1 2 3 4} +} + +proc ::ShallowWater::examples::Waves::TreeAssignation {args} { + + # Parts + set parts [spdAux::getRoute "SWParts"] + set part_node [customlib::AddConditionGroupOnXPath $parts Body] + set props [list Element GENERIC_ELEMENT Material Concrete] + spdAux::SetValuesOnBaseNode $part_node $props + + # Initial conditions + set initial_conditions [spdAux::getRoute "SWInitialConditions"] + set initial_cond "$initial_conditions/condition\[@n='InitialWaterLevel'\]" + spdAux::AddIntervalGroup Body "Body//Initial" + set initial_node [customlib::AddConditionGroupOnXPath $initial_cond "Body//Initial"] + $initial_node setAttribute ov surface + set props [list value 1.0 Interval Initial] + spdAux::SetValuesOnBaseNode $initial_node $props + + # Conditions + set boundary_conditions [spdAux::getRoute "SWConditions"] + set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + spdAux::AddIntervalGroup Walls "Walls//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] + $flow_rate_node setAttribute ov line + set props [list selector_component_X Not value_component_Y 0.0 Interval Total] + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + # spdAux::AddIntervalGroup Right "Right//Total" + # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Right//Total"] + # $flow_rate_node setAttribute ov line + # set props [list value_component_X 0.0 selector_component_Y Not Interval Total] + # spdAux::SetValuesOnBaseNode $flow_rate_node $props + + # spdAux::AddIntervalGroup Left "Left//Total" + # set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Left//Total"] + # $flow_rate_node setAttribute ov line + # set props [list value_component_X 0.0 selector_component_Y Not Interval Total] + # spdAux::SetValuesOnBaseNode $flow_rate_node $props + + # Refresh + spdAux::RequestRefresh +} diff --git a/kratos.gid/apps/ShallowWater/examples/examples.xml b/kratos.gid/apps/ShallowWater/examples/examples.xml index c1c3c1531..f325f1978 100644 --- a/kratos.gid/apps/ShallowWater/examples/examples.xml +++ b/kratos.gid/apps/ShallowWater/examples/examples.xml @@ -1,6 +1,12 @@ - + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/images/dam_break.png b/kratos.gid/apps/ShallowWater/images/dam_break.png new file mode 100644 index 0000000000000000000000000000000000000000..df3929487497dff9a24b86606b10e15199e0e343 GIT binary patch literal 975 zcmeAS@N?(olHy`uVBq!ia0vp^DIm4nJ zu+0Tw#uxhQo&g0VOI#yLg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3kz!zA_VILa z45^s&_Kv^5u%pbekLlA{S(17>)eleI{qS7%hX>sk%pY9s?sOOCm*{Pj(3kK(BGIdE zBT%&

0b+;J>m$v-VeElczpjux?*-&eW(I55DR?W!okHDQWeZESW2&0TbrjJ`}ZYU6u|D zYdO#ST0KRM%417U9dN7*t<`xyZ-oT6<3-!A&u6EKylU)nj;-)&+F~szm&$*zGrQna z+1!+F-#yQ+m>Mj--7qh2%7?Evf-6sOyJrg6_k2(Yb~(%+D)-GPa9?2F{#OtGMKQ|G zwRY^_x{@ZC?Py1`V^_8j#Zwgz=?`!SY9`!)8kl$@Sf26)i!SBCzX8k)|I|YpAKtijzcJ##lH{ZNzJ0pk@#gw6x7-`oZr-?%sQ|(k93q(s0r?_#S>pfiuLG zO>k*mfo$RgmQ`&2wUR20Qp7rPWS!!n0$#ymPrmA~c{a>$zv}BHRTfUIHU96}A3V)~M~SDI zS~S6Yev9ZBBv55pMS^fSHfM)78&qol`;+ E0Maa^vj6}9 literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ShallowWater/images/jump.png b/kratos.gid/apps/ShallowWater/images/jump.png new file mode 100644 index 0000000000000000000000000000000000000000..08d10334ab567c6fc7513e2e7faa322aa550d183 GIT binary patch literal 1648 zcmcIli#HPr7~e{s4XMM1Or8~aY#18%dWBpgk8mY1Bi3xqyw`&nTgak$Z7EF;xww?P z>P})|D360t&2y>dnJ!AYbN_^U&i&5s`@Zx2&i9?~JLfy+`{>>%SCG8AJOBUyxw|?0 zNPNVO%1TQtVVdbDaZ+)P?tZcoA z7!dX2I!w47?JTZ#3h*Spv_AIzNJNPBB7v6?=1;=Z)t>F35M;>5hsD%mX z6cpmuSB2*H%}oZ9$_LaYsVnV`lMVExHVEuZ7J3*1DUqoMJaW7g$wvwXqT? z3S-ty3_PEFIdsf|2K`$F zj}rxA;VY+2&ABq`Mpor8zPO1ZUg>nYd$_ zteNu2Z%%z{4d3VS>jUFtLS(*gW+io(ZZ{HL1sp64X_(>qF>+^dS*%JV!gsUh=|kb2 zE0+D01O->6RDoB);b79n=P4E4$Eu^g$y#bBEn90J$q2f{`F-L+9qzkODed`qIM^Jr zmk;tg%-lpr-VjEqHkbAIj=x-etX2aThQ@AK;@^CZJRAcXj)rN%HCj66a9L2E>IUYh zM@?XB$)6=Hy^Mv3Y(?(7D=^BLHVs@KJGYdbU9v_c$3J&#D(j64L;7-$lhbJ0SY}%H zZ##hUU{cRx`#ZPTORMk$mMgd`OAGNK+yF{~J_^zV z)hl=yy)JxuwUNHwx1AFcoPE8Rtgf{BeqX`;5EQFU+B5*bOC;w~ z=~VYJ)xzZh-L_rT#&3GiiUF}j%ZQX`!NeZ3{3l@d-!nWZd8xa|gBp4l7R4V>j>@BR zORvRA*T=z3Z^(F;%Iv;{3K~PFU3dJ5Lh7{-2`>o4v)O6NhK_x~mlxH3@q`!EzUOPF z)>Y~A+wN0rY>Oud++2rJvm-isAN5=^EW#q``MTar;8LM)rjcB>1ZfG-+v^Rhi#NW) z?V<&sJfOdQ7I>_~O zbMl{(d=PasxC^_o$4a39(o#~+YF&eMvy6!kMd)TbZZD!pW$%;k8=oR*F9_MRFEZj) zO&_H=5+Muyb_&edYv%P(w4VGI|1~Lr`dtv-w}kz7TP_(B>~lAPypNo=5kt`r)Ycb9 z*C)%j$tF{iA}zbO;fyOb?&*P?tbq9GsIJrbBqC)fhmZ+r(XeAb8XI*ODK+dkCf&?a z_U-7jgN|43-XBqIW81`24uFUbxvJZ-Lu?ohBPW&78St$>o52i88SdbQHddc@k($`l z+ZrKfm13=taxWd}&+D|lbOuw*V(WN$aI*XkZPz!dp1JukD(5oqXwl#(cpBPoCAMtr z89UnvsfWlQ_G^BSez2L>_<8l{i|n)A5)PqwDQD=F_3~^CjvUWFyxVxDY7$!%EwWT7kNS;hnW2q>k;eZFluY~TRv_3!ezU7jYw9PK0$Sf$GIiU%Zw|JcHN*OLl^VEQh nk8K6`f6cR}{^x^P{1do(XLH2IFzBe{I{@5WP|h`u=hFWHIG_6S literal 0 HcmV?d00001 diff --git a/kratos.gid/apps/ShallowWater/images/logo.png b/kratos.gid/apps/ShallowWater/images/logo.png index b44d924e7c99d3e4bea36d91cd15a59cca8bcaf7..2cd3177226fa056d0ded51c512f4d5e4fd4f397c 100644 GIT binary patch literal 3771 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 JTDV=*e*qLa`(pqA delta 2006 zcmV;{2Pycw9pn#?B!32COGiWi{{a60|De66lK=n!32;bRa{vGi!~g&e!~vBn4jTXf z00(qQO+^Rf3kwe)I1kjc82|tWaY;l$RCwC$ooS3+V;IMO=a{!`6h#;N5=)Dsl*FFA z4zYfyQnfX)l~^l?gana@eGQ7%2Q3RTygfpM;zPAYXMbANjcQA!LQQ+R`0&1m zGpF~?+?jjN(wXO%+}z2`ow<|$|31%i-gD0TJRT(>2qOTDR>|)*0eyi!KtEuA;2_`t zU^ie8u!DPz2W$ZT0oDMkf#twYK&$&+1grzpy)0e^FVW}ww*wTKeol_(m{1jYg*fjxmC8UGvWfE6x+J_M#2tyUEsFgPP7#>*)xP5_>9kC4avNNfqzAf&1y*dJT)uQeedcQl7;hvj- zdx4w9jQF-EJ_ zuB0!&E79SeZ*^%(=$IpbsqSn=&8f?))d-iWPJaVt^za2=qj?h;XS9lHiIkcm#F;T1 zctgzSGGl?q5;}I@kVFyR5qKAS4O{3sHwIxezU~^52(Ra{*SLl5(FEKXgwfE>qQtME zh>r%wux(sWDl-Q$3;?bT!pKjjEw93n z)%L(^z-ZAeQ&s~f8?9QaMu^L4hXQAdUYRo(xFEU2XlF>`n-|MrZf@KWgpo=XcRv{& zZqag+=#(3~0M{l1!cRrV)e;@~M@jM!IDcK#zXuKzjdJIBqt#bI7`3Y*LtQ}^^5?2J zN|MLH7l|%~ajZLUh@YtNrz2-{i(>D%RK!Jne_#*Mr7(tI_f`H^LxzeWg)=e;Bb78{ z2hpTZjs*JpK^Q6InnxKJ0rc~+cW}$vqj+`%2K(492ofRXV7QOHBVsSnqCAES5Puy? z!y!JlnTt>k_V6jTrG?NQthMTap}v$ zjybvqnLAYr-(VYx{+2#PQnw)~VD5&8xE1tv8yx zIzF#Uh9rvoMwhna+R4@|22M0uwRGo~>m4lF1Uv^^gKUojJFs}P(W)i4!IG);wGp@; zcu>6HOYD@-mRbvV77-GsF&{hp>Q!tro8HEB;0B}BntF%cH+p<`089gR?Mdw*bEbFB+}x zNt~@{s1cbPlK#hoFzSmP8+RFS@-|||LhLNt$wsRsjZROw8-G$IS_Wa~TTKAYDX9^y zZfzCDM&v~Nlg+OrzDgz&^kW*zI&hUXhI7dlqnx(Q25{YAW_BU#=9=d_SFo zgD~=dQNV@R4$r%hee1zCcNDk`_!yXCv|5pMjVPrdotU*NwvX^IU?jH5^P#|=b^htd ztsUlIcOB0Mnoo^ZKUPbxMc|dlh^>ThZP5F;$M(Q}*eA|oQrzp#PC$8YY(wEzGB07*qoM6N<$g0o_@O#lD@ diff --git a/kratos.gid/apps/ShallowWater/images/logo_old.png b/kratos.gid/apps/ShallowWater/images/logo_old.png new file mode 100644 index 0000000000000000000000000000000000000000..b44d924e7c99d3e4bea36d91cd15a59cca8bcaf7 GIT binary patch literal 2020 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 m3XCyMnT^}9u6V~ii{)0d!T(C Date: Fri, 8 Oct 2021 09:15:34 +0200 Subject: [PATCH 450/556] tab --- kratos.gid/kratos_default.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index dd30b7ea1..6abba9101 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -29,7 +29,7 @@ - + From d3f5c33f14f361f7a7e0f0fbb44f6180a18b1381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 8 Oct 2021 10:08:31 +0200 Subject: [PATCH 451/556] add second example --- kratos.gid/apps/ShallowWater/app.json | 3 +- .../apps/ShallowWater/examples/DamBreak.tcl | 2 +- .../ShallowWater/examples/HydraulicJump.tcl | 117 ++++++++++++++++++ .../apps/ShallowWater/examples/examples.xml | 2 +- 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 7a59440cc..d68a4ab1f 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -13,7 +13,8 @@ "write/write.tcl", "write/writeProjectParameters.tcl", "examples/examples.tcl", - "examples/DamBreak.tcl" + "examples/DamBreak.tcl", + "examples/HydraulicJump.tcl" ], "start_script":"::ShallowWater::Init", "requirements":{}, diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index a79922721..f54b7c299 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -60,7 +60,7 @@ proc ::ShallowWater::examples::DamBreak::DrawGeometry {args} { GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines_right escape escape ## Remove the duplicated line - GiD_Process Mescape Utilities Collapse model Yes + GiD_Process Mescape Utilities Collapse model Yes } proc ::ShallowWater::examples::DamBreak::AssignGroups {args} { diff --git a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl new file mode 100644 index 000000000..01273904c --- /dev/null +++ b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl @@ -0,0 +1,117 @@ +namespace eval ::ShallowWater::examples::HydraulicJump { + namespace path ::ShallowWater::examples + Kratos::AddNamespace [namespace current] +} + +proc ::ShallowWater::examples::HydraulicJump::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + DrawGeometry + AssignGroups + TreeAssignation + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +proc ::ShallowWater::examples::HydraulicJump::DrawGeometry {args} { + Kratos::ResetModel + GiD_Layers create main_layer + GiD_Layers edit to_use main_layer + + # Geometry creation + ## Points ## + set coordinates [list 0 0 0 100 0 0 100 4 0 0 4 0] + set geom_points [list ] + foreach {x y z} $coordinates { + lappend geom_points [GiD_Geometry create point append main_layer $x $y $z] + } + + ## Lines ## + set geom_lines [list ] + set initial [lindex $geom_points 0] + foreach point [lrange $geom_points 1 end] { + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial $point] + set initial $point + } + lappend geom_lines [GiD_Geometry create line append stline main_layer $initial [lindex $geom_points 0]] + + ## Surface ## + GiD_Process Mescape Geometry Create NurbsSurface {*}$geom_lines escape escape +} + +proc ::ShallowWater::examples::HydraulicJump::AssignGroups {args} { + # Create and assign the groups + GiD_Groups create Channel + GiD_Groups edit color Channel "#26d1a8ff" + GiD_EntitiesGroups assign Channel surfaces 1 + + GiD_Groups create Walls + GiD_Groups edit color Walls "#3b3b3bff" + GiD_EntitiesGroups assign Walls lines {1 3} + + GiD_Groups create Upstream + GiD_Groups edit color Upstream "#3b3b3bff" + GiD_EntitiesGroups assign Upstream lines 4 + + GiD_Groups create Downstream + GiD_Groups edit color Downstream "#3b3b3bff" + GiD_EntitiesGroups assign Downstream lines 2 +} + +proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { + + # Parts + set parts [spdAux::getRoute "SWParts"] + set part_node [customlib::AddConditionGroupOnXPath $parts Channel] + set props [list Element GENERIC_ELEMENT Material Concrete] + spdAux::SetValuesOnBaseNode $part_node $props + + # Topography data + set topography_conditions [spdAux::getRoute "SWTopographicData"] + set topography_cond "$topography_conditions/condition\[@n='Topography'\]" + set topography_node [customlib::AddConditionGroupOnXPath $topography_cond Channel] + $topography_node setAttribute ov surface + set props [list ByFunction 1 function_value "3*x"] + spdAux::SetValuesOnBaseNode $topography_node $props + + # Initial conditions + set initial_conditions [spdAux::getRoute "SWInitialConditions"] + set initial_cond "$initial_conditions/condition\[@n='InitialWaterLevel'\]" + spdAux::AddIntervalGroup Channel "Channel//Initial" + set initial_node [customlib::AddConditionGroupOnXPath $initial_cond "Channel//Initial"] + $initial_node setAttribute ov surface + set props [list variable_name FREE_SURFACE_ELEVATION value 2.0 Interval Initial set_minimum_height 1 minimum_height_value 1] + spdAux::SetValuesOnBaseNode $initial_node $props + + # Conditions + set boundary_conditions [spdAux::getRoute "SWConditions"] + set flow_rate_cond "$boundary_conditions/condition\[@n='ImposedFlowRate'\]" + set water_height_cond "$boundary_conditions/condition\[@n='ImposedFreeSurface'\]" + + spdAux::AddIntervalGroup Walls "Walls//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] + $flow_rate_node setAttribute ov line + set props [list selector_component_X Not value_component_Y 0.0 Interval Total] + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + spdAux::AddIntervalGroup Upstream "Upstream//Total" + set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Upstream//Total"] + $flow_rate_node setAttribute ov line + set props [list value_component_X 2.0 selector_component_Y 0.0 Interval Total] + spdAux::SetValuesOnBaseNode $flow_rate_node $props + + spdAux::AddIntervalGroup Downstream "Downstream//Total" + set free_surface_node [customlib::AddConditionGroupOnXPath $water_height_cond "Downstream//Total"] + $free_surface_node setAttribute ov line + set props [list value 2.0 Interval Total] + spdAux::SetValuesOnBaseNode $free_surface_node $props + + # Refresh + spdAux::RequestRefresh +} diff --git a/kratos.gid/apps/ShallowWater/examples/examples.xml b/kratos.gid/apps/ShallowWater/examples/examples.xml index f325f1978..6ddac7034 100644 --- a/kratos.gid/apps/ShallowWater/examples/examples.xml +++ b/kratos.gid/apps/ShallowWater/examples/examples.xml @@ -3,7 +3,7 @@ - + From 2baab15fef460586299030d1a8e8247cccd23e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 8 Oct 2021 11:39:31 +0200 Subject: [PATCH 452/556] output control and Z component --- .../apps/ShallowWater/examples/DamBreak.tcl | 16 ++++++++++++--- .../ShallowWater/examples/HydraulicJump.tcl | 20 ++++++++++++++----- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl index f54b7c299..eb495c050 100644 --- a/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl +++ b/kratos.gid/apps/ShallowWater/examples/DamBreak.tcl @@ -127,21 +127,31 @@ proc ::ShallowWater::examples::DamBreak::TreeAssignation {args} { spdAux::AddIntervalGroup Walls "Walls//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] $flow_rate_node setAttribute ov line - set props [list selector_component_X Not value_component_Y 0.0 Interval Total] + set props [list selector_component_X Not value_component_Y 0.0 selector_component_Z Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props spdAux::AddIntervalGroup Right "Right//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Right//Total"] $flow_rate_node setAttribute ov line - set props [list value_component_X 0.0 selector_component_Y Not Interval Total] + set props [list value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props spdAux::AddIntervalGroup Left "Left//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Left//Total"] $flow_rate_node setAttribute ov line - set props [list value_component_X 0.0 selector_component_Y Not Interval Total] + set props [list value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props + # Time parameters + set parameters [list EndTime 2.0] + set xpath [spdAux::getRoute "SWTimeParameters"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 0.1] + set xpath "[spdAux::getRoute Results]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]" + spdAux::SetValuesOnBasePath $xpath $parameters + # Refresh spdAux::RequestRefresh } diff --git a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl index 01273904c..386f49b48 100644 --- a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl +++ b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl @@ -77,7 +77,7 @@ proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { set topography_cond "$topography_conditions/condition\[@n='Topography'\]" set topography_node [customlib::AddConditionGroupOnXPath $topography_cond Channel] $topography_node setAttribute ov surface - set props [list ByFunction 1 function_value "3*x"] + set props [list ByFunction 1 function_value "2.45135310e-07*x**4 -4.82230477e-05*x**3 +2.54997185e-03*x**2 -4.57311854e-02*x +2.73225488e+00"] spdAux::SetValuesOnBaseNode $topography_node $props # Initial conditions @@ -86,7 +86,7 @@ proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { spdAux::AddIntervalGroup Channel "Channel//Initial" set initial_node [customlib::AddConditionGroupOnXPath $initial_cond "Channel//Initial"] $initial_node setAttribute ov surface - set props [list variable_name FREE_SURFACE_ELEVATION value 2.0 Interval Initial set_minimum_height 1 minimum_height_value 1] + set props [list variable_name FREE_SURFACE_ELEVATION value 2.8 Interval Initial set_minimum_height 1 minimum_height_value 1] spdAux::SetValuesOnBaseNode $initial_node $props # Conditions @@ -97,21 +97,31 @@ proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { spdAux::AddIntervalGroup Walls "Walls//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Walls//Total"] $flow_rate_node setAttribute ov line - set props [list selector_component_X Not value_component_Y 0.0 Interval Total] + set props [list selector_component_X Not value_component_Y 0.0 selector_component_Z Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props spdAux::AddIntervalGroup Upstream "Upstream//Total" set flow_rate_node [customlib::AddConditionGroupOnXPath $flow_rate_cond "Upstream//Total"] $flow_rate_node setAttribute ov line - set props [list value_component_X 2.0 selector_component_Y 0.0 Interval Total] + set props [list value_component_X 2.0 selector_component_Y 0.0 selector_component_Z Not Interval Total] spdAux::SetValuesOnBaseNode $flow_rate_node $props spdAux::AddIntervalGroup Downstream "Downstream//Total" set free_surface_node [customlib::AddConditionGroupOnXPath $water_height_cond "Downstream//Total"] $free_surface_node setAttribute ov line - set props [list value 2.0 Interval Total] + set props [list value 2.8 Interval Total] spdAux::SetValuesOnBaseNode $free_surface_node $props + # Time parameters + set parameters [list EndTime 50.0] + set xpath [spdAux::getRoute "SWTimeParameters"] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 1.0] + set xpath "[spdAux::getRoute Results]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]" + spdAux::SetValuesOnBasePath $xpath $parameters + # Refresh spdAux::RequestRefresh } From d0b36ad23eb9cade6f53de0dbc8c5a468b98e0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 8 Oct 2021 11:52:53 +0200 Subject: [PATCH 453/556] fix ByFunction --- kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl index 386f49b48..d6a535ec4 100644 --- a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl +++ b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl @@ -77,7 +77,7 @@ proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { set topography_cond "$topography_conditions/condition\[@n='Topography'\]" set topography_node [customlib::AddConditionGroupOnXPath $topography_cond Channel] $topography_node setAttribute ov surface - set props [list ByFunction 1 function_value "2.45135310e-07*x**4 -4.82230477e-05*x**3 +2.54997185e-03*x**2 -4.57311854e-02*x +2.73225488e+00"] + set props [list ByFunction Yes function_value "2.45135310e-07*x**4 -4.82230477e-05*x**3 +2.54997185e-03*x**2 -4.57311854e-02*x +2.73225488e+00"] spdAux::SetValuesOnBaseNode $topography_node $props # Initial conditions From 4a93b9f0d741492f217fa318dc0397e12606e37b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 8 Oct 2021 12:43:22 +0200 Subject: [PATCH 454/556] hotfix #826 --- kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd index 988040d18..675e23aee 100644 --- a/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd +++ b/kratos.gid/apps/ConvectionDiffusion/xml/Parts.spd @@ -1,5 +1,5 @@ - + From 2789cd34430cbcfc340fadac44fff261e56dc085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 8 Oct 2021 14:05:16 +0200 Subject: [PATCH 455/556] more accurate topography --- kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl index d6a535ec4..66b8d82fd 100644 --- a/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl +++ b/kratos.gid/apps/ShallowWater/examples/HydraulicJump.tcl @@ -77,7 +77,7 @@ proc ::ShallowWater::examples::HydraulicJump::TreeAssignation {args} { set topography_cond "$topography_conditions/condition\[@n='Topography'\]" set topography_node [customlib::AddConditionGroupOnXPath $topography_cond Channel] $topography_node setAttribute ov surface - set props [list ByFunction Yes function_value "2.45135310e-07*x**4 -4.82230477e-05*x**3 +2.54997185e-03*x**2 -4.57311854e-02*x +2.73225488e+00"] + set props [list ByFunction Yes function_value "4.49449786e-09*x**5 -8.78489155e-07*x**4 +5.11763010e-05*x**3 -1.12368582e-03*x**2 +4.70535924e-03*x +2.58777553"] spdAux::SetValuesOnBaseNode $topography_node $props # Initial conditions From fc1e25728f7b9dc9d112d6aa5f455b4a43d1f2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 20 Oct 2021 14:23:14 +0200 Subject: [PATCH 456/556] first try --- kratos.gid/apps/ShallowWater/xml/AnalysisType.spd | 9 ++++----- kratos.gid/apps/ShallowWater/xml/Main.spd | 1 + kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 10 ++++++++++ kratos.gid/apps/ShallowWater/xml/Strategies.xml | 5 +++-- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 1 + 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd index 126d66748..ca922d6e4 100644 --- a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd +++ b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd @@ -1,7 +1,6 @@ - - - - + + + + - diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index 4f761725c..ebc4ebae3 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,5 +1,6 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 1f1547b7d..1300d5e9f 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,13 +1,23 @@ + + + + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 8427dc42c..32b047e33 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -4,8 +4,7 @@ pn="Stabilized shallow water solver" ImplementedInFile="stabilized_shallow_water_solver.py" ImplementedInApplication="ShallowWaterApplication" - ImplementedInPythonFile="stabilized_shallow_water_solver" - MinimumKratosVersion="9000" + ImplementedInPythonFile="StabilizedShallowWaterSolver" App="ShallowWater" help=""> @@ -15,6 +14,7 @@ + @@ -25,6 +25,7 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 1a237b009..1e9ab2182 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -6,6 +6,7 @@ namespace eval ::ShallowWater::xml { proc ::ShallowWater::xml::Init {} { Model::InitVariables dir $::ShallowWater::dir + Model::getSolutionStrategies Strategies.xml Model::getElements "../../Common/xml/Elements.xml" Model::getConditions Conditions.xml Model::getMaterials Materials.xml From 835c1083925840b5d2b531032043d0d8eb810786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 20 Oct 2021 15:00:06 +0200 Subject: [PATCH 457/556] try 2 --- kratos.gid/apps/ShallowWater/xml/AnalysisType.spd | 6 ++---- kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 6 ++++++ kratos.gid/apps/ShallowWater/xml/Strategies.xml | 2 -- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd index ca922d6e4..65cba2a37 100644 --- a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd +++ b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd @@ -1,6 +1,4 @@ - - - - + + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 1300d5e9f..f2e908900 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,6 +1,12 @@ + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 32b047e33..54974a964 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -3,8 +3,6 @@ From f21f71104d83b7a1ce60da2081922598cfb81054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Wed, 20 Oct 2021 15:22:25 +0200 Subject: [PATCH 458/556] minor --- kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index f2e908900..e98534c3c 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -2,7 +2,7 @@ - + From 2de9cdf71ec1bd17e739d2538e6695560014299b Mon Sep 17 00:00:00 2001 From: jginternational Date: Thu, 21 Oct 2021 16:06:53 +0200 Subject: [PATCH 459/556] strategies and schemes --- .../apps/ShallowWater/xml/AnalysisType.spd | 8 +++- .../ShallowWater/xml/SolutionStrategy.spd | 5 --- .../apps/ShallowWater/xml/Strategies.xml | 41 +++++++++++++++++-- .../scripts/Controllers/CommonProcs.tcl | 2 +- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd index 65cba2a37..e777563bc 100644 --- a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd +++ b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd @@ -1,4 +1,10 @@ - + + + + + + + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index e98534c3c..00c24c707 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,11 +1,6 @@ - - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 54974a964..69c7694ce 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -1,9 +1,9 @@ @@ -25,7 +25,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 4cd7a1100..2d595094d 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -81,7 +81,7 @@ proc spdAux::ProcGetSolutionStrategies {domNode args} { set pnames [list ] # W $args set sols [::Model::GetSolutionStrategies {*}$args] - # W $Sols + # W $sols foreach ss $sols { lappend names [$ss getName] lappend pnames [$ss getName] From c26aea8fe643d648ecd216f79bf18e900cf1a47b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 21 Oct 2021 17:09:37 +0200 Subject: [PATCH 460/556] add strategies --- .../apps/ShallowWater/xml/AnalysisType.spd | 10 ------ kratos.gid/apps/ShallowWater/xml/Main.spd | 2 +- .../ShallowWater/xml/SolutionStrategy.spd | 2 +- .../apps/ShallowWater/xml/Strategies.xml | 33 ++++++++++--------- kratos.gid/apps/ShallowWater/xml/Strategy.spd | 5 +++ 5 files changed, 25 insertions(+), 27 deletions(-) delete mode 100644 kratos.gid/apps/ShallowWater/xml/AnalysisType.spd create mode 100644 kratos.gid/apps/ShallowWater/xml/Strategy.spd diff --git a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd b/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd deleted file mode 100644 index e777563bc..000000000 --- a/kratos.gid/apps/ShallowWater/xml/AnalysisType.spd +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/kratos.gid/apps/ShallowWater/xml/Main.spd b/kratos.gid/apps/ShallowWater/xml/Main.spd index ebc4ebae3..a4c50f049 100644 --- a/kratos.gid/apps/ShallowWater/xml/Main.spd +++ b/kratos.gid/apps/ShallowWater/xml/Main.spd @@ -1,6 +1,6 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 00c24c707..7423b97d2 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,7 +1,6 @@ - @@ -28,4 +27,5 @@ + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 69c7694ce..52b14ea49 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -1,15 +1,19 @@ - + + + @@ -18,8 +22,6 @@ - - @@ -27,24 +29,25 @@ - + - - + + @@ -53,8 +56,6 @@ - - @@ -62,10 +63,12 @@ - + + + + + - - diff --git a/kratos.gid/apps/ShallowWater/xml/Strategy.spd b/kratos.gid/apps/ShallowWater/xml/Strategy.spd new file mode 100644 index 000000000..076588252 --- /dev/null +++ b/kratos.gid/apps/ShallowWater/xml/Strategy.spd @@ -0,0 +1,5 @@ + + + + + From 2caffb093b320a83e4d3dfb88aa098d0a74d6ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 21 Oct 2021 17:49:12 +0200 Subject: [PATCH 461/556] write strategies FAILS --- .../write/writeProjectParameters.tcl | 5 +++-- .../apps/ShallowWater/xml/SolutionStrategy.spd | 2 +- .../apps/ShallowWater/xml/Strategies.xml | 18 ++++++++++++++---- kratos.gid/apps/ShallowWater/xml/Strategy.spd | 4 ++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index d62f4cd57..60d9a58b8 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -66,8 +66,9 @@ proc ::ShallowWater::write::GetSolverSettingsDict { } { dict set materialsDict materials_filename [GetAttribute materials_file] dict set solverSettingsDict material_import_settings $materialsDict - # set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict SWSolutionStrat SWScheme SWStratParams]] - # set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict ShallowWater]] + # Strategy, scheme and linear solver settings + set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict SWSolutionStrat SWScheme SWStrategyParams] ] + set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict ShallowWater] ] # Time stepping settings set timeSteppingDict [dict create] diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index 7423b97d2..e8131a67c 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 52b14ea49..3bdd32e51 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -18,10 +18,12 @@ - + + + @@ -31,6 +33,8 @@ + + @@ -52,23 +56,29 @@ - + + + - + + + - + + + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategy.spd b/kratos.gid/apps/ShallowWater/xml/Strategy.spd index 076588252..a3522943c 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/Strategy.spd @@ -1,5 +1,5 @@ - - + + From 062691985b972bfb37b2f89b229d8642229721fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 21 Oct 2021 17:50:43 +0200 Subject: [PATCH 462/556] name --- kratos.gid/apps/ShallowWater/xml/Strategies.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 3bdd32e51..2c4a091c9 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -1,10 +1,9 @@ - @@ -40,11 +39,10 @@ - From e9ac07cb87ef0188081efd2e2d2f0c97dae0a9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Thu, 21 Oct 2021 17:59:50 +0200 Subject: [PATCH 463/556] minor --- .../apps/ShallowWater/write/writeProjectParameters.tcl | 1 + kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 2 +- kratos.gid/apps/ShallowWater/xml/Strategies.xml | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 60d9a58b8..8f022ca4d 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -54,6 +54,7 @@ proc ::ShallowWater::write::GetSolverSettingsDict { } { dict set solverSettingsDict solver_type "stabilized_shallow_water_solver" dict set solverSettingsDict model_part_name [GetAttribute model_part_name] dict set solverSettingsDict domain_size 2 + dict set solverSettingsDict gravity 9.81 # Model import settings set modelImportDict [dict create] diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index e8131a67c..d47b6cece 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -17,7 +17,7 @@ - + diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 2c4a091c9..9dbf851ca 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -10,9 +10,9 @@ - + - + @@ -49,7 +49,7 @@ - + From b50519d0add3cf8ee0a61cfa40532da50cc37bd9 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 22 Oct 2021 15:42:36 +0200 Subject: [PATCH 464/556] fix sol strat --- .../apps/ShallowWater/write/writeProjectParameters.tcl | 2 +- kratos.gid/apps/ShallowWater/xml/Strategy.spd | 2 +- kratos.gid/scripts/Controllers/CommonProcs.tcl | 8 +------- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 8f022ca4d..492984b50 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -68,7 +68,7 @@ proc ::ShallowWater::write::GetSolverSettingsDict { } { dict set solverSettingsDict material_import_settings $materialsDict # Strategy, scheme and linear solver settings - set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict SWSolutionStrat SWScheme SWStrategyParams] ] + set solverSettingsDict [dict merge $solverSettingsDict [write::getSolutionStrategyParametersDict SWSolStrat SWScheme SWStrategyParams] ] set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict ShallowWater] ] # Time stepping settings diff --git a/kratos.gid/apps/ShallowWater/xml/Strategy.spd b/kratos.gid/apps/ShallowWater/xml/Strategy.spd index a3522943c..83fac0401 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/Strategy.spd @@ -1,5 +1,5 @@ - + diff --git a/kratos.gid/scripts/Controllers/CommonProcs.tcl b/kratos.gid/scripts/Controllers/CommonProcs.tcl index 2d595094d..04ac998bd 100644 --- a/kratos.gid/scripts/Controllers/CommonProcs.tcl +++ b/kratos.gid/scripts/Controllers/CommonProcs.tcl @@ -101,14 +101,8 @@ proc spdAux::ProcGetSchemes {domNode args} { set nodeApp [GetAppIdFromNode $domNode] # W $nodeApp set sol_stratUN [apps::getAppUniqueName $nodeApp SolStrat] - set sol_stat_path [spdAux::getRoute $sol_stratUN] - #if {[get_domnode_attribute [$domNode selectNodes $sol_stat_path] v] eq ""} { - #W "entra" - get_domnode_attribute [$domNode selectNodes $sol_stat_path] dict - get_domnode_attribute [$domNode selectNodes $sol_stat_path] values - #} - set solStratName [::write::getValue $sol_stratUN] + set solStratName [::write::getValue $sol_stratUN "" force] if {$solStratName eq "" } {error "No solution strategy"} #W "Unique name: $sol_stratUN - Nombre $solStratName" set schemes [::Model::GetAvailableSchemes $solStratName {*}$args] From 5dc42fbabcb3c4fe9e0779cd180bdd3eb1aad94a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Fri, 22 Oct 2021 16:26:36 +0200 Subject: [PATCH 465/556] fix name --- kratos.gid/apps/ShallowWater/xml/Strategies.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Strategies.xml b/kratos.gid/apps/ShallowWater/xml/Strategies.xml index 9dbf851ca..0019d74a5 100644 --- a/kratos.gid/apps/ShallowWater/xml/Strategies.xml +++ b/kratos.gid/apps/ShallowWater/xml/Strategies.xml @@ -30,7 +30,7 @@ - + @@ -67,7 +67,7 @@ - + From 9a8c93c0c07ccdaa9e17257bcdf29c46f6b17829 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 22 Oct 2021 16:49:48 +0200 Subject: [PATCH 466/556] Base files --- kratos.gid/apps/MdpaGenerator/app.json | 22 ++++++++++++++++++ kratos.gid/apps/MdpaGenerator/images/logo.png | Bin 0 -> 3720 bytes kratos.gid/apps/MdpaGenerator/start.tcl | 20 ++++++++++++++++ kratos.gid/apps/MdpaGenerator/xml/Main.spd | 4 ++++ kratos.gid/apps/MdpaGenerator/xml/Procs.spd | 3 +++ .../apps/MdpaGenerator/xml/XmlController.tcl | 14 +++++++++++ kratos.gid/kratos_default.spd | 1 + 7 files changed, 64 insertions(+) create mode 100644 kratos.gid/apps/MdpaGenerator/app.json create mode 100644 kratos.gid/apps/MdpaGenerator/images/logo.png create mode 100644 kratos.gid/apps/MdpaGenerator/start.tcl create mode 100644 kratos.gid/apps/MdpaGenerator/xml/Main.spd create mode 100644 kratos.gid/apps/MdpaGenerator/xml/Procs.spd create mode 100644 kratos.gid/apps/MdpaGenerator/xml/XmlController.tcl diff --git a/kratos.gid/apps/MdpaGenerator/app.json b/kratos.gid/apps/MdpaGenerator/app.json new file mode 100644 index 000000000..997f25be9 --- /dev/null +++ b/kratos.gid/apps/MdpaGenerator/app.json @@ -0,0 +1,22 @@ +{ + "id": "MdpaGenerator", + "name": "Mdpa Generator", + "script_files": [ + "start.tcl", + "xml/XmlController.tcl" + ], + "dimensions": [ + "3D" + ], + "start_script":"::MdpaGenerator::Init", + "requeriments":{ + "minimum_gid_version":"15.1.3d" + }, + "permissions": { + "open_tree": true, + "show_toolbar": true, + "intervals": false, + "wizard": false + }, + "description": "MDPA generator \n-Useful tool to generate modelparts" +} diff --git a/kratos.gid/apps/MdpaGenerator/images/logo.png b/kratos.gid/apps/MdpaGenerator/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..243957065778d8581fd974ed651898232fedee1a GIT binary patch literal 3720 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 Ul$`h37YP$E*0+Gy>Uuu + + + diff --git a/kratos.gid/apps/MdpaGenerator/xml/Procs.spd b/kratos.gid/apps/MdpaGenerator/xml/Procs.spd new file mode 100644 index 000000000..040933111 --- /dev/null +++ b/kratos.gid/apps/MdpaGenerator/xml/Procs.spd @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/kratos.gid/apps/MdpaGenerator/xml/XmlController.tcl b/kratos.gid/apps/MdpaGenerator/xml/XmlController.tcl new file mode 100644 index 000000000..b3273b76c --- /dev/null +++ b/kratos.gid/apps/MdpaGenerator/xml/XmlController.tcl @@ -0,0 +1,14 @@ +namespace eval ::MdpaGenerator::xml { + namespace path ::MdpaGenerator + Kratos::AddNamespace [namespace current] + + # Namespace variables declaration + variable dir +} + +proc ::MdpaGenerator::xml::Init { } { + # Namespace variables inicialization + variable dir + Model::InitVariables dir $::MdpaGenerator::dir + +} diff --git a/kratos.gid/kratos_default.spd b/kratos.gid/kratos_default.spd index 6abba9101..b83aa7d67 100644 --- a/kratos.gid/kratos_default.spd +++ b/kratos.gid/kratos_default.spd @@ -30,6 +30,7 @@ + From 6fd53171d5aa3edc2dfd3e196ad44d6981cc9a43 Mon Sep 17 00:00:00 2001 From: jginternational Date: Fri, 22 Oct 2021 17:17:41 +0200 Subject: [PATCH 467/556] me voy --- kratos.gid/apps/MdpaGenerator/xml/Main.spd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index cd332d8c3..8a2c2283c 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,4 +1,6 @@ + + From c00b68938eea42b732168406c899334584b6f6f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Sat, 23 Oct 2021 16:35:16 +0200 Subject: [PATCH 468/556] gravity and solver type --- kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl | 4 ++-- kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl index 492984b50..406e5b65c 100644 --- a/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/ShallowWater/write/writeProjectParameters.tcl @@ -51,10 +51,10 @@ proc ::ShallowWater::write::GetProblemDataDict { } { proc ::ShallowWater::write::GetSolverSettingsDict { } { # General data set solverSettingsDict [dict create] - dict set solverSettingsDict solver_type "stabilized_shallow_water_solver" + dict set solverSettingsDict solver_type [write::getValue SWSolStrat] dict set solverSettingsDict model_part_name [GetAttribute model_part_name] dict set solverSettingsDict domain_size 2 - dict set solverSettingsDict gravity 9.81 + dict set solverSettingsDict gravity [write::getValue SWGravity] # Model import settings set modelImportDict [dict create] diff --git a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd index d47b6cece..0c3087dcc 100644 --- a/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/ShallowWater/xml/SolutionStrategy.spd @@ -13,8 +13,8 @@ - - + + From a0c8ceea2aeb1176c6ee6469672da3ea67a143f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Sat, 23 Oct 2021 16:56:42 +0200 Subject: [PATCH 469/556] remove unused values --- kratos.gid/apps/ShallowWater/app.json | 4 +--- kratos.gid/apps/ShallowWater/xml/XmlController.tcl | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index d68a4ab1f..1a1789fea 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -29,9 +29,7 @@ "materials": "SWMaterials", "topography_data": "SWTopographicData", "initial_conditions": "SWInitialConditions", - "conditions": "SWConditions", - "gravity": "SWGravity", - "time_parameters": "SWTimeParameters" + "conditions": "SWConditions" }, "write": { "coordinates": "all", diff --git a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl index 1e9ab2182..f8f2818bd 100644 --- a/kratos.gid/apps/ShallowWater/xml/XmlController.tcl +++ b/kratos.gid/apps/ShallowWater/xml/XmlController.tcl @@ -22,8 +22,8 @@ proc ::ShallowWater::xml::getUniqueName {name} { proc ::ShallowWater::xml::CustomTree {args} { # Set the nodal conditions active - gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName topography_data]]/condition" [list state normal] - gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName initial_conditions]]/condition" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute SWTopographicData]/condition" [list state normal] + gid_groups_conds::setAttributes "[spdAux::getRoute SWInitialConditions]/condition" [list state normal] # Register the primary outputs from topography data gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'MOMENTUM'\]" [list state normal] @@ -32,5 +32,5 @@ proc ::ShallowWater::xml::CustomTree {args} { gid_groups_conds::setAttributes "[spdAux::getRoute NodalResults]/value\[@n = 'FREE_SURFACE_ELEVATION'\]" [list state normal] # Set the default value for the Z component in the boundary conditions - gid_groups_conds::setAttributes "[spdAux::getRoute [GetUniqueName conditions]]/condition\[@n = 'ImposedFlowRate'\]/value\[@n = 'selector_component_Z'\]" [list v Not] + gid_groups_conds::setAttributes "[spdAux::getRoute SWConditions]/condition\[@n = 'ImposedFlowRate'\]/value\[@n = 'selector_component_Z'\]" [list v Not] } From cd2712cca3c3b1a324f38e26f2ae83ddd829e11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Sat, 23 Oct 2021 17:19:51 +0200 Subject: [PATCH 470/556] unused values --- kratos.gid/apps/ShallowWater/xml/Conditions.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index ad70b482c..2451fb5d2 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -4,7 +4,6 @@ n="ImposedFlowRate" pn="Imposed flow rate" Interval="Total" - ImplementedInApplication="ShallowWaterApplication" App="ShallowWater" Type="BoundaryCondition" ElementType="Line" @@ -16,17 +15,12 @@ - - - - - - - - From bc8334ebd8ac64fc7c74d57713759123302c9b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Mas=C3=B3=20Sotomayor?= Date: Sat, 23 Oct 2021 17:39:55 +0200 Subject: [PATCH 471/556] add new condtition --- .../apps/ShallowWater/xml/Conditions.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/kratos.gid/apps/ShallowWater/xml/Conditions.xml b/kratos.gid/apps/ShallowWater/xml/Conditions.xml index 2451fb5d2..5a24d0715 100644 --- a/kratos.gid/apps/ShallowWater/xml/Conditions.xml +++ b/kratos.gid/apps/ShallowWater/xml/Conditions.xml @@ -3,6 +3,7 @@ + + + + + + Date: Mon, 25 Oct 2021 19:12:56 +0200 Subject: [PATCH 472/556] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3476a4ea2..1bf1843ba 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ If you need the latest release, launch your GiD, navigate to Data > Problemtype * Unix : `ln -s ~/Kratos Kratos` or maybe `ln -s ~/Kratos/bin/Release Kratos` if that's the destination folder * Windows : `mklink /J Kratos C:\kratos` or maybe `mklink /J Kratos C:\kratos\bin\Release` (choose actual Kratos installation folder) +### More information on this video +https://studio.youtube.com/video/zZq7ypDdudo/edit + ## Usage * Run GiD * Go to: Data / Problem type / kratos From 6e11bc1b9d98b015477c9852ddbc923d192525a5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 11:05:34 +0200 Subject: [PATCH 473/556] empty python --- kratos.gid/scripts/Writing/Writing.tcl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index a3b9c5033..8b6e4feea 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -6,7 +6,7 @@ namespace eval ::write { Kratos::AddNamespace [namespace current] - + variable mat_dict variable submodelparts variable MDPA_loop_control @@ -38,7 +38,7 @@ proc write::Init { } { set current_mdpa_indent_level 0 - + variable formats_dict set formats_dict [dict create] variable properties_exclusion_list @@ -103,7 +103,7 @@ proc write::writeEvent { filename } { return 1 } set inittime [clock seconds] - + # Set write formats depending on the user's configuration InitWriteFormats @@ -144,7 +144,7 @@ proc write::writeEvent { filename } { if {$time_monitor} { W "Total time: [Kratos::Duration $ttime]" } - + #### Copy main script file #### if {$errcode eq 0} { Kratos::Log "Write custom event $appid" @@ -153,7 +153,7 @@ proc write::writeEvent { filename } { #### Debug files for VSCode #### write::writeLaunchJSONFile - + Kratos::Log "Write end $appid in [Kratos::Duration $ttime]" return $errcode } @@ -680,8 +680,10 @@ proc write::CopyMainScriptFile { } { # Main python script if {[catch { set orig_name [write::GetConfigurationAttribute main_launch_file] - write::CopyFileIntoModel $orig_name - write::RenameFileInModel [file tail $orig_name] "MainKratos.py" + if {$orig_name ne ""} { + write::CopyFileIntoModel $orig_name + write::RenameFileInModel [file tail $orig_name] "MainKratos.py" + } } fid] } { W "Problem Writing $errName block:\n$fid\nEvent $wevent \nEnd problems" return errcode 1 From 55389b22839d531f4dcad9c1f98d4b95645e6699 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 11:06:01 +0200 Subject: [PATCH 474/556] typo --- kratos.gid/apps/Fluid/write/write.tcl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/write.tcl b/kratos.gid/apps/Fluid/write/write.tcl index fbc2c671f..e6964336b 100644 --- a/kratos.gid/apps/Fluid/write/write.tcl +++ b/kratos.gid/apps/Fluid/write/write.tcl @@ -1,7 +1,7 @@ namespace eval ::Fluid::write { namespace path ::Fluid Kratos::AddNamespace [namespace current] - + # Namespace variables declaration variable writeCoordinatesByGroups variable writeAttributes @@ -20,7 +20,7 @@ proc ::Fluid::write::Init { } { SetAttribute results_un [::Fluid::GetUniqueName results] SetAttribute drag_un [::Fluid::GetUniqueName drag] SetAttribute time_parameters_un [::Fluid::GetUniqueName time_parameters] - + SetAttribute writeCoordinatesByGroups [::Fluid::GetWriteProperty coordinates] SetAttribute validApps [list "Fluid"] SetAttribute main_launch_file [::Fluid::GetAttribute main_launch_file] @@ -59,8 +59,8 @@ proc ::Fluid::write::writeModelPartEvent { } { # Custom SubmodelParts variable last_condition_iterator - write::writeBasicSubmodelPartsByUniqueId $Fluid::write::FluidConditionMap $last_condition_iterator - + write::writeBasicSubmodelPartsByUniqueId $Fluid::write::FluidConditionMap $last_condition_iterator + # SubmodelParts writeMeshes From 09e2ca7bcb80a69535554cf12d376c7335967dfb Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 11:06:18 +0200 Subject: [PATCH 475/556] Not all apps must run --- kratos.gid/kratos.tcl | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index bc5dee9d2..5ae0363cc 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -151,7 +151,7 @@ proc Kratos::InitGlobalVariables {dir} { # Allow logs -> 0 No | 1 Only local | 2 Share with dev team set Kratos::kratos_private(allow_logs) 1 # git hash of the problemtype - set Kratos::kratos_private(problemtype_git_hash) 0 + set Kratos::kratos_private(problemtype_git_hash) 0 # Place were the logs will be placed set Kratos::kratos_private(model_log_folder) "" @@ -282,7 +282,7 @@ proc Kratos::Event_EndProblemtype { } { } if {[array exists ::Kratos::kratos_private]} { # Close the log and moves them to the folder - Kratos::FlushLog + Kratos::FlushLog # Restore GiD variables that were modified by kratos and must be restored (maybe mesher) Kratos::RestoreVariables @@ -307,7 +307,7 @@ proc Kratos::Event_EndProblemtype { } { } Drawer::UnregisterAll - + # Clear namespaces Kratos::DestroyNamespaces } @@ -471,6 +471,8 @@ proc Kratos::Event_BeforeRunCalculation { batfilename basename dir problemtypedi if {!$run} { return [list "-cancel-" [= "You have selected MPI parallelism system.\nInput files have been written.\nRun the MPILauncher.sh script" ]] } + set app_run_brake [apps::ExecuteOnCurrentApp BeforeRunCalculation] + if {$app_run_brake} } proc Kratos::Event_AfterWriteCalculationFile { filename errorflag } { From 09b85b461cbf0b447f36e7a606ae3bbdd848a5f3 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 11:13:41 +0200 Subject: [PATCH 476/556] write --- kratos.gid/apps/MdpaGenerator/app.json | 4 +- kratos.gid/apps/MdpaGenerator/start.tcl | 5 +- kratos.gid/apps/MdpaGenerator/write/write.tcl | 110 ++++++++++++++++++ kratos.gid/apps/MdpaGenerator/xml/Main.spd | 10 +- 4 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 kratos.gid/apps/MdpaGenerator/write/write.tcl diff --git a/kratos.gid/apps/MdpaGenerator/app.json b/kratos.gid/apps/MdpaGenerator/app.json index 997f25be9..4b08bd753 100644 --- a/kratos.gid/apps/MdpaGenerator/app.json +++ b/kratos.gid/apps/MdpaGenerator/app.json @@ -3,7 +3,8 @@ "name": "Mdpa Generator", "script_files": [ "start.tcl", - "xml/XmlController.tcl" + "xml/XmlController.tcl", + "write/write.tcl" ], "dimensions": [ "3D" @@ -18,5 +19,6 @@ "intervals": false, "wizard": false }, + "main_launch_file": null, "description": "MDPA generator \n-Useful tool to generate modelparts" } diff --git a/kratos.gid/apps/MdpaGenerator/start.tcl b/kratos.gid/apps/MdpaGenerator/start.tcl index 396079bbe..e72cc77a6 100644 --- a/kratos.gid/apps/MdpaGenerator/start.tcl +++ b/kratos.gid/apps/MdpaGenerator/start.tcl @@ -1,6 +1,6 @@ namespace eval ::MdpaGenerator { Kratos::AddNamespace [namespace current] - + # Variable declaration variable _app variable dir @@ -8,7 +8,7 @@ namespace eval ::MdpaGenerator { proc ::MdpaGenerator::Init { app } { - + # Variable initialization variable _app variable dir @@ -17,4 +17,5 @@ proc ::MdpaGenerator::Init { app } { set dir [apps::getMyDir "MdpaGenerator"] ::MdpaGenerator::xml::Init + ::MdpaGenerator::write::Init } \ No newline at end of file diff --git a/kratos.gid/apps/MdpaGenerator/write/write.tcl b/kratos.gid/apps/MdpaGenerator/write/write.tcl new file mode 100644 index 000000000..772fc5c02 --- /dev/null +++ b/kratos.gid/apps/MdpaGenerator/write/write.tcl @@ -0,0 +1,110 @@ +namespace eval ::MdpaGenerator::write { + namespace path ::MdpaGenerator + Kratos::AddNamespace [namespace current] + + # Namespace variables declaration + variable writeCoordinatesByGroups + variable writeAttributes + variable ConditionMap + # after regular conditions are written, we need this number in order to print the custom submodelpart conditions + # only if are applied over things that are not in the skin + variable last_condition_iterator +} + +proc ::MdpaGenerator::write::Init { } { + # Namespace variables inicialization + + variable last_condition_iterator + set last_condition_iterator 0 + + variable writeAttributes + set writeAttributes [dict create ] +} + +# MDPA write event +proc ::MdpaGenerator::write::writeModelPartEvent { } { + # Validation + set err [Validate] + if {$err ne ""} {error $err} + + InitConditionsMap + writeProperties + + # Init data + write::initWriteConfiguration [GetAttributes] + + # Headers + write::writeModelPartData + + # Nodal coordinates + write::writeNodalCoordinates + + # Custom SubmodelParts + variable last_condition_iterator + write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator + + # Clean + unset ::MdpaGenerator::write::ConditionMap +} + +proc ::MdpaGenerator::write::writeCustomFilesEvent { } { +} + + +proc ::MdpaGenerator::write::Validate {} { + set err "" + + return $err +} + +# MDPA Blocks +proc ::MdpaGenerator::write::writeProperties { } { + # Begin Properties + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + write::WriteString "" +} + +proc ::MdpaGenerator::write::InitConditionsMap { {map "" } } { + + variable ConditionMap + if {$map eq ""} { + set ConditionMap [objarray new intarray [expr [GiD_Info Mesh MaxNumElements] +1] 0] + } { + set ConditionMap $map + } +} +proc ::MdpaGenerator::write::FreeConditionsMap { } { + + variable ConditionMap + unset ConditionMap +} + +proc ::MdpaGenerator::write::GetAttribute {att} { + variable writeAttributes + return [dict get $writeAttributes $att] +} + +proc ::MdpaGenerator::write::GetAttributes {} { + variable writeAttributes + return $writeAttributes +} + +proc ::MdpaGenerator::write::SetAttribute {att val} { + variable writeAttributes + dict set writeAttributes $att $val +} + +proc ::MdpaGenerator::write::AddAttribute {att val} { + variable writeAttributes + dict lappend writeAttributes $att $val +} + +proc ::MdpaGenerator::write::AddAttributes {configuration} { + variable writeAttributes + set writeAttributes [dict merge $writeAttributes $configuration] +} + +proc ::MdpaGenerator::write::writeParametersEvent { } { + +} \ No newline at end of file diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index 8a2c2283c..45c43415a 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,6 +1,8 @@ - - - - + + + + + From 1ef284b9f8322f0f22b2fab7e7ce4e3866ca5ce0 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 27 Oct 2021 12:21:13 +0200 Subject: [PATCH 477/556] Set initial ids --- kratos.gid/apps/MdpaGenerator/start.tcl | 4 ++++ kratos.gid/apps/MdpaGenerator/write/write.tcl | 9 ++++++++- kratos.gid/apps/MdpaGenerator/xml/Main.spd | 11 +++++++++-- kratos.gid/kratos.tcl | 4 ++-- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/MdpaGenerator/start.tcl b/kratos.gid/apps/MdpaGenerator/start.tcl index e72cc77a6..5abf127ef 100644 --- a/kratos.gid/apps/MdpaGenerator/start.tcl +++ b/kratos.gid/apps/MdpaGenerator/start.tcl @@ -18,4 +18,8 @@ proc ::MdpaGenerator::Init { app } { ::MdpaGenerator::xml::Init ::MdpaGenerator::write::Init +} + +proc ::MdpaGenerator::BreakRunCalculation {} { + return true } \ No newline at end of file diff --git a/kratos.gid/apps/MdpaGenerator/write/write.tcl b/kratos.gid/apps/MdpaGenerator/write/write.tcl index 772fc5c02..f03f8200d 100644 --- a/kratos.gid/apps/MdpaGenerator/write/write.tcl +++ b/kratos.gid/apps/MdpaGenerator/write/write.tcl @@ -41,7 +41,14 @@ proc ::MdpaGenerator::write::writeModelPartEvent { } { # Custom SubmodelParts variable last_condition_iterator - write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator + set conditions_mode [write::getValue SMP_write_options condition_write_mode] + switch $conditions_mode { + "unique" {} + "repeat" {} + "gid-id" {} + default {} + } + write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator # Clean unset ::MdpaGenerator::write::ConditionMap diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index 45c43415a..8ab5e775d 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,8 +1,15 @@ - + + help="Ids policy for conditions applied over the same entity more than one time."> + + + + + + + diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 5ae0363cc..bf3877cbc 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -471,8 +471,8 @@ proc Kratos::Event_BeforeRunCalculation { batfilename basename dir problemtypedi if {!$run} { return [list "-cancel-" [= "You have selected MPI parallelism system.\nInput files have been written.\nRun the MPILauncher.sh script" ]] } - set app_run_brake [apps::ExecuteOnCurrentApp BeforeRunCalculation] - if {$app_run_brake} + set app_run_brake [apps::ExecuteOnCurrentApp BreakRunCalculation] + if {[write::isBooleanTrue $app_run_brake]} {return "-cancel-"} } proc Kratos::Event_AfterWriteCalculationFile { filename errorflag } { From 223dffca0f382db81621a91c52d87b1a365cb68c Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 27 Oct 2021 15:06:54 +0200 Subject: [PATCH 478/556] write script --- kratos.gid/apps/MdpaGenerator/write/write.tcl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/MdpaGenerator/write/write.tcl b/kratos.gid/apps/MdpaGenerator/write/write.tcl index f03f8200d..c821b4b3c 100644 --- a/kratos.gid/apps/MdpaGenerator/write/write.tcl +++ b/kratos.gid/apps/MdpaGenerator/write/write.tcl @@ -40,15 +40,16 @@ proc ::MdpaGenerator::write::writeModelPartEvent { } { write::writeNodalCoordinates # Custom SubmodelParts - variable last_condition_iterator set conditions_mode [write::getValue SMP_write_options condition_write_mode] + variable last_condition_iterator + set last_condition_iterator [expr [write::getValue SMP_write_options conditions_start_id] -1] switch $conditions_mode { - "unique" {} - "repeat" {} + "unique" {write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator} + "repeat" {write::writeBasicSubmodelParts $last_condition_iterator} "gid-id" {} default {} } - write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator + # Clean unset ::MdpaGenerator::write::ConditionMap From 8237967c23bbd6839c1c29d892d9ef19cac8824e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 17:12:38 +0200 Subject: [PATCH 479/556] naming --- kratos.gid/apps/MdpaGenerator/write/write.tcl | 6 +++--- kratos.gid/apps/MdpaGenerator/xml/Main.spd | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kratos.gid/apps/MdpaGenerator/write/write.tcl b/kratos.gid/apps/MdpaGenerator/write/write.tcl index c821b4b3c..bb6cda6dc 100644 --- a/kratos.gid/apps/MdpaGenerator/write/write.tcl +++ b/kratos.gid/apps/MdpaGenerator/write/write.tcl @@ -45,11 +45,11 @@ proc ::MdpaGenerator::write::writeModelPartEvent { } { set last_condition_iterator [expr [write::getValue SMP_write_options conditions_start_id] -1] switch $conditions_mode { "unique" {write::writeBasicSubmodelPartsByUniqueId $MdpaGenerator::write::ConditionMap $last_condition_iterator} - "repeat" {write::writeBasicSubmodelParts $last_condition_iterator} + "norepeat" {write::writeBasicSubmodelParts $last_condition_iterator} "gid-id" {} default {} } - + # Clean unset ::MdpaGenerator::write::ConditionMap @@ -114,5 +114,5 @@ proc ::MdpaGenerator::write::AddAttributes {configuration} { } proc ::MdpaGenerator::write::writeParametersEvent { } { - + } \ No newline at end of file diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index 8ab5e775d..7e8f0ca30 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,10 +1,10 @@ - + - + From 571ea2d94d382d4fe8359fe731e3a86961e59585 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 27 Oct 2021 17:19:57 +0200 Subject: [PATCH 480/556] gid_id not available --- kratos.gid/apps/MdpaGenerator/xml/Main.spd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index 7e8f0ca30..6ae7bfdc6 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,8 +1,8 @@ - + From b9228a8ca6d38bf4ccf8294262e8b527b3f71462 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 29 Oct 2021 13:16:19 +0200 Subject: [PATCH 481/556] typo --- kratos.gid/apps/MdpaGenerator/xml/Main.spd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/MdpaGenerator/xml/Main.spd b/kratos.gid/apps/MdpaGenerator/xml/Main.spd index 6ae7bfdc6..e3ca4c759 100644 --- a/kratos.gid/apps/MdpaGenerator/xml/Main.spd +++ b/kratos.gid/apps/MdpaGenerator/xml/Main.spd @@ -1,7 +1,7 @@ - From e0a2e5500bcb4594f7cae9c76f07ed7ccd4addf8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 2 Nov 2021 17:52:02 +0100 Subject: [PATCH 482/556] Uses files missing variable --- kratos.gid/apps/Dam/write/write.tcl | 6 +++--- kratos.gid/kratos.tcl | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index cd1a51eeb..13ec0f768 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -1,7 +1,7 @@ namespace eval ::Dam::write { namespace path ::Dam Kratos::AddNamespace [namespace current] - + variable ConditionsDictGroupIterators variable NodalConditionsGroup variable TableDict @@ -246,7 +246,7 @@ proc ::Dam::write::writeTables_dev { } { proc ::Dam::write::GetPrinTables {} { set root [customlib::GetBaseRoot] - FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"] + if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]} set listaTablas [list ] set listaFiles [list ] set num 0 @@ -282,7 +282,7 @@ proc ::Dam::write::GetPrinTables {} { proc ::Dam::write::GetPrinTables_dev { } { set root [customlib::GetBaseRoot] - FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"] + if {$Kratos::kratos_private(UseFiles) eq 1}{FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]} set listaTablas2 [list ] set listaFiles2 [list ] set num [llength [GetPrinTables]] diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 895c89e2b..ce2b23a6f 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -167,6 +167,8 @@ proc Kratos::InitGlobalVariables {dir} { set kratos_private(UseWizard) 0 # Project New 1/0 set kratos_private(ProjectIsNew) 1 + # Is using files modules + set kratos_private(UseFiles) 0 # Variables from the problemtype definition (kratos.xml) array set kratos_private [ReadProblemtypeXml [file join $kratos_private(Path) kratos.xml] Infoproblemtype {Name Version CheckMinimumGiDVersion}] @@ -505,7 +507,7 @@ proc Kratos::WriteCalculationFilesEvent { {filename ""} } { } } # The calculation process may need the files of the file selector entries inside the model folder - FileSelector::CopyFilesIntoModel [file dirname $filename] + if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file dirname $filename]} # Start the write configuration clean write::Init @@ -540,7 +542,7 @@ proc Kratos::Event_SaveModelSPD { filespd } { Kratos::RegisterEnvironment # User files (in file selectors) copied into the model (if required) - FileSelector::CopyFilesIntoModel [file dirname $filespd] + if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file dirname $filespd]} # Let the current app implement it's Save event apps::ExecuteOnCurrentApp AfterSaveModel $filespd From b7c931b83e6ee6c711b6c3e449b49b005e97c41d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 2 Nov 2021 18:27:06 +0100 Subject: [PATCH 483/556] dem uses files --- kratos.gid/apps/DEM/app.json | 3 ++- kratos.gid/apps/Dam/write/write.tcl | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/DEM/app.json b/kratos.gid/apps/DEM/app.json index 6afc97c85..ad5d67a0e 100644 --- a/kratos.gid/apps/DEM/app.json +++ b/kratos.gid/apps/DEM/app.json @@ -34,7 +34,8 @@ "open_tree": true, "show_toolbar": true, "intervals": true, - "wizard": false + "wizard": false, + "import_files": true }, "unique_names": { "parts": "DEMParts", diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index 13ec0f768..9bd05da54 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -282,7 +282,7 @@ proc ::Dam::write::GetPrinTables {} { proc ::Dam::write::GetPrinTables_dev { } { set root [customlib::GetBaseRoot] - if {$Kratos::kratos_private(UseFiles) eq 1}{FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]} + if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]} set listaTablas2 [list ] set listaFiles2 [list ] set num [llength [GetPrinTables]] From f5aa2104dbeaa44c3597491e0ccdcd0976c99899 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 2 Nov 2021 19:10:40 +0100 Subject: [PATCH 484/556] dam example --- .../apps/Dam/examples/ThermoMechaDam2D.tcl | 67 ++++++++++--------- kratos.gid/apps/Dam/xml/Processes.xml | 2 +- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl index fe90507ca..444784701 100644 --- a/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl +++ b/kratos.gid/apps/Dam/examples/ThermoMechaDam2D.tcl @@ -5,6 +5,11 @@ namespace eval ::Dam::examples::ThermoMechaDam2D { } proc ::Dam::examples::ThermoMechaDam2D::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } DrawGeometry AssignGroups @@ -17,7 +22,7 @@ proc ::Dam::examples::ThermoMechaDam2D::Init {args} { } proc ::Dam::examples::ThermoMechaDam2D::DrawGeometry {args} { - + Kratos::ResetModel GiD_Layers create Dam GiD_Layers edit to_use Dam @@ -46,7 +51,7 @@ proc ::Dam::examples::ThermoMechaDam2D::DrawGeometry {args} { GiD_Layers create Soil GiD_Layers edit color Soil "#999900ff" GiD_Layers edit to_use Soil - + #~ # Geometry creation #~ ## Points ## set soil_coordinates [list -5 0 0 -5 -5 0 15 -5 0 15 0 0 ] @@ -54,7 +59,7 @@ proc ::Dam::examples::ThermoMechaDam2D::DrawGeometry {args} { foreach {x y z} $soil_coordinates { lappend soilPoints [GiD_Geometry create point append Soil $x $y $z] } - + ## Lines ## set soilLines [list ] set initial [lindex $damPoints 0] @@ -63,52 +68,52 @@ proc ::Dam::examples::ThermoMechaDam2D::DrawGeometry {args} { set initial $point } lappend soilLines [GiD_Geometry create line append stline Soil $initial [lindex $damPoints 1]] - - + + lappend soilLines 1 - + ## Surface ## GiD_Process Mescape Geometry Create NurbsSurface {*}$soilLines escape escape - + GiD_Process 'Zoom Frame - + } proc ::Dam::examples::ThermoMechaDam2D::AssignGroups {args} { - + # Create the groups GiD_Groups create Dam GiD_Groups edit color Dam "#26d1a8ff" GiD_EntitiesGroups assign Dam surfaces 1 - + GiD_Groups create Soil GiD_Groups edit color Soil "#e0210fff" GiD_EntitiesGroups assign Soil surfaces 2 - + GiD_Groups create Displacement GiD_Groups edit color Displacement "#3b3b3bff" GiD_EntitiesGroups assign Displacement lines 7 - + GiD_Groups create Initial GiD_Groups edit color Initial "#26d1a8ff" GiD_EntitiesGroups assign Initial surfaces {1 2} - + GiD_Groups create Bofang GiD_Groups edit color Bofang "#42eb71ff" GiD_EntitiesGroups assign Bofang lines {4 5} GiD_Groups create Uniform GiD_Groups edit color Uniform "#3b3b3bff" - GiD_EntitiesGroups assign Uniform lines {3 2 9} - + GiD_EntitiesGroups assign Uniform lines {3 2 9} + GiD_Groups create Thermal_Parameters_1 GiD_Groups edit color Initial "#26d1a8ff" GiD_EntitiesGroups assign Thermal_Parameters_1 surfaces 1 - + GiD_Groups create Thermal_Parameters_2 GiD_Groups edit color Initial "#26d1a8ff" GiD_EntitiesGroups assign Thermal_Parameters_2 surfaces 2 - + GiD_Groups create Hydrostatic GiD_Groups edit color Hydrostatic "#26d1a8fe" GiD_EntitiesGroups assign Hydrostatic lines {4 5} @@ -116,7 +121,7 @@ proc ::Dam::examples::ThermoMechaDam2D::AssignGroups {args} { } proc ::Dam::examples::ThermoMechaDam2D::AssignMeshSizes {args} { - + set dam_mesh_size 0.25 GiD_Process Mescape Meshing AssignSizes Surfaces $dam_mesh_size [GiD_EntitiesGroups get Dam surfaces] escape escape GiD_Process Mescape Meshing AssignSizes Surfaces $dam_mesh_size [GiD_EntitiesGroups get Soil surfaces] escape escape @@ -137,20 +142,20 @@ proc ::Dam::examples::ThermoMechaDam2D::TreeAssignation {args} { set damNode [customlib::AddConditionGroupOnXPath $damParts Dam] set props [list Element SmallDisplacementElement2D ConstitutiveLaw ThermalLinearElastic2DPlaneStrain Material "Concrete-Dam" DENSITY 2400 YOUNG_MODULUS 1.962e10 POISSON_RATIO 0.20 THERMAL_EXPANSION 1e-05] spdAux::SetValuesOnBaseNode $damNode $props - + #Soil Part set soilNode [customlib::AddConditionGroupOnXPath $damParts Soil] set props_soil [list Element SmallDisplacementElement2D ConstitutiveLaw ThermalLinearElastic2DPlaneStrain Material Soil DENSITY 3000 YOUNG_MODULUS 4.9e10 POISSON_RATIO 0.25 THERMAL_EXPANSION 1e-05] spdAux::SetValuesOnBaseNode $soilNode $props_soil # Dirichlet Conditions - + # Displacements set damDirichletConditions [spdAux::getRoute "DamNodalConditions"] set displacement "$damDirichletConditions/condition\[@n='DISPLACEMENT'\]" set displacemnetnode [customlib::AddConditionGroupOnXPath $displacement Displacement] - - # Surface Temperature + + # Surface Temperature set initial "$damDirichletConditions/condition\[@n='INITIALTEMPERATURE'\]" set initialnode [customlib::AddConditionGroupOnXPath $initial Initial] set props_initial [list is_fixed 0 value 7.5 ] @@ -161,36 +166,36 @@ proc ::Dam::examples::ThermoMechaDam2D::TreeAssignation {args} { set bofangnode [customlib::AddConditionGroupOnXPath $bofang Bofang] set props_bofang [list is_fixed 1 Gravity_Direction Y Reservoir_Bottom_Coordinate_in_Gravity_Direction 0.0 Surface_Temp 15.19 Bottom_Temp 9.35 Height_Dam 30.0 Temperature_Amplitude 6.51 Day_Ambient_Temp 201 Water_level 20.0 Month 7 ] spdAux::SetValuesOnBaseNode $bofangnode $props_bofang - + # Uniform Temperature set uniform "$damDirichletConditions/condition\[@n='INITIALTEMPERATURE'\]" set uniformnode [customlib::AddConditionGroupOnXPath $uniform Uniform] set props_uniform [list is_fixed 1 value 10.0 ] spdAux::SetValuesOnBaseNode $uniformnode $props_uniform - - + + # Thermal Load Conditions - + # Thermal Parameters 1 set damThermalLoadConditions [spdAux::getRoute "DamThermalLoads"] set thermalparameter "$damThermalLoadConditions/condition\[@n='ThermalParameters2D'\]" set thermalparameternode1 [customlib::AddConditionGroupOnXPath $thermalparameter Thermal_Parameters_1] - + # Thermal Parameters 2 set thermalparameternode2 [customlib::AddConditionGroupOnXPath $thermalparameter Thermal_Parameters_2] set props_thermal_2 [list ThermalDensity 3000 ] spdAux::SetValuesOnBaseNode $thermalparameternode2 $props_thermal_2 - + # Load Conditions - + # Hydrostatic Load set damLoadConditions [spdAux::getRoute "DamLoads"] set hydro "$damLoadConditions/condition\[@n='HydroLinePressure2D'\]" set hydronode [customlib::AddConditionGroupOnXPath $hydro Hydrostatic] set props_hydro [list Modify 0 Gravity_Direction Y Reservoir_Bottom_Coordinate_in_Gravity_Direction 0.0 Spe_weight 10000 Water_level 20.0] spdAux::SetValuesOnBaseNode $hydronode $props_hydro - - + + # Solution spdAux::SetValueOnTreeItem v "Days" DamTimeScale diff --git a/kratos.gid/apps/Dam/xml/Processes.xml b/kratos.gid/apps/Dam/xml/Processes.xml index fa5e18bfd..7e0a4a3c4 100644 --- a/kratos.gid/apps/Dam/xml/Processes.xml +++ b/kratos.gid/apps/Dam/xml/Processes.xml @@ -8,7 +8,7 @@ - + From 514d10f9cb28636f50b51ad0609899a570cc9f38 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 2 Nov 2021 19:50:17 +0100 Subject: [PATCH 485/556] files issues --- kratos.gid/apps/Dam/write/write.tcl | 6 +- .../apps/Dam/write/writeProjectParameters.tcl | 4 +- kratos.gid/apps/Dam/xml/Processes.xml | 4 +- kratos.gid/apps/EmbeddedFluid/app.json | 3 +- kratos.gid/apps/PfemThermic/write/write.tcl | 38 ++++++------ .../apps/PfemThermic/xml/ConstitutiveLaws.xml | 62 +++++++++---------- kratos.gid/apps/Structural/xml/Elements.xml | 4 +- .../scripts/Controllers/ImportFiles.tcl | 11 +++- .../scripts/Controllers/TreeInjections.tcl | 16 ++--- 9 files changed, 77 insertions(+), 71 deletions(-) diff --git a/kratos.gid/apps/Dam/write/write.tcl b/kratos.gid/apps/Dam/write/write.tcl index 9bd05da54..bda8687c5 100644 --- a/kratos.gid/apps/Dam/write/write.tcl +++ b/kratos.gid/apps/Dam/write/write.tcl @@ -258,8 +258,8 @@ proc ::Dam::write::GetPrinTables {} { set valueid [get_domnode_attribute $node n] set groupid [get_domnode_attribute [$node parent] n] set condid [get_domnode_attribute [[$node parent] parent] n] - #W $condid - if {$fileid ni [list "" "- No file"]} { + # W $fileid + if {$fileid ni [list "" "- No file" $::spdAux::no_file_string]} { if {$fileid ni $listaFiles} { lappend listaFiles $fileid incr num @@ -296,7 +296,7 @@ proc ::Dam::write::GetPrinTables_dev { } { set node_table_device [$root selectNodes $table_device] set fileid [write::getValueByNode $node_table_device] - if {$fileid ni [list "" "- No file"]} { + if {$fileid ni [list "" "- No file" $::spdAux::no_file_string]} { if {$fileid ni $listaFiles2} { lappend listaFiles2 $fileid incr num diff --git a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl index 1f88f0cba..bc6b98ac6 100644 --- a/kratos.gid/apps/Dam/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Dam/write/writeProjectParameters.tcl @@ -441,7 +441,7 @@ proc ::Dam::write::GetOutputDict { {appid ""} } { } elseif {$outputCT eq "time_w"} { set frequency [write::getValue Results OutputDeltaTime_w] } - + dict set resultDict output_interval $frequency dict set resultDict start_output_results [write::getValue Results StartOutputResults] @@ -912,7 +912,7 @@ proc ::Dam::write::TemperaturebyDevices { } { dict set parameterDict is_fixed $isfixed dict set parameterDict value $value - if {$fileid ni [list "" "- No file"]} { + if {$fileid ni [list "" "- No file" $::spdAux::no_file_string]} { if {$fileid ni $listaFiles} { lappend listaFiles $fileid incr number_devices diff --git a/kratos.gid/apps/Dam/xml/Processes.xml b/kratos.gid/apps/Dam/xml/Processes.xml index 7e0a4a3c4..376f5c781 100644 --- a/kratos.gid/apps/Dam/xml/Processes.xml +++ b/kratos.gid/apps/Dam/xml/Processes.xml @@ -8,7 +8,7 @@ - + @@ -337,7 +337,7 @@ kratos_module="KratosMultiphysics.DamApplication" help="This process assigns different values of Reference Temperature to each node" > - + diff --git a/kratos.gid/apps/EmbeddedFluid/app.json b/kratos.gid/apps/EmbeddedFluid/app.json index 7b0a65122..8f16a3197 100644 --- a/kratos.gid/apps/EmbeddedFluid/app.json +++ b/kratos.gid/apps/EmbeddedFluid/app.json @@ -26,7 +26,8 @@ "open_tree": true, "show_toolbar": true, "intervals": true, - "wizard": false + "wizard": false, + "import_files":true }, "unique_names": { "materials": "EMBFLMaterials" diff --git a/kratos.gid/apps/PfemThermic/write/write.tcl b/kratos.gid/apps/PfemThermic/write/write.tcl index 3907b22ce..dd6492473 100644 --- a/kratos.gid/apps/PfemThermic/write/write.tcl +++ b/kratos.gid/apps/PfemThermic/write/write.tcl @@ -6,7 +6,7 @@ namespace eval ::PfemThermic::write { proc ::PfemThermic::write::Init { } { PfemFluid::write::Init ConvectionDiffusion::write::Init - + PfemFluid::write::SetAttribute materials_file PFEMThermicMaterials.json ConvectionDiffusion::write::SetAttribute materials_file PFEMThermicMaterials.json } @@ -20,14 +20,14 @@ proc PfemThermic::write::writeModelPartEvent { } { variable FluxConditions set FluxConditions(temp) 0 unset FluxConditions(temp) - + # Write geometries (adapted from PfemFluid::write::writeModelPartEvent) write::initWriteConfiguration [PfemFluid::write::GetAttributes] set parts_un_list [PfemFluid::write::GetPartsUN] foreach part_un $parts_un_list { write::initWriteData $part_un [PfemFluid::write::GetAttribute materials_un] } - + write::writeModelPartData write::WriteString "Begin Properties 0" write::WriteString "End Properties" @@ -36,7 +36,7 @@ proc PfemThermic::write::writeModelPartEvent { } { write::initWriteData $part_un "PFEMFLUID_Materials" write::writeElementConnectivities } - + # Write flux conditions (adapted from write::writeConditions) set iter 0 foreach group [$root selectNodes $xp1] { @@ -53,7 +53,7 @@ proc PfemThermic::write::writeModelPartEvent { } { incr iter -1 } } - + # Fill FluxConditions (adapted from ConvectionDiffusion::write::writeBoundaryConditions) foreach group [$root selectNodes $xp1] { set condid [[$group parent] @n] @@ -66,13 +66,13 @@ proc PfemThermic::write::writeModelPartEvent { } { set FluxConditions($groupid,SkinCondition) 1 } } - + # Write submodelparts (adapted from PfemFluid::write::writeMeshes) foreach part_un $parts_un_list { write::initWriteData $part_un "PFEMFLUID_Materials" write::writePartSubModelPart } - + # Write submodel parts with flux conditions (adapted from PfemFluid::write::writeNodalConditions and ConvectionDiffusion::write::writeConditionsMesh) foreach group [$root selectNodes $xp1] { set condid [[$group parent] @n] @@ -92,7 +92,7 @@ proc PfemThermic::write::writeModelPartEvent { } { if {[Model::getCondition $condid] ne ""} { set groupid [$group @n] set groupid [write::GetWriteGroupName $groupid] - + if {$condid ne "HeatFlux2D" && $condid ne "HeatFlux3D" && $condid ne "ThermalFace2D" && $condid ne "ThermalFace3D"} { ::write::writeGroupSubModelPart $condid $groupid "Nodes" } else { @@ -132,7 +132,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m set props [list] set doc $gid_groups_conds::doc set root [$doc documentElement] - + set xp1 "[spdAux::getRoute $parts_un]/group" if {[llength [$root selectNodes $xp1]] < 1} { set xp1 "[spdAux::getRoute $parts_un]/condition/group" @@ -167,27 +167,27 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m } if {$prop in $tableList} { set fileName [write::getFormattedValue [dict get $mat_dict $submodelpart_id $prop]] - if {$fileName ne "- No file"} { + if {$fileName ni [list "" "- No file" $::spdAux::no_file_string]} { dict set tables_dict $prop [PfemThermic::write::GetTable $prop $fileName] } } } set material_dict [dict create] - + if {$write_claw_name eq "True"} { set constitutive_law_name [$constitutive_law getKratosName] dict set material_dict constitutive_law [dict create name $constitutive_law_name] } - + dict set material_dict Variables $variables_list - dict set material_dict Tables $tables_dict + dict set material_dict Tables $tables_dict dict set prop_dict Material $material_dict - + lappend props $prop_dict } } } - + dict set props_dict properties $props return $props_dict } @@ -195,7 +195,7 @@ proc PfemThermic::write::getPropertiesList {parts_un {write_claw_name "True"} {m proc PfemThermic::write::GetTable { prop fileName } { set table [dict create] dict set table input_variable "TEMPERATURE" - + if {$prop eq "TEMPERATURE_vs_DENSITY"} { dict set table output_variable "DENSITY" } elseif {$prop eq "TEMPERATURE_vs_VISCOSITY"} { @@ -211,11 +211,11 @@ proc PfemThermic::write::GetTable { prop fileName } { } elseif {$prop eq "TEMPERATURE_vs_SPECIFIC_HEAT"} { dict set table output_variable "SPECIFIC_HEAT" } - + set fp [open $fileName r] set file_data [read $fp] close $fp - + set points {} set data [split $file_data "\n"] foreach line $data { @@ -224,6 +224,6 @@ proc PfemThermic::write::GetTable { prop fileName } { } } dict set table data $points - + return $table } \ No newline at end of file diff --git a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml index 489af6495..5ba9dff9b 100644 --- a/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/PfemThermic/xml/ConstitutiveLaws.xml @@ -13,19 +13,19 @@ type = "Fluid"> - + - + - + - + - + - + - + - + - + @@ -53,7 +53,7 @@ - + - + - + - + - + @@ -89,18 +89,18 @@ type = "Fluid"> - + - + - + - + - + @@ -118,15 +118,15 @@ type = "Solid"> - + - + - + - + - + @@ -143,18 +143,18 @@ type = "Solid"> - + - + - + - + - + - + diff --git a/kratos.gid/apps/Structural/xml/Elements.xml b/kratos.gid/apps/Structural/xml/Elements.xml index 8d588ddf7..cde1ffbf5 100644 --- a/kratos.gid/apps/Structural/xml/Elements.xml +++ b/kratos.gid/apps/Structural/xml/Elements.xml @@ -480,8 +480,8 @@ - - + + diff --git a/kratos.gid/scripts/Controllers/ImportFiles.tcl b/kratos.gid/scripts/Controllers/ImportFiles.tcl index 31ee6ff75..d21a6213f 100644 --- a/kratos.gid/scripts/Controllers/ImportFiles.tcl +++ b/kratos.gid/scripts/Controllers/ImportFiles.tcl @@ -40,7 +40,7 @@ proc ::spdAux::SaveModelFile { fileid } { proc ::spdAux::ProcGetFilesValues { domNode } { customlib::UpdateDocument spdAux::LoadModelFiles - lappend listilla "- No file - (add files using File handler toolbar)" + lappend listilla $::spdAux::no_file_string lappend listilla {*}[FileSelector::GetAllFiles] if {[get_domnode_attribute $domNode v] ni $listilla} {$domNode setAttribute v [lindex $listilla 0]} return [join $listilla ","] @@ -59,10 +59,15 @@ proc ::spdAux::DeleteFile { fileid } { RequestRefresh } -proc spdAux::UpdateFileField { fileid domNode} { +proc ::spdAux::UpdateFileField { fileid domNode} { if {$fileid ne ""} { $domNode setAttribute v $fileid spdAux::SaveModelFile $fileid - RequestRefresh + RequestRefresh } } + +namespace eval ::spdAux { + variable no_file_string + set no_file_string "- No file - (add files using File handler toolbar)" +} \ No newline at end of file diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 8c0fffc76..2b9e457da 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -22,7 +22,7 @@ proc spdAux::SetValueOnTreeItem { field value unique_name {it "" } } { proc spdAux::SetValuesOnBasePath {base_path prop_value_pairs} { return [spdAux::SetValuesOnBaseNode [[customlib::GetBaseRoot] selectNodes $base_path] $prop_value_pairs] -} +} proc spdAux::SetValuesOnBaseNode {base_path prop_value_pairs} { if {$base_path eq ""} {error "Empty $base_path"} @@ -344,7 +344,7 @@ proc spdAux::GetParameterValueString { param forcedParams base} { set nodev "../value\[@n='$vname'\]" if {$i eq "Z"} { set zstate "state='\[CheckDimension 3D\]'"; set state "\[CheckDimension 3D\]"} {set zstate ""} if {[$param getAttribute "function"] eq "1"} { - set values "ByFunction,ByValue,Not" + set values "ByFunction,ByValue,Not" set pvalues "By function,By value,Not set" set selector_name "selector_${inName}_${i}" @@ -365,7 +365,7 @@ proc spdAux::GetParameterValueString { param forcedParams base} { append node " " } if { $vector_type eq "file" || $vector_type eq "tablefile" } { - if {[set $v] eq ""} {set $v "- No file"} + if {[set $v] eq ""} {set $v $::spdAux::no_file_string} append node "" } else { append node "" @@ -376,10 +376,10 @@ proc spdAux::GetParameterValueString { param forcedParams base} { } "combo" { if {[$param getAttribute "combotype"] eq "material"} { - append node "" + append node "" } elseif {[$param getAttribute "combotype"] eq "constitutive_law"} { append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] - append node "" + append node "" } else { append node [_GetComboParameterString $param $inName $pn $v $state $help $show_in_window $base] } @@ -486,7 +486,7 @@ proc spdAux::_insert_cond_param_dependencies {base param_name} { } } set ret "" - + foreach {name values} $dep_list { set ins "" set out "" @@ -914,7 +914,7 @@ proc spdAux::ClearCutPlanes { {cut_planes_un CutPlanes} } { if {$first != true} { $plane delete } {set first false} - + } } @@ -955,7 +955,7 @@ proc spdAux::injectPartsByElementType {domNode args} { $orig delete $base insertBefore $new $domNode } - + $domNode delete customlib::UpdateDocument spdAux::processDynamicNodes $base From 873f67416a07b4bb1c8db7ed809498e1f60b6f7e Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 2 Nov 2021 21:02:06 +0100 Subject: [PATCH 486/556] Minimum gid version for apps --- kratos.gid/scripts/Applications.tcl | 59 +++++++++++++++-------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index b885c0129..1049e5b5d 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -5,7 +5,7 @@ namespace eval ::apps { Kratos::AddNamespace [namespace current] - + variable activeApp variable appList } @@ -26,7 +26,7 @@ proc apps::ClearActiveApp {} { proc apps::setActiveApp {appid} { variable activeApp variable appList - + foreach app $appList { if {[$app getName] eq $appid} { set activeApp $app @@ -101,7 +101,7 @@ proc apps::getAppsList {{also_tools 1}} { return $list } proc apps::getAllApplicationsName {{also_tools 1}} { - + set appnames [list ] foreach app [apps::getAppsList $also_tools] { lappend appnames [$app getPublicName] @@ -110,7 +110,7 @@ proc apps::getAllApplicationsName {{also_tools 1}} { } proc apps::getAllApplicationsID {{also_tools 1}} { - + set appnames [list ] foreach app [apps::getAppsList $also_tools] { lappend appnames [$app getName] @@ -123,7 +123,7 @@ proc apps::getImgFrom { appName {img "logo" } } { } proc apps::getImgPathFrom { appName {img "logo" } } { variable appList - + set imagespath "" foreach app $appList { if {[$app getName] eq $appName} {set imagespath [expr {$img == "logo" ? [$app getIcon] : [$app getImagePath $img] }]; break} @@ -155,7 +155,7 @@ proc apps::ExecuteOnCurrentXML { func args} { proc apps::ExecuteOnAppXML { appid func args} { set response "" set app [getAppById $appid] - set response [$app executexml $func {*}$args] + set response [$app executexml $func {*}$args] return $response } @@ -163,7 +163,7 @@ proc apps::ExecuteOnAppXML { appid func args} { proc apps::ExecuteOnApp {appid func args} { set response "" set app [getAppById $appid] - set response [$app execute $func {*}$args] + set response [$app execute $func {*}$args] return $response } @@ -193,7 +193,7 @@ proc apps::isPublic {appId} { proc apps::CheckElemState {elem inputid {arg ""} } { variable activeApp - + return [$activeApp executexml CheckElemState $elem $inputid $arg] } @@ -213,7 +213,7 @@ oo::class create App { variable is_tool variable properties - + constructor {n} { variable name variable publicname @@ -226,7 +226,7 @@ oo::class create App { variable public variable is_tool variable properties - + set name $n set publicname $n set imagepath [file nativename [file join $::Kratos::kratos_private(Path) apps $n images] ] @@ -249,28 +249,28 @@ oo::class create App { set properties [dict create ] apps::LoadAppProperties [self] } - + method activate { } {apps::ActivateApp_do [self]} - + method getPrefix { } {variable prefix; return $prefix} method setPrefix { p } {variable prefix; set prefix $p} - + method getPublicName { } {variable publicname; return $publicname} method setPublicName { pn } {variable publicname; set publicname $pn} - + method getName { } {variable name; return $name} - + method getIcon { } {return [my getImagePath logo.png]} method getImagePath { imgName } {variable imagepath; return [file nativename [file join $imagepath $imgName] ]} - + method getWriteModelPartEvent { } {variable writeModelPartEvent; return $writeModelPartEvent} - + method getWriteParametersEvent { } {variable writeParametersEvent; return $writeParametersEvent} - + method getWriteCustomEvent { } {variable writeCustomEvent; return $writeCustomEvent} method getValidateWriteEvent { } {variable writeValidateEvent; return $writeValidateEvent} - + method executexml { func args } { variable name set f ::${name}::xml::${func} @@ -281,24 +281,24 @@ oo::class create App { set f ::${name}::${func} if {[info procs $f] ne ""} {$f {*}$args} } - + method setPublic {v} {variable public; set public $v} method isPublic { } {variable public; return $public} - + method setIsTool {v} {variable is_tool; set is_tool $v} method isTool { } {variable is_tool; return $is_tool} - + method getKratosApplicationName { } {return [::${name}::GetAttribute kratos_name]} method setProperties {props} {variable properties; set properties $props} method getProperty {n} {variable properties; if {[dict exists $properties $n]} {return [dict get $properties $n]}} method getProperties {} {variable properties; return $properties} method getPermission {n} {variable properties; if {[dict exists $properties permissions $n]} {return [dict get $properties permissions $n]} } - method getPermissions {} {variable properties; return [dict get $properties permissions]} + method getPermissions {} {variable properties; return [dict get $properties permissions]} method getUniqueName {n} {variable properties; if {[dict exists $properties unique_names $n]} {return [dict get $properties unique_names $n]} } - method getUniqueNames {} {variable properties; return [dict get $properties unique_names} + method getUniqueNames {} {variable properties; return [dict get $properties unique_names} method getWriteProperty {n} {variable properties; if {[dict exists $properties write $n]} {return [dict get $properties write $n]} } - method getWriteProperties {} {variable properties; return [dict get $properties write} + method getWriteProperties {} {variable properties; return [dict get $properties write} } proc apps::LoadAppProperties {app} { @@ -328,17 +328,18 @@ proc apps::ActivateApp_do {app} { apps::loadAppFile $fileName } } - + set app_minimum_gid_version [dict get [$app getProperty requeriments] minimum_gid_version] + if {[GiDVersionCmp $app_minimum_gid_version] < 0} {W "Caution. Minimum GiD version is $app_minimum_gid_version"} if {[write::isBooleanTrue [$app getPermission import_files]]} { Kratos::LoadImportFiles } if {[write::isBooleanTrue [$app getPermission wizard]]} { Kratos::LoadWizardFiles } if {[$app getProperty start_script] ne ""} {eval [$app getProperty start_script] $app} apps::ApplyAppPreferences $app - - + + if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { set gid_groups_conds::imagesdirList [lsearch -all -inline -not -exact $gid_groups_conds::imagesdirList [list [file join $dir images]]] gid_groups_conds::add_images_dir [file join $dir images Black] - } + } gid_groups_conds::add_images_dir [file join $dir images] } From e64526b8408cc41e3052344ba43a848690ae7d23 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 3 Nov 2021 20:38:52 +0100 Subject: [PATCH 487/556] minimum gid version shallow --- kratos.gid/apps/ShallowWater/app.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 1a1789fea..9896dae0d 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -16,8 +16,10 @@ "examples/DamBreak.tcl", "examples/HydraulicJump.tcl" ], - "start_script":"::ShallowWater::Init", - "requirements":{}, + "start_script": "::ShallowWater::Init", + "requirements": { + "minimum_gid_version": "15.1.2d" + }, "permissions": { "open_tree": true, "show_toolbar": true, @@ -40,4 +42,4 @@ }, "main_launch_file": "python/MainKratos.py", "description": "Tools for the simulation of free surface flows under the shallow water assumptions." -} +} \ No newline at end of file From 59bdb4d49d403f24d0686bd8925016d1be8278f8 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 3 Nov 2021 20:50:51 +0100 Subject: [PATCH 488/556] typo --- kratos.gid/apps/ShallowWater/app.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/ShallowWater/app.json b/kratos.gid/apps/ShallowWater/app.json index 9896dae0d..bcbdda90f 100644 --- a/kratos.gid/apps/ShallowWater/app.json +++ b/kratos.gid/apps/ShallowWater/app.json @@ -17,8 +17,9 @@ "examples/HydraulicJump.tcl" ], "start_script": "::ShallowWater::Init", - "requirements": { - "minimum_gid_version": "15.1.2d" + "requeriments":{ + "apps":[], + "minimum_gid_version":"15.1.3d" }, "permissions": { "open_tree": true, From 32e4fcd32b69b73a962d5c10a0b355ea3c8395f2 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 9 Nov 2021 17:14:52 +0100 Subject: [PATCH 489/556] hotfix #851 --- kratos.gid/apps/PfemFluid/xml/Main.spd | 11 +- .../apps/PfemFluid/xml/XmlController.tcl | 120 +++++++++--------- .../scripts/Controllers/ImportFiles.tcl | 1 + 3 files changed, 66 insertions(+), 66 deletions(-) diff --git a/kratos.gid/apps/PfemFluid/xml/Main.spd b/kratos.gid/apps/PfemFluid/xml/Main.spd index b22395379..348c19beb 100644 --- a/kratos.gid/apps/PfemFluid/xml/Main.spd +++ b/kratos.gid/apps/PfemFluid/xml/Main.spd @@ -1,14 +1,13 @@ - + - - - + + + - - + diff --git a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl index 85f2597ec..1ee618094 100644 --- a/kratos.gid/apps/PfemFluid/xml/XmlController.tcl +++ b/kratos.gid/apps/PfemFluid/xml/XmlController.tcl @@ -1,17 +1,17 @@ namespace eval ::PfemFluid::xml { namespace path ::PfemFluid Kratos::AddNamespace [namespace current] - + variable bodyNodalCondition } proc PfemFluid::xml::Init { } { variable bodyNodalCondition - + set bodyNodalCondition [list ] - + Model::InitVariables dir $::PfemFluid::dir - + Model::getSolutionStrategies Strategies.xml Model::getElements Elements.xml Model::getConstitutiveLaws ConstitutiveLaws.xml @@ -19,7 +19,7 @@ proc PfemFluid::xml::Init { } { Model::getProcesses Processes.xml Model::getNodalConditions NodalConditions.xml Model::getSolvers Solvers.xml - + Model::ForgetNodalCondition "CONTACT" } @@ -37,8 +37,8 @@ proc PfemFluid::xml::MultiAppEvent {args} { proc PfemFluid::xml::CustomTree { args } { #HOW TO USE THIS FUNCTION: #spdAux::SetValueOnTreeItem arg1 arg2 arg3 (arg4) - #arg1: attribute_to_modify - #arg2: value_of_the_attribute + #arg1: attribute_to_modify + #arg2: value_of_the_attribute #arg3: unique_name_of_the_node ('unique name is defined by the attribute un=) #arg4 (optional): name_of_the_child_we_want_to_modify ('name'is defined by the attribute n=) @@ -56,45 +56,45 @@ proc PfemFluid::xml::CustomTree { args } { spdAux::SetValueOnTreeItem icon sheets Intervals foreach node [[$app_root parent] selectNodes "[spdAux::getRoute Intervals]/blockdata"] { $node setAttribute icon select - } - + } + #conditions spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMFLUID_NodalConditions VELOCITY spdAux::SetValueOnTreeItem state \[CheckNodalConditionStatePFEM\] PFEMFLUID_NodalConditions PRESSURE - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition" ] { + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_NodalConditions]/condition" ] { $node setAttribute icon select $node setAttribute groups_icon groupCreated } #loads if {[spdAux::getRoute PFEMFLUID_Loads] ne ""} { - spdAux::SetValueOnTreeItem icon setLoad PFEMFLUID_Loads - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Loads]/condition" ] { + spdAux::SetValueOnTreeItem icon setLoad PFEMFLUID_Loads + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Loads]/condition" ] { $node setAttribute icon select $node setAttribute groups_icon groupCreated } } #materials - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_Materials]/blockdata" ] { $node setAttribute icon select } - + #solver settings - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'linear_solver_settings'\]" ] { $node setAttribute icon select } - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'velocity_linear_solver_settings'\]" ] { + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'velocity_linear_solver_settings'\]" ] { $node setAttribute icon select - } + } - foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'pressure_linear_solver_settings'\]" ] { + foreach node [[$app_root parent] selectNodes "[spdAux::getRoute PFEMFLUID_StratSection]/container\[@n = 'pressure_linear_solver_settings'\]" ] { $node setAttribute icon select - } + } + - #units [[$app_root parent] selectNodes "/Kratos_data/blockdata\[@n = 'units'\]"] setAttribute icon setUnits @@ -104,22 +104,22 @@ proc PfemFluid::xml::CustomTree { args } { spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT spdAux::SetValueOnTreeItem v No NodalResults VELOCITY_REACTION spdAux::SetValueOnTreeItem v No NodalResults DISPLACEMENT_REACTION - + set inlet_result_node [[$app_root parent] selectNodes "[spdAux::getRoute NodalResults]/value\[@n = 'INLET'\]"] if {$inlet_result_node ne "" } {$inlet_result_node delete} #restart - spdAux::SetValueOnTreeItem icon doRestart Restart - spdAux::SetValueOnTreeItem icon select Restart RestartOptions - + # spdAux::SetValueOnTreeItem icon doRestart Restart + # spdAux::SetValueOnTreeItem icon select Restart RestartOptions + # 3D gravity if {$Model::SpatialDimension eq "3D"} { catch { - spdAux::SetValueOnTreeItem v -9.81 PFEMFLUID_Gravity Cy - spdAux::SetValueOnTreeItem v 0.0 PFEMFLUID_Gravity Cz + spdAux::SetValueOnTreeItem v -9.81 PFEMFLUID_Gravity Cy + spdAux::SetValueOnTreeItem v 0.0 PFEMFLUID_Gravity Cz } } - + } proc PfemFluid::xml::ProcCheckNodalConditionStatePFEM {domNode args} { @@ -154,7 +154,7 @@ proc PfemFluid::xml::ProcGetElementsDict {domNode args} { set pnames "" foreach elem $elems { if {[$elem cumple $argums]} { - lappend pnames [$elem getName] + lappend pnames [$elem getName] lappend pnames [$elem getPublicName] } } @@ -166,7 +166,7 @@ proc PfemFluid::xml::ProcGetElementsValues {domNode args} { set names [list ] set blockNode [PfemFluid::xml::FindMyBlocknode $domNode] set BodyType [get_domnode_attribute [$blockNode selectNodes "value\[@n='BodyType'\]"] v] - + set argums [list ElementType $BodyType] set elems [PfemFluid::xml::GetElements $domNode $args] foreach elem $elems { @@ -175,17 +175,17 @@ proc PfemFluid::xml::ProcGetElementsValues {domNode args} { } } set values [join $names ","] - + if {[get_domnode_attribute $domNode v] eq ""} {$domNode setAttribute v [lindex $names 0]} if {[get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]} - + return $values } proc PfemFluid::xml::ProcGetConstitutiveLaws {domNode args} { set Elementname [$domNode selectNodes {string(../value[@n='Element']/@v)}] set Claws [::Model::GetAvailableConstitutiveLaws $Elementname] - + if {[llength $Claws] == 0} { set names [list "None"] } { @@ -194,27 +194,27 @@ proc PfemFluid::xml::ProcGetConstitutiveLaws {domNode args} { lappend names [$cl getName] } } - + set values [join $names ","] - + if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $names} {$domNode setAttribute v [lindex $names 0]; spdAux::RequestRefresh} - + return $values } proc PfemFluid::xml::GetElements {domNode args} { - + set nodeApp [spdAux::GetAppIdFromNode $domNode] set sol_stratUN [apps::getAppUniqueName $nodeApp SolStrat] set schemeUN [apps::getAppUniqueName $nodeApp Scheme] - + get_domnode_attribute [$domNode selectNodes [spdAux::getRoute $sol_stratUN]] dict get_domnode_attribute [$domNode selectNodes [spdAux::getRoute $schemeUN]] dict - + set solStratName [::write::getValue $sol_stratUN] set schemeName [write::getValue $schemeUN] set elems [::Model::GetAvailableElements $solStratName $schemeName] - + return $elems } @@ -226,7 +226,7 @@ proc PfemFluid::xml::FindMyBlocknode {domNode} { set ret $domNode break } else { - set domNode [$domNode parent] + set domNode [$domNode parent] } } return $ret @@ -250,7 +250,7 @@ proc PfemFluid::xml::ProcGetContactDomains {domNode args} { foreach contact_domain [[$domNode selectNodes $basepath] childNodes] { lappend values [get_domnode_attribute $contact_domain name] } - + if {[get_domnode_attribute $domNode v] eq "" || [get_domnode_attribute $domNode v] ni $values} { $domNode setAttribute v [lindex $values 0] } @@ -264,11 +264,11 @@ proc PfemFluid::xml::ProcSolutionTypeState {domNode args} { if {$domain_type_route ne ""} { set domain_type_node [$domNode selectNodes $domain_type_route] set domain_type_value [get_domnode_attribute $domain_type_node v] - - $domNode setAttribute values Dynamic + + $domNode setAttribute values Dynamic $domNode setAttribute v Dynamic set state disabled - + } return $state } @@ -280,7 +280,7 @@ proc PfemFluid::xml::ProcGetBodyTypeValues {domNode args} { if {$domain_type_route ne ""} { set domain_type_node [$domNode selectNodes $domain_type_route] set domain_type_value [get_domnode_attribute $domain_type_node v] - + if {$domain_type_value eq "Fluids"} { set values "Fluid,Rigid" } @@ -305,7 +305,7 @@ proc PfemFluid::xml::ProcGetSolutionStrategiesPFEM {domNode args} { if {$domainType eq "Solids"} {set filter "Solid"} if {$domainType eq "Fluids"} {set filter "Pfem"} if {$domainType eq "FSI"} {set filter "Pfem"} - + foreach ss $Sols { if {[$ss getAttribute "App"] in $filter} { lappend names [$ss getName] @@ -313,13 +313,13 @@ proc PfemFluid::xml::ProcGetSolutionStrategiesPFEM {domNode args} { lappend pnames [$ss getPublicName] } } - + $domNode setAttribute values [join $names ","] set dv [lindex $names 0] #W "dv $dv" if {[$domNode getAttribute v] eq ""} {$domNode setAttribute v $dv; spdAux::RequestRefresh} if {[$domNode getAttribute v] ni $names} {$domNode setAttribute v $dv; spdAux::RequestRefresh} - + return [join $pnames ","] } @@ -394,11 +394,11 @@ proc PfemFluid::xml::ProcGetRigidBodiesValues {domNode args} { set bodies [list ] foreach body_node [$root selectNodes $xp1] { foreach subnode [$body_node childNodes] { - if { [$subnode getAttribute n] eq "BodyType" } { + if { [$subnode getAttribute n] eq "BodyType" } { if { [$subnode getAttribute v] eq "Rigid" || [$subnode getAttribute v] eq "Interface"} { lappend bodies [$body_node @name] break - } + } } } } @@ -440,7 +440,7 @@ proc PfemFluid::xml::GetConditionsAndGroups { cnd_UN } { proc PfemFluid::xml::getBodyNodalConditionById { id } { variable bodyNodalCondition - + foreach cnd $bodyNodalCondition { if {[$cnd getName] eq $id} { return $cnd @@ -451,7 +451,7 @@ proc PfemFluid::xml::getBodyNodalConditionById { id } { proc PfemFluid::xml::getBodyNodalConditions { filename } { variable bodyNodalCondition dom parse [tDOM::xmlReadFile [file join $PfemFluid::dir xml $filename]] doc - + set NCList [$doc getElementsByTagName NodalConditionItem] foreach Node $NCList { lappend bodyNodalCondition [::Model::ParseNodalConditionsNode $Node] @@ -468,7 +468,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} set conds [$basenode parent] set AppUsesIntervals [::PfemFluid::GetAttribute UseIntervals] if {$AppUsesIntervals eq ""} {set AppUsesIntervals 0} - + foreach cnd $cond_list { set n [$cnd getName] set pn [$cnd getPublicName] @@ -486,7 +486,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} set contNode [gid_groups_conds::addF [$conds toXPath] container [list n $n pn ${pn}s help $help]] set blockNode [gid_groups_conds::addF [$contNode toXPath] blockdata [list n $n pn $pn help $help icon shells16 update_proc $check name "$pn 1" sequence 1 editable_name unique sequence_type non_void_disabled]] set block_path [$blockNode toXPath] - set inputs [$process getInputs] + set inputs [$process getInputs] foreach {inName in} $inputs { set pn [$in getPublicName] set type [$in getType] @@ -497,7 +497,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} foreach key [$cnd getDefaults $inName] { set $key [$cnd getDefault $inName $key] } - + set has_units [$in getAttribute "has_units"] if {$has_units ne ""} { set has_units "units='$units' unit_magnitude='$um'"} if {$type eq "vector"} { @@ -516,7 +516,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} set val [expr [$in getAttribute "enabled"] ? "Yes" : "No"] if {$i eq "Z"} { set val "No" } set valNode [gid_groups_conds::addF $block_path value [list n Enabled_$i pn "$i component" v No values "Yes,No" help "Enables the $i ${inName}" actualize_tree 1 {*}$zstate]] - + gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodev att1 state v1 hidden] gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodev att1 state v1 normal] if {[$in getAttribute "function"] eq "1"} { @@ -540,7 +540,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} gid_groups_conds::addF $block_path value [list n ${inName}$i wn [concat $n "_$i"] pn "$i ${pn}" v $v1 state hidden] } } - + } elseif { $type eq "combo" } { set values [join [$in getValues] ","] gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v1 values $values state $state help $help] @@ -554,7 +554,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} set fname "function_$inName" set nodev "../value\[@n='$inName'\]" set nodef "../value\[@n='$fname'\]" - + set valNode [gid_groups_conds::addF $block_path value [list n ByFunction pn "by function -> f(x,y,z,t)" v No values "Yes,No" actualize_tree 1]] gid_groups_conds::addF [$valNode toXPath] dependencies [list value No node $nodev att1 state v1 normal] gid_groups_conds::addF [$valNode toXPath] dependencies [list value Yes node $nodev att1 state v1 hidden] @@ -566,7 +566,7 @@ proc PfemFluid::xml::_injectCondsToTree {basenode cond_list {cond_type "normal"} gid_groups_conds::addF $block_path value [list n $inName pn $pn v $v units $units unit_magnitude $um help $help] } } - + set CondUsesIntervals [$cnd getAttribute "Interval"] if {$AppUsesIntervals && $CondUsesIntervals ne "False"} { gid_groups_conds::addF $block_path value [list n Interval pn "Time interval" v $CondUsesIntervals values {[getIntervals]} help $help] @@ -583,7 +583,7 @@ proc PfemFluid::xml::ProcCheckStateBoundingBox3Dimension {domNode args} { set checkvalue [split [lindex $arglist 1] ","] set pst [$domNode selectNodes $xpath] #W "xpath $xpath checkvalue $checkvalue pst $pst" - if {$pst in $checkvalue} { set state 1} + if {$pst in $checkvalue} { set state 1} if {$state} { set checkdim "3D" diff --git a/kratos.gid/scripts/Controllers/ImportFiles.tcl b/kratos.gid/scripts/Controllers/ImportFiles.tcl index d21a6213f..cd97fbf59 100644 --- a/kratos.gid/scripts/Controllers/ImportFiles.tcl +++ b/kratos.gid/scripts/Controllers/ImportFiles.tcl @@ -38,6 +38,7 @@ proc ::spdAux::SaveModelFile { fileid } { } proc ::spdAux::ProcGetFilesValues { domNode } { + Kratos::LoadImportFiles customlib::UpdateDocument spdAux::LoadModelFiles lappend listilla $::spdAux::no_file_string From acfdc8b6bb0a505c9f0e9e7c268142e2c78739e7 Mon Sep 17 00:00:00 2001 From: rlrangel Date: Wed, 10 Nov 2021 20:32:31 +0100 Subject: [PATCH 490/556] fixing --- kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl index 8469c4d40..dd05db1b3 100644 --- a/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/PfemThermic/write/writeProjectParameters.tcl @@ -48,7 +48,6 @@ proc PfemThermic::write::GetThermicSolverSettingsDict { } { dict set thermicSolverSettingsDict analysis_type [write::getValue CNVDFFAnalysisType] dict set thermicSolverSettingsDict time_integration_method "implicit" dict set thermicSolverSettingsDict model_part_name [ConvectionDiffusion::write::GetAttribute model_part_name] - dict set thermicSolverSettingsDict computing_model_part_name "thermal_computing_domain" dict set thermicSolverSettingsDict domain_size [expr [string range [write::getValue nDim] 0 0]] dict set thermicSolverSettingsDict reform_dofs_at_each_step "true" From 7d5632efcd21722bf657ec2550f2f33ceaa5404a Mon Sep 17 00:00:00 2001 From: jginternational Date: Tue, 16 Nov 2021 15:05:05 +0100 Subject: [PATCH 491/556] Enable the new gid feature condition with existing groups --- kratos.gid/scripts/Controllers/TreeInjections.tcl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kratos.gid/scripts/Controllers/TreeInjections.tcl b/kratos.gid/scripts/Controllers/TreeInjections.tcl index 2b9e457da..dfe700108 100644 --- a/kratos.gid/scripts/Controllers/TreeInjections.tcl +++ b/kratos.gid/scripts/Controllers/TreeInjections.tcl @@ -234,7 +234,11 @@ proc spdAux::_injectCondsToTree {basenode cond_list {cond_type "normal"} args } set state [$cnd getAttribute state] if {$state eq ""} {set state "CheckNodalConditionState"} } - set node "" + set allow_group_creation "" + if {[$cnd getAttribute Groups] ne ""} { + set allow_group_creation "allow_group_creation='0' groups_list='\[[$cnd getAttribute Groups]\]'" + } + set node "" set symbol_data [$cnd getSymbol] if { [llength $symbol_data] } { set txt " Date: Wed, 17 Nov 2021 17:54:06 +0100 Subject: [PATCH 492/556] element type inlet --- kratos.gid/apps/FluidDEM/write/write.tcl | 8 ++++++++ kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 0e35e5d4b..86f0662c0 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -38,7 +38,15 @@ proc FluidDEM::write::Validate { } { proc FluidDEM::write::writeCustomFilesEvent { } { FluidDEM::write::WriteMaterialsFile write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] +} +# Overwritten to add CylinderContinuumParticle +proc DEM::write::GetInletElementType {} { + set elem_name SphericSwimmingParticle3D + if {$::Model::SpatialDimension eq "2D"} { + set elem_name SphericSwimmingParticle2D + } + return $elem_name } proc FluidDEM::write::WriteMaterialsFile { } { diff --git a/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl b/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl index 4ffbe9a7b..0d5a1c46d 100644 --- a/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl +++ b/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl @@ -78,7 +78,13 @@ proc write::writeBasicSubmodelPartsByUniqueId {ConditionMap iter {un "GenericSub proc write::writeGroupConditionByUniqueId {groupid kname nnodes iter ConditionMap {print_again_repeated 0}} { set obj [list ] - + WV groupid + WV kname + WV nnodes + WV iter + WV ConditionMap + WV print_again_repeated 0 + # Print header set s [mdpaIndent] WriteString "${s}Begin Conditions $kname// GUI group identifier: $groupid" From de28ffb0e7052dc7b623cb4f7675bf4840997991 Mon Sep 17 00:00:00 2001 From: jginternational Date: Wed, 24 Nov 2021 15:08:01 +0100 Subject: [PATCH 493/556] python3 launch for linux --- kratos.gid/kratos.unix.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/kratos.unix.bat b/kratos.gid/kratos.unix.bat index a32e79334..3ea4ad5d3 100755 --- a/kratos.gid/kratos.unix.bat +++ b/kratos.gid/kratos.unix.bat @@ -45,4 +45,4 @@ else fi # Run Python using the script MainKratos.py -"$3/exec/Kratos/runkratos" MainKratos.py > "$2/$1.info" 2> "$2/$1.err" +python3 MainKratos.py > "$2/$1.info" 2> "$2/$1.err" From 468fcdbe33f3db5ec2fb2392d16fce735ac2220c Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 25 Nov 2021 17:12:53 +0100 Subject: [PATCH 494/556] fix write --- .../scripts/Writing/WriteConditionsByUniqueId.tcl | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl b/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl index 0d5a1c46d..d698a9539 100644 --- a/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl +++ b/kratos.gid/scripts/Writing/WriteConditionsByUniqueId.tcl @@ -78,13 +78,7 @@ proc write::writeBasicSubmodelPartsByUniqueId {ConditionMap iter {un "GenericSub proc write::writeGroupConditionByUniqueId {groupid kname nnodes iter ConditionMap {print_again_repeated 0}} { set obj [list ] - WV groupid - WV kname - WV nnodes - WV iter - WV ConditionMap - WV print_again_repeated 0 - + # Print header set s [mdpaIndent] WriteString "${s}Begin Conditions $kname// GUI group identifier: $groupid" @@ -109,7 +103,7 @@ proc write::writeGroupConditionByUniqueId {groupid kname nnodes iter ConditionMa set cndid 0 set new 0 if {$nnodes != 1} { - set eid [lindex $elems $i] + set eid [objarray get $elems $i] set cndid [objarray get $ConditionMap $eid] } if {$cndid == 0} { From f24da366786f19e93d86c6785f70a8d393920c96 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 26 Nov 2021 19:20:50 +0100 Subject: [PATCH 495/556] hotfix mpm --- kratos.gid/apps/MPM/write/write.tcl | 77 ++++++++++++++++------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 2fc567d95..83d9a12aa 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -1,7 +1,7 @@ namespace eval MPM::write { namespace path ::MPM Kratos::AddNamespace [namespace current] - + variable writeAttributes variable ConditionsDictGroupIterators } @@ -14,7 +14,7 @@ proc MPM::write::Init { } { SetAttribute parts_un [::MPM::GetUniqueName parts] SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions] SetAttribute conditions_un [::MPM::GetUniqueName conditions] - + SetAttribute writeCoordinatesByGroups [::MPM::GetWriteProperty coordinates] SetAttribute main_launch_file [::MPM::GetAttribute main_launch_file] SetAttribute materials_file [::MPM::GetWriteProperty materials_file] @@ -28,21 +28,21 @@ proc MPM::write::writeModelPartEvent { } { write::initWriteConfiguration [GetAttributes] MPM::write::UpdateMaterials - + set filename [Kratos::GetModelName] - + ## Grid MPDA ## # Headers write::writeModelPartData write::WriteString "Begin Properties 0" write::WriteString "End Properties" - # Nodal coordinates + # Nodal coordinates write::writeNodalCoordinates # Grid element connectivities writeGridConnectivities - + # Write conditions writeConditions @@ -72,22 +72,30 @@ proc MPM::write::writeModelPartEvent { } { write::CloseFile } -proc MPM::write::writeBodyNodalCoordinates { } { +proc MPM::write::GetPartsGroups { part_type {what "name"} } { 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 {$elem ni [list GRID2D GRID3D]} { - lappend body_groups [$gNode @n] + + 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 + } } } - write::writeNodalCoordinatesOnGroups $body_groups + return $body_groups +} + +proc MPM::write::writeBodyNodalCoordinates { } { + write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroups Body] } proc MPM::write::writeBodyElementConnectivities { } { - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - set body_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + 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 @@ -96,8 +104,7 @@ proc MPM::write::writeBodyElementConnectivities { } { } proc MPM::write::writeGridConnectivities { } { - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + 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 @@ -106,7 +113,6 @@ proc MPM::write::writeGridConnectivities { } { } proc MPM::write::writeConditions { } { - variable ConditionsDictGroupIterators set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] } @@ -114,32 +120,22 @@ proc MPM::write::writeConditions { } { proc MPM::write::writeSubmodelparts { type } { set grid_elements [list GRID2D GRID3D] - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - set body_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { + 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] - if {$type eq "grid"} { - if {$elem in $grid_elements} { - write::writeGroupSubModelPart $part_name $group_name "Elements" - } - } else { - if {$elem ni $grid_elements} { - write::writeGroupSubModelPart $part_name $group_name "Elements" - } - } + 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 } } + proc MPM::write::writeLoads { } { variable ConditionsDictGroupIterators set root [customlib::GetBaseRoot] @@ -158,7 +154,20 @@ proc MPM::write::writeLoads { } { proc MPM::write::writeCustomFilesEvent { } { # Materials file - write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] True Initial_MPM_Material + set mats_json [dict get [write::getPropertiesList [GetAttribute parts_un] True Initial_MPM_Material] properties ] + set new_mats [list ] + foreach mat $mats_json { + set type [dict exists $mat Material constitutive_law] + if {$type eq 0} { + set submodelpart [lindex [split [dict get $mat model_part_name] "."] end] + dict set mat model_part_name Background_Grid.$submodelpart + } + lappend new_mats $mat + } + write::OpenFile [GetAttribute materials_file] + write::WriteJSON [dict create properties $new_mats] + write::CloseFile + write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file] } @@ -167,13 +176,13 @@ proc MPM::write::UpdateMaterials { } { foreach {mat props} $matdict { # Modificar la ley constitutiva dict set matdict $mat THICKNESS 1.0000E+00 - + set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group\[@n='$mat'\]/value\[@n='THICKNESS'\]" - set vNode [[customlib::GetBaseRoot] selectNodes $xp1] + set vNode [[customlib::GetBaseRoot] selectNodes $xp1] if {$vNode ne ""} { dict set matdict $mat THICKNESS [write::getValueByNode $vNode] } - + } write::setMatDict $matdict } From 7735d869bfae348a65fe1a439653cc27ccdd9d7f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 27 Nov 2021 10:50:35 +0100 Subject: [PATCH 496/556] remove references to eigensolvers app --- kratos.gid/apps/Common/xml/Solvers.xml | 2 +- kratos.gid/apps/Dam/xml/Solvers.xml | 2 +- kratos.gid/apps/MPM/xml/XmlController.tcl | 2 +- kratos.gid/apps/PfemFluid/xml/Solvers.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kratos.gid/apps/Common/xml/Solvers.xml b/kratos.gid/apps/Common/xml/Solvers.xml index f73a4a85a..ccff2e8d6 100644 --- a/kratos.gid/apps/Common/xml/Solvers.xml +++ b/kratos.gid/apps/Common/xml/Solvers.xml @@ -7,7 +7,7 @@ - + diff --git a/kratos.gid/apps/Dam/xml/Solvers.xml b/kratos.gid/apps/Dam/xml/Solvers.xml index 87c8a569a..330606943 100644 --- a/kratos.gid/apps/Dam/xml/Solvers.xml +++ b/kratos.gid/apps/Dam/xml/Solvers.xml @@ -6,7 +6,7 @@ - + diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl index 56f079a46..dc5502204 100644 --- a/kratos.gid/apps/MPM/xml/XmlController.tcl +++ b/kratos.gid/apps/MPM/xml/XmlController.tcl @@ -60,7 +60,7 @@ proc MPM::xml::CustomTree { args } { spdAux::SetValueOnTreeItem v "time" Results OutputControlType spdAux::SetValueOnTreeItem values "time" Results OutputControlType spdAux::SetValueOnTreeItem v No NodalResults PARTITION_INDEX - spdAux::SetValueOnTreeItem v "EigenSolversApplication.sparse_lu" MPMimplicitlinear_solver_settings Solver + spdAux::SetValueOnTreeItem v "LinearSolversApplication.sparse_lu" MPMimplicitlinear_solver_settings Solver } diff --git a/kratos.gid/apps/PfemFluid/xml/Solvers.xml b/kratos.gid/apps/PfemFluid/xml/Solvers.xml index ff9df08a4..ef4c9335b 100644 --- a/kratos.gid/apps/PfemFluid/xml/Solvers.xml +++ b/kratos.gid/apps/PfemFluid/xml/Solvers.xml @@ -5,7 +5,7 @@ - + From 49209be90018fba2233e41f463bd9753ee451961 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Sat, 27 Nov 2021 13:11:04 +0100 Subject: [PATCH 497/556] add launch configuration --- kratos.gid/kratos.tcl | 7 +++++++ .../scripts/Controllers/Preferences.xml | 1 + .../scripts/Controllers/PreferencesWindow.tcl | 19 +++++++++++-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index ce2b23a6f..07e05ea90 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -154,6 +154,8 @@ proc Kratos::InitGlobalVariables {dir} { set Kratos::kratos_private(problemtype_git_hash) 0 # Place were the logs will be placed set Kratos::kratos_private(model_log_folder) "" + # Check exec/launch.json + set Kratos::kratos_private(launch_configuration) "local" # Variable to store the Kratos menu items set kratos_private(MenuItems) [dict create] @@ -485,6 +487,11 @@ proc Kratos::Event_BeforeRunCalculation { batfilename basename dir problemtypedi } set app_run_brake [apps::ExecuteOnCurrentApp BreakRunCalculation] if {[write::isBooleanTrue $app_run_brake]} {return "-cancel-"} + + if {[info exists Kratos::kratos_private(launch_configuration)]} { + set launch_type $Kratos::kratos_private(launch_configuration) + W $launch_type + } } proc Kratos::Event_AfterWriteCalculationFile { filename errorflag } { diff --git a/kratos.gid/scripts/Controllers/Preferences.xml b/kratos.gid/scripts/Controllers/Preferences.xml index 1d1997b92..0ba892059 100644 --- a/kratos.gid/scripts/Controllers/Preferences.xml +++ b/kratos.gid/scripts/Controllers/Preferences.xml @@ -19,6 +19,7 @@ + @@ -23,7 +24,6 @@ - diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index df22b2252..b8035fc2f 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -447,8 +447,10 @@ proc write::GetDefaultGiDOutput { {appid ""} } { # Setup GiD-Output set outputProcessParams [dict create] dict set outputProcessParams model_part_name [write::GetModelPartNameWithParent [GetConfigurationAttribute output_model_part_name]] - dict set outputProcessParams output_name [file join "gid_output" $model_name] dict set outputProcessParams postprocess_parameters [write::GetDefaultOutputGiDDict $appid] + set folder_name [dict get $outputProcessParams postprocess_parameters folder_name] + dict unset outputProcessParams postprocess_parameters folder_name + dict set outputProcessParams output_name [file join $folder_name $model_name] set outputConfigDict [dict create] dict set outputConfigDict python_module gid_output_process @@ -497,6 +499,8 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { dict set outputDict "result_file_configuration" $resultDict dict set outputDict "point_data_configuration" [GetEmptyList] + + dict set outputDict folder_name [getValueByXPath $gid_options_xpath FolderName] return $outputDict } From 0d448f31cd2ef6c5250f1d1cbbcf626559b425f4 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Feb 2022 12:50:14 +0100 Subject: [PATCH 549/556] proper format --- .../xml/TimeParametersWithSubstepping.spd | 2 +- .../Writing/WriteProjectParameters.tcl | 116 +++++++++--------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd b/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd index eeaa00656..723304ff0 100644 --- a/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd +++ b/kratos.gid/apps/Common/xml/TimeParametersWithSubstepping.spd @@ -4,7 +4,7 @@ - + diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index 37d4456f5..3c931bd29 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -122,14 +122,14 @@ proc write::GetCutPlanesList { {cut_planes_UN CutPlanes} } { } proc write::GetCutPlanesByXPathList { xpath } { - + set root [customlib::GetBaseRoot] - + set list_of_planes [list ] - + set xp1 "$xpath/blockdata" set planes [$root selectNodes $xp1] - + foreach plane $planes { set pdict [dict create] set points [split [get_domnode_attribute [$plane firstChild] v] ","] @@ -168,12 +168,12 @@ proc write::getSolutionStrategyParametersDict { {solStratUN ""} {schemeUN ""} {S if {$StratParamsUN eq ""} { set StratParamsUN [apps::getCurrentUniqueName StratParams] } - + set solstratName [write::getValue $solStratUN] set schemeName [write::getValue $schemeUN] set sol [::Model::GetSolutionStrategy $solstratName] set sch [$sol getScheme $schemeName] - + set solverSettingsDict [dict create] foreach {n in} [$sol getInputs] { dict set solverSettingsDict $n [write::getValue $StratParamsUN $n force] @@ -223,11 +223,11 @@ proc write::getSolversParametersDict { {appid ""} } { } proc write::getConditionsParametersDict {un {condition_type "Condition"}} { - + set root [customlib::GetBaseRoot] set bcCondsList [list ] set grouped_conditions [list ] - + set xp1 "[spdAux::getRoute $un]/condition/group" set groups [$root selectNodes $xp1] if {$groups eq ""} { @@ -258,44 +258,44 @@ proc write::getConditionsParametersDict {un {condition_type "Condition"}} { set process [::Model::GetProcess $processName] set processDict [dict create] set processWriteCommand [$process getAttribute write_command] - + dict set processDict process_name $processName - + if {$processWriteCommand eq ""} { set processDict [write::GetProcessHeader $group $process $condition $groupId] - + set process_parameters [$process getInputs] foreach {inputName in_obj} $process_parameters { dict set processDict Parameters $inputName [write::GetInputValue $group $in_obj] } - + } else { set processDict [$processWriteCommand $group $condition $process] } lappend bcCondsList $processDict } } - + foreach cid $grouped_conditions { if {$condition_type eq "Condition"} { set condition [::Model::getCondition $cid] } { set condition [::Model::getNodalConditionbyId $cid] } - + set processName [$condition getProcessName] set process [::Model::GetProcess $processName] set processDict [dict create] set paramDict [dict create] dict set paramDict model_part_name [write::GetModelPartNameWithParent $cid] - + set process_attributes [$process getAttributes] set process_parameters [$process getInputs] - + dict set process_attributes process_name [dict get $process_attributes n] dict unset process_attributes n dict unset process_attributes pn - + set processDict [dict merge $processDict $process_attributes] if {[$condition hasAttribute VariableName]} { set variable_name [$condition getAttribute VariableName] @@ -309,15 +309,15 @@ proc write::getConditionsParametersDict {un {condition_type "Condition"}} { } proc write::GetResultsList { un {cnd ""} } { - + if {$cnd eq ""} {set xp1 [spdAux::getRoute $un]} {set xp1 "[spdAux::getRoute $un]/container\[@n = '$cnd'\]"} return [GetResultsByXPathList $xp1] } proc write::GetResultsByXPathList { xpath } { - + set root [customlib::GetBaseRoot] - + set result [list ] set xp1 "$xpath/value" set resultxml [$root selectNodes $xp1] @@ -335,10 +335,10 @@ proc write::GetResultsByXPathList { xpath } { proc write::getAllMaterialParametersDict {matname} { set root [customlib::GetBaseRoot] set md [dict create] - + set xp3 [spdAux::getRoute [GetConfigurationAttribute materials_un]] append xp3 [format_xpath {/blockdata[@n="material" and @name=%s]/value} $matname] - + set props [$root selectNodes $xp3] foreach prop $props { dict set md [$prop @n] [get_domnode_attribute $prop v] @@ -348,7 +348,7 @@ proc write::getAllMaterialParametersDict {matname} { proc write::getIntervalsDict { { un "Intervals" } {appid "" } } { set root [customlib::GetBaseRoot] - + set intervalsDict [dict create] set xp3 "[spdAux::getRoute $un]/blockdata\[@n='Interval'\]" if {$xp3 ne ""} { @@ -395,27 +395,27 @@ proc write::GetModelPartNameWithParent { child_name {forced_parent ""}} { } proc write::GetDefaultProblemDataDict { {appid ""} } { - + # Get the results unique name. appid parameter is usefull for multiple inheritance app with more than 1 results section if {$appid eq ""} {set results_UN Results } {set results_UN [GetConfigurationAttribute results_un]} - + # Problem name set problem_data_dict [dict create] set model_name [Kratos::GetModelName] dict set problem_data_dict problem_name $model_name - + # Parallelization set paralleltype [write::getValue ParallelType] dict set problem_data_dict "parallel_type" $paralleltype - + # Write the echo level in the problem data section set echo_level [write::getValue $results_UN EchoLevel] dict set problem_data_dict echo_level $echo_level - + # Time Parameters dict set problem_data_dict start_time [write::getValue [GetConfigurationAttribute time_parameters_un] StartTime] dict set problem_data_dict end_time [write::getValue [GetConfigurationAttribute time_parameters_un] EndTime] - + return $problem_data_dict } @@ -426,24 +426,24 @@ proc write::GetDefaultOutputProcessDict { {appid ""} } { if {[write::isBooleanTrue $need_gid]} { lappend gid_output_process_list [write::GetDefaultGiDOutput $appid] } - + set vtk_output_process_list [list ] set need_vtk [write::getValue EnableVtkOutput] if {[write::isBooleanTrue $need_vtk]} { lappend vtk_output_process_list [write::GetDefaultVTKOutput $appid] } - + set outputProcessesDict [dict create] dict set outputProcessesDict gid_output $gid_output_process_list dict set outputProcessesDict vtk_output $vtk_output_process_list - + return $outputProcessesDict } proc write::GetDefaultGiDOutput { {appid ""} } { # prepare params set model_name [Kratos::GetModelName] - + # Setup GiD-Output set outputProcessParams [dict create] dict set outputProcessParams model_part_name [write::GetModelPartNameWithParent [GetConfigurationAttribute output_model_part_name]] @@ -451,21 +451,21 @@ proc write::GetDefaultGiDOutput { {appid ""} } { set folder_name [dict get $outputProcessParams postprocess_parameters folder_name] dict unset outputProcessParams postprocess_parameters folder_name dict set outputProcessParams output_name [file join $folder_name $model_name] - + set outputConfigDict [dict create] dict set outputConfigDict python_module gid_output_process dict set outputConfigDict kratos_module KratosMultiphysics dict set outputConfigDict process_name GiDOutputProcess dict set outputConfigDict help "This process writes postprocessing files for GiD" dict set outputConfigDict Parameters $outputProcessParams - + return $outputConfigDict } proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set outputDict [dict create] set resultDict [dict create] - + if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} if {$gid_options_xpath eq ""} {set gid_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]"} set GiDPostDict [dict create] @@ -474,7 +474,7 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { dict set GiDPostDict WriteConditionsFlag [getValueByXPath $gid_options_xpath GiDWriteConditionsFlag] dict set GiDPostDict MultiFileFlag [getValueByXPath $gid_options_xpath GiDMultiFileFlag] dict set resultDict gidpost_flags $GiDPostDict - + dict set resultDict file_label [getValueByXPath $gid_options_xpath FileLabel] set outputCT [getValueByXPath $gid_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT @@ -484,11 +484,11 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set frequency [getValueByXPath $gid_options_xpath OutputDeltaStep] } dict set resultDict output_interval $frequency - + dict set resultDict body_output [getValueByXPath $gid_options_xpath BodyOutput] dict set resultDict node_output [getValueByXPath $gid_options_xpath NodeOutput] dict set resultDict skin_output [getValueByXPath $gid_options_xpath SkinOutput] - + set gid_cut_planes_xpath "[spdAux::getRoute $results_UN]/container\[@n='GiDOutput'\]/container\[@n='CutPlanes'\]" dict set resultDict plane_output [GetCutPlanesByXPathList $gid_cut_planes_xpath] set gid_nodes_xpath "[spdAux::getRoute $results_UN]/container\[@n='OnNodes'\]" @@ -496,19 +496,19 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set gid_elements_xpath "[spdAux::getRoute $results_UN]/container\[@n='OnElement'\]" dict set resultDict gauss_point_results [GetResultsByXPathList $gid_elements_xpath] dict set resultDict nodal_nonhistorical_results [list ] - + dict set outputDict "result_file_configuration" $resultDict dict set outputDict "point_data_configuration" [GetEmptyList] - + dict set outputDict folder_name [getValueByXPath $gid_options_xpath FolderName] return $outputDict } proc write::GetDefaultVTKOutput { {appid ""} } { - + # prepare params set model_name [Kratos::GetModelName] - + # Setup Vtk-Output set outputConfigDictVtk [dict create] dict set outputConfigDictVtk python_module vtk_output_process @@ -516,17 +516,17 @@ proc write::GetDefaultVTKOutput { {appid ""} } { dict set outputConfigDictVtk process_name VtkOutputProcess dict set outputConfigDictVtk help "This process writes postprocessing files for Paraview" dict set outputConfigDictVtk Parameters [write::GetDefaultParametersOutputVTKDict $appid] - + return $outputConfigDictVtk } proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { set resultDict [dict create] dict set resultDict model_part_name [write::GetModelPartNameWithParent [GetConfigurationAttribute output_model_part_name]] - + if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} set vtk_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='VtkOutput'\]/container\[@n='VtkOptions'\]" - + # manually selecting step, otherwise Paraview won't group the results set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT @@ -542,12 +542,12 @@ proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { dict set resultDict element_data_value_variables [list ] dict set resultDict condition_data_value_variables [list ] dict set resultDict gauss_point_variables_extrapolated_to_nodes [GetResultsList $results_UN OnElement] - + return $resultDict } proc write::GetDefaultRestartDict { } { - + set restartDict [dict create] dict set restartDict SaveRestart False dict set restartDict RestartFrequency 0 @@ -559,23 +559,23 @@ proc write::GetDefaultRestartDict { } { proc write::GetTimeStepIntervals { {time_parameters_un ""} } { if {$time_parameters_un eq ""} {set time_parameters_un [GetConfigurationAttribute time_parameters_un]} set root [customlib::GetBaseRoot] - + set xp "[spdAux::getRoute $time_parameters_un]/container\[@n = 'TimeStep'\]/blockdata" set time_step_interval_nodes [$root selectNodes $xp] # If the app is still working on fixed Delta time if {[llength $time_step_interval_nodes] eq 0} {return [write::getValue $time_parameters_un DeltaTime]} - + # If it works with interval delta time - set time_step_intervals_dict [dict create] + set time_step_intervals_list [list ] foreach time_step_interval_node $time_step_interval_nodes { - set time_step_interval_name [get_domnode_attribute $time_step_interval_node name] + set time_step_interval_start_time [write::getValueByNode [$time_step_interval_node find n StartTime]] set time_step_interval_delta_time [write::getValueByNode [$time_step_interval_node find n DeltaTime]] - set time_step_interval_interval_name [write::getValueByNode [$time_step_interval_node find n Interval]] - lassign [write::getInterval $time_step_interval_interval_name] ini end - set params [dict create interval [list $ini $end] time_step $time_step_interval_delta_time] - dict set time_step_intervals_dict $time_step_interval_name $params + + set key_value [list $time_step_interval_start_time $time_step_interval_delta_time] + lappend time_step_intervals_list $key_value } - - return $time_step_intervals_dict + + set time_step_intervals_list [lsort -real -index 0 $time_step_intervals_list] + return $time_step_intervals_list } \ No newline at end of file From 7a84a0009e61e9c355a32220a3c712020bb42208 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Feb 2022 13:22:49 +0100 Subject: [PATCH 550/556] space --- kratos.gid/scripts/Writing/Writing.tcl | 1 - 1 file changed, 1 deletion(-) diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index 1ac683676..e9bb64f2b 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -1,5 +1,4 @@ - ################################################################################## # This file is common for all Kratos Applications. # Do not change anything here unless it's strictly necessary. From 5fd981677e506558a6b4cd7ac8b9cc2006af5994 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Feb 2022 16:54:46 +0100 Subject: [PATCH 551/556] naming --- kratos.gid/apps/Structural/write/writeProjectParameters.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl index ba8e0c4bf..9c66b0b7d 100644 --- a/kratos.gid/apps/Structural/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Structural/write/writeProjectParameters.tcl @@ -16,15 +16,15 @@ proc ::Structural::write::getOldParametersDict { } { set time_step "1.1" dict set problemDataDict start_time "0.0" dict set problemDataDict end_time "1.0" - + # Time stepping settings for static dict set timeSteppingDict "time_step" $time_step } { - set time_step_intervals [write::GetTimeStepIntervals] + set time_step_table [write::GetTimeStepIntervals] # Time stepping settings for dynamic - dict set timeSteppingDict "time_step_intervals" $time_step_intervals + dict set timeSteppingDict "time_step_table" $time_step_table } # Add section to document From e07e0724e7d82f4ab520de5aa70ec06ca4fe0b29 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Feb 2022 22:02:41 +0100 Subject: [PATCH 552/556] sin inventos --- .../Writing/WriteProjectParameters.tcl | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index 7805fc221..ceebbfcc8 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -20,7 +20,7 @@ proc write::tcl2json { value } { # regexp {^value is a (.*?) with a refcount} [::tcl::unsupported::representation $value] -> type set type [GidUtils::GetInternalRepresentation $value] if {$value eq ""} {return [json::write array {*}[lmap v $value {tcl2json $v}]]} - if {$type ne "dict" && [llength $value]>1} { set type list} + # if {$type ne "dict" && [llength $value]>1} { set type list} switch $type { string { if {$value eq "false"} {return [expr "false"]} @@ -124,14 +124,14 @@ proc write::GetCutPlanesList { {cut_planes_UN CutPlanes} } { } proc write::GetCutPlanesByXPathList { xpath } { - + set root [customlib::GetBaseRoot] - + set list_of_planes [list ] - + set xp1 "$xpath/blockdata" set planes [$root selectNodes $xp1] - + foreach plane $planes { set pdict [dict create] set points [split [get_domnode_attribute [$plane firstChild] v] ","] @@ -175,7 +175,7 @@ proc write::getSolutionStrategyParametersDict { {solStratUN ""} {schemeUN ""} {S set schemeName [write::getValue $schemeUN "" force] set sol [::Model::GetSolutionStrategy $solstratName] set sch [$sol getScheme $schemeName] - + set solverSettingsDict [dict create] foreach {n in} [$sol getInputs] { dict set solverSettingsDict $n [write::getValue $StratParamsUN $n force] @@ -225,11 +225,11 @@ proc write::getSolversParametersDict { {appid ""} } { } proc write::getConditionsParametersDict {un {condition_type "Condition"}} { - + set root [customlib::GetBaseRoot] set bcCondsList [list ] set grouped_conditions [list ] - + set xp1 "[spdAux::getRoute $un]/condition/group" set groups [$root selectNodes $xp1] if {$groups eq ""} { @@ -260,44 +260,44 @@ proc write::getConditionsParametersDict {un {condition_type "Condition"}} { set process [::Model::GetProcess $processName] set processDict [dict create] set processWriteCommand [$process getAttribute write_command] - + dict set processDict process_name $processName - + if {$processWriteCommand eq ""} { set processDict [write::GetProcessHeader $group $process $condition $groupId] - + set process_parameters [$process getInputs] foreach {inputName in_obj} $process_parameters { dict set processDict Parameters $inputName [write::GetInputValue $group $in_obj] } - + } else { set processDict [$processWriteCommand $group $condition $process] } lappend bcCondsList $processDict } } - + foreach cid $grouped_conditions { if {$condition_type eq "Condition"} { set condition [::Model::getCondition $cid] } { set condition [::Model::getNodalConditionbyId $cid] } - + set processName [$condition getProcessName] set process [::Model::GetProcess $processName] set processDict [dict create] set paramDict [dict create] dict set paramDict model_part_name [write::GetModelPartNameWithParent $cid] - + set process_attributes [$process getAttributes] set process_parameters [$process getInputs] - + dict set process_attributes process_name [dict get $process_attributes n] dict unset process_attributes n dict unset process_attributes pn - + set processDict [dict merge $processDict $process_attributes] if {[$condition hasAttribute VariableName]} { set variable_name [$condition getAttribute VariableName] @@ -311,15 +311,15 @@ proc write::getConditionsParametersDict {un {condition_type "Condition"}} { } proc write::GetResultsList { un {cnd ""} } { - + if {$cnd eq ""} {set xp1 [spdAux::getRoute $un]} {set xp1 "[spdAux::getRoute $un]/container\[@n = '$cnd'\]"} return [GetResultsByXPathList $xp1] } proc write::GetResultsByXPathList { xpath } { - + set root [customlib::GetBaseRoot] - + set result [list ] set xp1 "$xpath/value" set resultxml [$root selectNodes $xp1] @@ -337,10 +337,10 @@ proc write::GetResultsByXPathList { xpath } { proc write::getAllMaterialParametersDict {matname} { set root [customlib::GetBaseRoot] set md [dict create] - + set xp3 [spdAux::getRoute [GetConfigurationAttribute materials_un]] append xp3 [format_xpath {/blockdata[@n="material" and @name=%s]/value} $matname] - + set props [$root selectNodes $xp3] foreach prop $props { dict set md [$prop @n] [get_domnode_attribute $prop v] @@ -350,7 +350,7 @@ proc write::getAllMaterialParametersDict {matname} { proc write::getIntervalsDict { { un "Intervals" } {appid "" } } { set root [customlib::GetBaseRoot] - + set intervalsDict [dict create] set xp3 "[spdAux::getRoute $un]/blockdata\[@n='Interval'\]" if {$xp3 ne ""} { @@ -397,27 +397,27 @@ proc write::GetModelPartNameWithParent { child_name {forced_parent ""}} { } proc write::GetDefaultProblemDataDict { {appid ""} } { - + # Get the results unique name. appid parameter is usefull for multiple inheritance app with more than 1 results section if {$appid eq ""} {set results_UN Results } {set results_UN [GetConfigurationAttribute results_un]} - + # Problem name set problem_data_dict [dict create] set model_name [Kratos::GetModelName] dict set problem_data_dict problem_name $model_name - + # Parallelization set paralleltype [write::getValue ParallelType] dict set problem_data_dict "parallel_type" $paralleltype - + # Write the echo level in the problem data section set echo_level [write::getValue $results_UN EchoLevel] dict set problem_data_dict echo_level $echo_level - + # Time Parameters dict set problem_data_dict start_time [write::getValue [GetConfigurationAttribute time_parameters_un] StartTime] dict set problem_data_dict end_time [write::getValue [GetConfigurationAttribute time_parameters_un] EndTime] - + return $problem_data_dict } @@ -428,24 +428,24 @@ proc write::GetDefaultOutputProcessDict { {appid ""} } { if {[write::isBooleanTrue $need_gid]} { lappend gid_output_process_list [write::GetDefaultGiDOutput $appid] } - + set vtk_output_process_list [list ] set need_vtk [write::getValue EnableVtkOutput] if {[write::isBooleanTrue $need_vtk]} { lappend vtk_output_process_list [write::GetDefaultVTKOutput $appid] } - + set outputProcessesDict [dict create] dict set outputProcessesDict gid_output $gid_output_process_list dict set outputProcessesDict vtk_output $vtk_output_process_list - + return $outputProcessesDict } proc write::GetDefaultGiDOutput { {appid ""} } { # prepare params set model_name [Kratos::GetModelName] - + # Setup GiD-Output set outputProcessParams [dict create] dict set outputProcessParams model_part_name [write::GetModelPartNameWithParent [GetConfigurationAttribute output_model_part_name]] @@ -453,21 +453,21 @@ proc write::GetDefaultGiDOutput { {appid ""} } { set folder_name [dict get $outputProcessParams postprocess_parameters folder_name] dict unset outputProcessParams postprocess_parameters folder_name dict set outputProcessParams output_name [file join $folder_name $model_name] - + set outputConfigDict [dict create] dict set outputConfigDict python_module gid_output_process dict set outputConfigDict kratos_module KratosMultiphysics dict set outputConfigDict process_name GiDOutputProcess # dict set outputConfigDict help "This process writes postprocessing files for GiD" dict set outputConfigDict Parameters $outputProcessParams - + return $outputConfigDict } proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set outputDict [dict create] set resultDict [dict create] - + if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} if {$gid_options_xpath eq ""} {set gid_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]"} set GiDPostDict [dict create] @@ -476,7 +476,7 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { dict set GiDPostDict WriteConditionsFlag [getValueByXPath $gid_options_xpath GiDWriteConditionsFlag] dict set GiDPostDict MultiFileFlag [getValueByXPath $gid_options_xpath GiDMultiFileFlag] dict set resultDict gidpost_flags $GiDPostDict - + dict set resultDict file_label [getValueByXPath $gid_options_xpath FileLabel] set outputCT [getValueByXPath $gid_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT @@ -486,11 +486,11 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set frequency [getValueByXPath $gid_options_xpath OutputDeltaStep] } dict set resultDict output_interval $frequency - + dict set resultDict body_output [getValueByXPath $gid_options_xpath BodyOutput] dict set resultDict node_output [getValueByXPath $gid_options_xpath NodeOutput] dict set resultDict skin_output [getValueByXPath $gid_options_xpath SkinOutput] - + set gid_cut_planes_xpath "[spdAux::getRoute $results_UN]/container\[@n='GiDOutput'\]/container\[@n='CutPlanes'\]" dict set resultDict plane_output [GetCutPlanesByXPathList $gid_cut_planes_xpath] set gid_nodes_xpath "[spdAux::getRoute $results_UN]/container\[@n='OnNodes'\]" @@ -498,19 +498,19 @@ proc write::GetDefaultOutputGiDDict { {appid ""} {gid_options_xpath ""} } { set gid_elements_xpath "[spdAux::getRoute $results_UN]/container\[@n='OnElement'\]" dict set resultDict gauss_point_results [GetResultsByXPathList $gid_elements_xpath] dict set resultDict nodal_nonhistorical_results [list ] - + dict set outputDict "result_file_configuration" $resultDict dict set outputDict "point_data_configuration" [GetEmptyList] - + dict set outputDict folder_name [getValueByXPath $gid_options_xpath FolderName] return $outputDict } proc write::GetDefaultVTKOutput { {appid ""} } { - + # prepare params set model_name [Kratos::GetModelName] - + # Setup Vtk-Output set outputConfigDictVtk [dict create] dict set outputConfigDictVtk python_module vtk_output_process @@ -518,17 +518,17 @@ proc write::GetDefaultVTKOutput { {appid ""} } { dict set outputConfigDictVtk process_name VtkOutputProcess #dict set outputConfigDictVtk help "This process writes postprocessing files for Paraview" dict set outputConfigDictVtk Parameters [write::GetDefaultParametersOutputVTKDict $appid] - + return $outputConfigDictVtk } proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { set resultDict [dict create] dict set resultDict model_part_name [write::GetModelPartNameWithParent [GetConfigurationAttribute output_model_part_name]] - + if {$appid eq ""} {set results_UN Results } {set results_UN [apps::getAppUniqueName $appid Results]} set vtk_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='VtkOutput'\]/container\[@n='VtkOptions'\]" - + # manually selecting step, otherwise Paraview won't group the results set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT @@ -544,12 +544,12 @@ proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { dict set resultDict element_data_value_variables [list ] dict set resultDict condition_data_value_variables [list ] dict set resultDict gauss_point_variables_extrapolated_to_nodes [GetResultsList $results_UN OnElement] - + return $resultDict } proc write::GetDefaultRestartDict { } { - + set restartDict [dict create] dict set restartDict SaveRestart False dict set restartDict RestartFrequency 0 @@ -561,23 +561,23 @@ proc write::GetDefaultRestartDict { } { proc write::GetTimeStepIntervals { {time_parameters_un ""} } { if {$time_parameters_un eq ""} {set time_parameters_un [GetConfigurationAttribute time_parameters_un]} set root [customlib::GetBaseRoot] - + set xp "[spdAux::getRoute $time_parameters_un]/container\[@n = 'TimeStep'\]/blockdata" set time_step_interval_nodes [$root selectNodes $xp] - + # If the app is still working on fixed Delta time if {[llength $time_step_interval_nodes] eq 0} {return [write::getValue $time_parameters_un DeltaTime]} - + # If it works with interval delta time set time_step_intervals_list [list ] foreach time_step_interval_node $time_step_interval_nodes { set time_step_interval_start_time [write::getValueByNode [$time_step_interval_node find n StartTime]] set time_step_interval_delta_time [write::getValueByNode [$time_step_interval_node find n DeltaTime]] - + set key_value [list $time_step_interval_start_time $time_step_interval_delta_time] lappend time_step_intervals_list $key_value } - + set time_step_intervals_list [lsort -real -index 0 $time_step_intervals_list] return $time_step_intervals_list } \ No newline at end of file From e8ef87029a1658d2233b688b240c2f48c21b550b Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Tue, 8 Feb 2022 22:10:36 +0100 Subject: [PATCH 553/556] remove value in matrix --- kratos.gid/apps/FluidDEM/write/write.tcl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index 519d865d1..fa01fbbad 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -89,6 +89,8 @@ proc FluidDEM::write::writeFluidModifiedMaterials {fluid_materials_json} { dict unset property Material Variables PERMEABILITY_22; dict unset property Material Variables PERMEABILITY_23 dict unset property Material Variables PERMEABILITY_33 dict set property Material Variables PERMEABILITY [list $permeability_1 $permeability_2 $permeability_3] + + if {[dict exists $property Material Variables value]} {dict unset property Material Variables value} } dict lappend new_json properties $property } From e50a3f5947781ecdfe8294247334269a4f9d7de6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Feb 2022 14:38:54 +0100 Subject: [PATCH 554/556] permeability print --- kratos.gid/apps/FluidDEM/write/write.tcl | 21 ++++++++++++++----- kratos.gid/kratos.tcl | 1 + kratos.gid/scripts/Utils.tcl | 2 +- .../Writing/WriteProjectParameters.tcl | 13 +++++------- kratos.gid/scripts/Writing/Writing.tcl | 21 +++++++++++++++++++ 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/kratos.gid/apps/FluidDEM/write/write.tcl b/kratos.gid/apps/FluidDEM/write/write.tcl index fa01fbbad..3056c8014 100644 --- a/kratos.gid/apps/FluidDEM/write/write.tcl +++ b/kratos.gid/apps/FluidDEM/write/write.tcl @@ -80,16 +80,27 @@ proc Fluid::write::getFluidModelPartFilename { } { proc FluidDEM::write::writeFluidModifiedMaterials {fluid_materials_json} { set new_json [dict create] + foreach property [dict get $fluid_materials_json properties] { - if {[dict exists $property Material Variables PERMEABILITY_11]} { - set permeability_1 [list [dict get $property Material Variables PERMEABILITY_11] [dict get $property Material Variables PERMEABILITY_12] [dict get $property Material Variables PERMEABILITY_13]] - set permeability_2 [list [dict get $property Material Variables PERMEABILITY_12] [dict get $property Material Variables PERMEABILITY_22] [dict get $property Material Variables PERMEABILITY_23]] - set permeability_3 [list [dict get $property Material Variables PERMEABILITY_13] [dict get $property Material Variables PERMEABILITY_23] [dict get $property Material Variables PERMEABILITY_33]] + if {[dict exists $property Material Variables PERMEABILITY]} { + set permeability [dict get $property Material Variables PERMEABILITY] + + set p11 [expr [lindex $permeability 0 0]] + set p12 [expr [lindex $permeability 0 1]] + set p13 [expr [lindex $permeability 0 2]] + set p21 [expr [lindex $permeability 1 0]] + set p22 [expr [lindex $permeability 1 1]] + set p23 [expr [lindex $permeability 1 2]] + set p31 [expr [lindex $permeability 2 0]] + set p32 [expr [lindex $permeability 2 1]] + set p33 [expr [lindex $permeability 2 2]] + set permeability_1 [list $p11 $p12 $p13] + set permeability_2 [list $p21 $p22 $p23] + set permeability_3 [list $p31 $p32 $p33] dict unset property Material Variables PERMEABILITY_11; dict unset property Material Variables PERMEABILITY_12; dict unset property Material Variables PERMEABILITY_13 dict unset property Material Variables PERMEABILITY_22; dict unset property Material Variables PERMEABILITY_23 dict unset property Material Variables PERMEABILITY_33 dict set property Material Variables PERMEABILITY [list $permeability_1 $permeability_2 $permeability_3] - if {[dict exists $property Material Variables value]} {dict unset property Material Variables value} } dict lappend new_json properties $property diff --git a/kratos.gid/kratos.tcl b/kratos.gid/kratos.tcl index 80fee738f..78a1bfdeb 100644 --- a/kratos.gid/kratos.tcl +++ b/kratos.gid/kratos.tcl @@ -523,6 +523,7 @@ proc Kratos::Event_AfterWriteCalculationFile { filename errorflag } { } proc Kratos::WriteCalculationFilesEvent { {filename ""} } { + # W "Kratos::WriteCalculationFilesEvent" # Write the calculation files (mdpa, json...) if {$filename eq ""} { # Model must be saved diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 9452a5f03..6f36acb72 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -162,7 +162,7 @@ proc Kratos::RegisterEnvironment { } { if {[llength [dict keys $preferences]] > 0} { set fp [open [Kratos::GetPreferencesFilePath] w] - if {[catch {set data [puts $fp [write::tcl2json $preferences]]} ]} {W "Problems saving user prefecences"; W $data} + if {[catch {set data [puts $fp [write::tcl2json $preferences]]} ]} {W "Problems saving user prefecences"; W $preferences} close $fp } } diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index ceebbfcc8..a646385fd 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -20,15 +20,9 @@ proc write::tcl2json { value } { # regexp {^value is a (.*?) with a refcount} [::tcl::unsupported::representation $value] -> type set type [GidUtils::GetInternalRepresentation $value] if {$value eq ""} {return [json::write array {*}[lmap v $value {tcl2json $v}]]} - # if {$type ne "dict" && [llength $value]>1} { set type list} + #if {$type ne "dict" && [llength $value]>1 && [string index $value 0] eq "\{"} { W "$value as list"; set type list} + #if {$type eq "exprcode"} {set type list; W "$type -> $value"} switch $type { - string { - if {$value eq "false"} {return [expr "false"]} - if {$value eq "true"} {return [expr "true"]} - if {$value eq "null"} {return null} - if {$value eq "dictnull"} {return {{}}} - return [json::write string $value] - } dict { return [json::write object {*}[ dict map {k v} $value {tcl2json $v}]] @@ -57,11 +51,14 @@ proc write::tcl2json { value } { return [expr {$value}] } elseif {[string is boolean -strict $value]} { return [expr {$value ? "true" : "false"}] + } elseif {[string index $value 0] eq "\{"} { + return [json::write array {*}[lmap v $value {tcl2json $v}]] } return [json::write string $value] } } } + proc write::tcl2jsonstrings { value } { # Guess the type of the value; deep *UNSUPPORTED* magic! # display the representation of a Tcl_Obj for debugging purposes. Do not base the behavior of any command on the results of this one; it does not conform to Tcl's value semantics! diff --git a/kratos.gid/scripts/Writing/Writing.tcl b/kratos.gid/scripts/Writing/Writing.tcl index e9bb64f2b..cc7e97d3a 100644 --- a/kratos.gid/scripts/Writing/Writing.tcl +++ b/kratos.gid/scripts/Writing/Writing.tcl @@ -118,11 +118,26 @@ proc write::writeEvent { filename } { Kratos::Log "Write validation $appid" set errcode [writeValidateInApp $appid] + + set endtime [clock seconds] + set ttime [expr {$endtime-$inittime}] + if {$time_monitor} { + W "Validate time: [Kratos::Duration $ttime]" + } + #### MDPA Write #### if {$errcode eq 0} { Kratos::Log "Write MDPA $appid" set errcode [writeAppMDPA $appid] } + + + set endtime [clock seconds] + set ttime [expr {$endtime-$inittime}] + if {$time_monitor} { + W "MDPA time: [Kratos::Duration $ttime]" + } + #### Project Parameters Write #### set wevent [$activeapp getWriteParametersEvent] set filename "ProjectParameters.json" @@ -132,6 +147,12 @@ proc write::writeEvent { filename } { set errcode [write::singleFileEvent $filename $wevent "Project Parameters"] } + set endtime [clock seconds] + set ttime [expr {$endtime-$inittime}] + if {$time_monitor} { + W "Parameters time: [Kratos::Duration $ttime]" + } + #### Custom files block #### set wevent [$activeapp getWriteCustomEvent] set filename "" From 207d2423354af1ff4b7f5eeddd20ce3f0f3d8fd3 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Feb 2022 17:00:21 +0100 Subject: [PATCH 555/556] bring back the null and dictnull --- kratos.gid/scripts/Writing/WriteProjectParameters.tcl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index a646385fd..ef995179f 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -23,6 +23,11 @@ proc write::tcl2json { value } { #if {$type ne "dict" && [llength $value]>1 && [string index $value 0] eq "\{"} { W "$value as list"; set type list} #if {$type eq "exprcode"} {set type list; W "$type -> $value"} switch $type { + string { + if {$value eq "null"} {return null} + if {$value eq "dictnull"} {return {{}}} + return [json::write string $value] + } dict { return [json::write object {*}[ dict map {k v} $value {tcl2json $v}]] From 61aed48843bf0ac4de808c25bea5d699d761d26d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 9 Feb 2022 17:02:46 +0100 Subject: [PATCH 556/556] typo --- kratos.gid/scripts/Utils.tcl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/kratos.gid/scripts/Utils.tcl b/kratos.gid/scripts/Utils.tcl index 6f36acb72..55f24f694 100644 --- a/kratos.gid/scripts/Utils.tcl +++ b/kratos.gid/scripts/Utils.tcl @@ -199,10 +199,7 @@ proc Kratos::LoadEnvironment { } { # W $data # Close the file close $fp -<<<<<<< HEAD -======= - ->>>>>>> master + # Preferences are written in json format foreach {k v} [write::json2dict $data] { # W "$k $v"