Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion kratos.gid/apps/MPM/xml/NodalConditions.xml
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<NodalConditionList>
<NodalConditionItem n="ACCELERATION" pn="Acceleration" ProcessName="AssignVectorVariableProcess" VariableName="ACCELERATION" ImplementedInApplication="MPMApplication" analysis_type="Dynamic" unit_magnitude="Acceleration" units="m/s^2" v="No" App="MPM" Type="Output" state="CheckNodalConditionStateMPM" Interval="Total">
</NodalConditionItem>
<NodalConditionItem n="VELOCITY" pn="Velocity" ProcessName="AssignInitialConditionToParticleProcess" VariableName="MP_VELOCITY" ImplementedInApplication="MPMApplication" analysis_type="Quasi-static,Dynamic" unit_magnitude="L" units="m" App="MPM" Type="Initial" state="CheckNodalConditionStateMPM" Interval="Total">
</NodalConditionItem>
<NodalConditionItem n="DISPLACEMENT" pn="Displacement" ProcessName="AssignVectorVariableProcess" VariableName="DISPLACEMENT" ImplementedInApplication="StructuralMechanicsApplication"
analysis_type="Static,Quasi-static,Dynamic" unit_magnitude="L" units="m" App="Structural" state="CheckNodalConditionStateStructural" Interval="Total">
<outputs>
<parameter n="REACTION" pn="Reaction" v="Yes"/>
<parameter n="REACTION" pn="Reaction" v="No"/>
<parameter n="PRESSURE" pn="Pressure" v="No"/>
</outputs>
</NodalConditionItem>

Expand Down
24 changes: 24 additions & 0 deletions kratos.gid/apps/MPM/xml/Procs.spd
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
<![CDATA[
return [Structural::xml::ProcCheckNodalConditionStateStructural $domNode $args]
]]>
</proc>

<proc n='CheckNodalConditionStateMPM' args='args'>
<![CDATA[
return [MPM::xml::ProcCheckNodalConditionStateMPM $domNode $args]
]]>
</proc>

<proc n='CheckGeometrySolid' args='args'>
Expand Down Expand Up @@ -36,4 +42,22 @@
]]>
</proc>

<proc n='CheckNodalConditionOutputState' args='args'>
<![CDATA[
return [MPM::xml::ProcCheckNodalConditionOutputState $domNode $args]
]]>
</proc>

<proc n='CheckNodalConditionOutputStateMPM' args='args'>
<![CDATA[
return [MPM::xml::ProcCheckNodalConditionOutputState $domNode $args]
]]>
</proc>

<proc n='ElementOutputState' args='args'>
<![CDATA[
return [MPM::xml::ProcElementOutputState $domNode $args]
]]>
</proc>

</container>
78 changes: 78 additions & 0 deletions kratos.gid/apps/MPM/xml/XmlController.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,48 @@ proc MPM::xml::getUniqueName {name} {
return MPM${name}
}

proc ::MPM::xml::ProcCheckNodalConditionStateMPM {domNode args} {
return [MPM::xml::CheckNodalConditionStateById [$domNode @n] $domNode]
}

proc MPM::xml::CheckNodalConditionStateById {conditionId domNode} {
set parts_un STParts
if {[spdAux::getRoute $parts_un] ne ""} {
set condition [Model::getNodalConditionbyId $conditionId]
set cnd_dim [$condition getAttribute WorkingSpaceDimension]
if {$cnd_dim ne "" && $cnd_dim ne $Model::SpatialDimension} {
return "hidden"
}
set elems [$domNode selectNodes "[spdAux::getRoute $parts_un]/condition/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 STSoluType]] v]
set params [list analysis_type $solutionType]
if {[::Model::CheckElementsNodalCondition $conditionId $elemnames $params]} {
return "normal"
}
return "hidden"
}
return "normal"
}

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 No NodalResults REACTION
spdAux::SetValueOnTreeItem state {[CheckNodalConditionOutputStateMPM DISPLACEMENT]} NodalResults REACTION
if {[MPM::xml::UsesMixedUPElements]} {
spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE
} else {
spdAux::SetValueOnTreeItem v No NodalResults PRESSURE
}
spdAux::SetValueOnTreeItem state {[CheckNodalConditionOutputStateMPM DISPLACEMENT]} NodalResults PRESSURE
spdAux::SetValueOnTreeItem v "LinearSolversApplication.sparse_lu" MPMimplicitlinear_solver_settings Solver
}

Expand Down Expand Up @@ -94,3 +131,44 @@ proc MPM::xml::ProcCheckStabilizationState {domNode args} {
}
return $ret
}

proc MPM::xml::UsesMixedUPElements { } {
foreach elem [::MPM::write::GetUsedElements Name] {
if {$elem in [list MPMUpdatedLagrangianUP2D MPMUpdatedLagrangianUP3D]} {
return 1
}
}
return 0
}

proc MPM::xml::ProcCheckNodalConditionOutputState {domNode args} {
set conditionId [lindex $args 0]
set outputId [$domNode @n]

if {![::Model::CheckNodalConditionOutputState $conditionId $outputId]} {
return "hidden"
}

if {$outputId eq "PRESSURE"} {
if {[MPM::xml::UsesMixedUPElements]} {
$domNode setAttribute v Yes
return "normal"
}
return "hidden"
}

return [MPM::xml::CheckNodalConditionStateById $conditionId $domNode]
}

proc MPM::xml::ProcElementOutputState {domNode args} {
set outputId [$domNode @n]
if {$outputId eq "MP_PRESSURE"} {
if {[MPM::xml::UsesMixedUPElements]} {
$domNode setAttribute v Yes
return "normal"
}
return "hidden"
}

return [spdAux::ProcElementOutputState $domNode $args]
}