Skip to content

Commit 93638d8

Browse files
Merge pull request #810 from KratosMultiphysics/dem/material-relations
Dem/material relations
2 parents 2aadb8b + 77c0859 commit 93638d8

51 files changed

Lines changed: 1714 additions & 1907 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

kratos.gid/apps/CDEM/examples/ContSpheresDrop3D.tcl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ proc ::CDEM::examples::DrawGeometryContSpheres { } {
3838
proc ::CDEM::examples::AssignToTreeContSpheres { } {
3939
# Material
4040
set DEMmaterials [spdAux::getRoute "DEMMaterials"]
41-
set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 PARTICLE_MATERIAL 2 ]
42-
set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"]
41+
set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ]
42+
set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"]
4343
spdAux::SetValuesOnBaseNode $material_node $props
4444

4545
# Parts
4646
set DEMParts [spdAux::getRoute "DEMParts"]
4747
set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts Body]
4848
$DEMPartsNode setAttribute ov volume
49-
set props [list Material "DEMCont-DefaultMaterial"]
49+
set props [list Material "DEM-DefaultMaterial"]
5050
spdAux::SetValuesOnBaseNode $DEMPartsNode $props
5151

5252
# DEM FEM Walls
@@ -59,7 +59,7 @@ proc ::CDEM::examples::AssignToTreeContSpheres { } {
5959
set DEMInlet "$DEMConditions/condition\[@n='Inlet'\]"
6060
set inletNode [customlib::AddConditionGroupOnXPath $DEMInlet "Inlet"]
6161
$inletNode setAttribute ov surface
62-
set props [list Material "DEMCont-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"]
62+
set props [list Material "DEM-DefaultMaterial" ParticleDiameter 0.13 InVelocityModulus 2.3 InDirectionVector "0.0,0.0,-1.0"]
6363
spdAux::SetValuesOnBaseNode $inletNode $props
6464

6565
# DEM custom submodelpart

kratos.gid/apps/CDEM/examples/ContinuumDrop2D.tcl

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ proc ::CDEM::examples::ContinuumDrop2D {args} {
1515
GidUtils::UpdateWindow LAYER
1616
GiD_Process 'Zoom Frame
1717

18-
MeshGenerationOKDo 1.0
19-
2018
}
2119

2220
proc ::CDEM::examples::DrawGeometryContinuumDrop { } {
@@ -53,36 +51,36 @@ proc ::CDEM::examples::DrawGeometryContinuumDrop { } {
5351
proc ::CDEM::examples::AssignToTreeContinuumDrop { } {
5452
# Material
5553
set DEMmaterials [spdAux::getRoute "DEMMaterials"]
56-
set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 PARTICLE_MATERIAL 2 ]
57-
set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEMCont-DefaultMaterial' \]"]
54+
set props [list PARTICLE_DENSITY 2500.0 YOUNG_MODULUS 1.0e7 ]
55+
set material_node [[customlib::GetBaseRoot] selectNodes "$DEMmaterials/blockdata\[@name = 'DEM-DefaultMaterial' \]"]
5856
spdAux::SetValuesOnBaseNode $material_node $props
5957

6058
# Parts
6159
set DEMParts [spdAux::getRoute "DEMParts"]
6260
set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts LowPart]
6361
$DEMPartsNode setAttribute ov surface
64-
set props [list Material "DEMCont-DefaultMaterial"]
62+
set props [list Material "DEM-DefaultMaterial"]
6563
spdAux::SetValuesOnBaseNode $DEMPartsNode $props
6664

6765
# Parts
6866
set DEMParts [spdAux::getRoute "DEMParts"]
6967
set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts MidPart]
7068
$DEMPartsNode setAttribute ov surface
71-
set props [list Material "DEMCont-DefaultMaterial"]
69+
set props [list Material "DEM-DefaultMaterial"]
7270
spdAux::SetValuesOnBaseNode $DEMPartsNode $props
7371

7472
# Parts
7573
set DEMParts [spdAux::getRoute "DEMParts"]
7674
set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts TopPart]
7775
$DEMPartsNode setAttribute ov surface
78-
set props [list Material "DEMCont-DefaultMaterial"]
76+
set props [list Material "DEM-DefaultMaterial"]
7977
spdAux::SetValuesOnBaseNode $DEMPartsNode $props
8078

8179
# Parts
8280
set DEMParts [spdAux::getRoute "DEMParts"]
8381
set DEMPartsNode [customlib::AddConditionGroupOnXPath $DEMParts Sand]
8482
$DEMPartsNode setAttribute ov surface
85-
set props [list Material "DEMCont-DefaultMaterial"]
83+
set props [list Material "DEM-DefaultMaterial"]
8684
spdAux::SetValuesOnBaseNode $DEMPartsNode $props
8785

8886
# DEM FEM Walls
Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,8 @@
1-
proc DEM::write::DefineInletConditions {inletProperties groupid mid contains_clusters} {
2-
set inlet_element_type SphericContinuumParticle3D
3-
if {[dict get $inletProperties $groupid InletElementType] eq "Cluster3D"} {
4-
set contains_clusters 1
5-
if {[dict get $inletProperties $groupid ClusterType] eq "FromFile"} {
6-
set custom_file_name [dict get $inletProperties $groupid ClusterFilename]
7-
set only_name [file tail $custom_file_name]
8-
write::WriteString " CLUSTER_FILE_NAME $only_name"
91

10-
} else {
11-
set cluster_file_name [dict get $inletProperties $groupid ClusterType]
12-
lassign [GetClusterFileNameAndReplaceInletElementType $cluster_file_name] inlet_element_type cluster_file_name
13-
write::WriteString " CLUSTER_FILE_NAME $cluster_file_name"
14-
}
2+
proc DEM::write::GetInletElementType {} {
3+
set elem_name SphericContinuumParticle3D
4+
if {$::Model::SpatialDimension eq "2D"} {
5+
set elem_name CylinderContinuumParticle2D
156
}
16-
17-
if {[dict get $inletProperties $groupid InletElementType] eq "SphericParticle3D"} {
18-
dict set inletProperties $groupid InletElementType SphericContinuumParticle3D
19-
}
20-
21-
write::WriteString " IDENTIFIER $mid"
22-
write::WriteString " INJECTOR_ELEMENT_TYPE SphericContinuumParticle3D"
23-
write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]"
24-
write::WriteString " CONTAINS_CLUSTERS $contains_clusters"
25-
# Change to SphericSwimmingParticle3D in FLUIDDEM interface
7+
return $elem_name
268
}
27-
28-
proc DEM::write::DefineInletConditions2D {inletProperties groupid mid contains_clusters} {
29-
set inlet_element_type CylinderContinuumParticle2D
30-
31-
if {[dict get $inletProperties $groupid InletElementType] eq "CylinderParticle2D"} {
32-
dict set inletProperties $groupid InletElementType CylinderContinuumParticle2D
33-
}
34-
write::WriteString " IDENTIFIER $mid"
35-
write::WriteString " INJECTOR_ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]"
36-
write::WriteString " ELEMENT_TYPE [dict get $inletProperties $groupid InletElementType]"
37-
write::WriteString " CONTAINS_CLUSTERS 0"
38-
# Change to SphericSwimmingParticle3D in FLUIDDEM interface
39-
}
Lines changed: 9 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
1-
proc DEM::write::WriteMDPAParts { } {
2-
variable last_property_id
3-
4-
# Prepare properties
5-
write::processMaterials "" $last_property_id;
6-
set last_property_id [expr $last_property_id + [dict size $::write::mat_dict]]
7-
1+
proc CDEM::write::WriteMDPAParts { } {
82
# Headers
93
write::writeModelPartData
104

5+
# Process properties
6+
DEM::write::processPartMaterials
7+
118
# Materials
12-
CDEM::write::writeMaterialsParts
9+
DEM::write::writeMaterialsParts
1310

1411
# Nodal coordinates (only for DEM Parts <inefficient> )
1512
write::writeNodalCoordinatesOnParts
1613
write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart]
1714
write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsInitialC]
18-
write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundayC]
15+
write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupsBoundaryC]
1916
write::writeNodalCoordinatesOnGroups [DEM::write::GetNodesForGraphs]
2017

2118
# Element connectivities
2219
write::writeElementConnectivities
2320

2421
# Begin NodalData RADIUS
25-
CDEM::write::writeSphereRadius
22+
DEM::write::writeSphereRadius
2623

2724
# Begin NodalData COHESIVE_GROUP
2825
CDEM::write::writeCohesiveGroups
@@ -38,54 +35,6 @@ proc DEM::write::WriteMDPAParts { } {
3835
CDEM::write::WriteCustomDEMSmp
3936
}
4037

41-
## TODO: proc under revision. This works but the proc is different from the DEM::write version.
42-
proc CDEM::write::WriteCustomDEMSmp { } {
43-
set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
44-
foreach group [[customlib::GetBaseRoot] selectNodes $xp1] {
45-
set group_id [$group @n]
46-
set group_raw [write::GetWriteGroupName $group_id]
47-
set good_name [write::transformGroupName $group_raw]
48-
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
49-
if {$destination_mdpa == "DEM"} {
50-
write::WriteString "Begin SubModelPart $good_name \/\/ Custom SubModelPart. Group name: $group_id"
51-
write::WriteString "Begin SubModelPartData"
52-
write::WriteString "End SubModelPartData"
53-
write::WriteString "Begin SubModelPartNodes"
54-
GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $group_id] [subst "%10i\n"]]
55-
write::WriteString "End SubModelPartNodes"
56-
write::WriteString "End SubModelPart"
57-
write::WriteString ""
58-
}
59-
}
60-
}
61-
62-
proc CDEM::write::GetDEMGroupsCustomSubmodelpart { } {
63-
set groups [list ]
64-
set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
65-
foreach group [[customlib::GetBaseRoot] selectNodes $xp2] {
66-
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
67-
if {$destination_mdpa == "DEM"} {
68-
set groupid [$group @n]
69-
lappend groups [write::GetWriteGroupName $groupid]
70-
}
71-
}
72-
return $groups
73-
}
74-
75-
proc CDEM::write::writeSphereRadius { } {
76-
set root [customlib::GetBaseRoot]
77-
set xp1 "[spdAux::getRoute [GetAttribute partscont_un]]/group"
78-
foreach group [$root selectNodes $xp1] {
79-
set groupid [$group @n]
80-
set grouppid [write::GetWriteGroupName $groupid]
81-
write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid"
82-
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"]
83-
write::WriteString "End NodalData"
84-
write::WriteString ""
85-
}
86-
}
87-
88-
8938
proc CDEM::write::writeCohesiveGroups { } {
9039
set root [customlib::GetBaseRoot]
9140
if {$::Model::SpatialDimension eq "3D"} {
@@ -97,8 +46,8 @@ proc CDEM::write::writeCohesiveGroups { } {
9746
foreach group [$root selectNodes $xp1] {
9847
incr cohesive_group
9948
set groupid [$group @n]
100-
set grouppid [write::GetWriteGroupName $groupid]
101-
write::WriteString "Begin NodalData COHESIVE_GROUP // GUI group identifier: $grouppid"
49+
set group_id [write::GetWriteGroupName $groupid]
50+
write::WriteString "Begin NodalData COHESIVE_GROUP // GUI group identifier: $group_id"
10251
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 $cohesive_group\n"]
10352
write::WriteString "End NodalData"
10453
write::WriteString ""
@@ -125,50 +74,3 @@ proc CDEM::write::writeSkinSphereNodes { } {
12574
write::WriteString "End NodalData"
12675
write::WriteString ""
12776
}
128-
129-
130-
proc CDEM::write::writeMaterialsParts { } {
131-
variable partsProperties
132-
set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'PartsCont'\]/group"
133-
set partsProperties $::write::mat_dict
134-
set printable [list PARTICLE_DENSITY \
135-
YOUNG_MODULUS \
136-
POISSON_RATIO \
137-
FRICTION \
138-
COEFFICIENT_OF_RESTITUTION \
139-
PARTICLE_MATERIAL \
140-
ROLLING_FRICTION \
141-
ROLLING_FRICTION_WITH_WALLS \
142-
CONTACT_SIGMA_MIN \
143-
CONTACT_TAU_ZERO \
144-
CONTACT_INTERNAL_FRICC \
145-
ConstitutiveLaw \
146-
SHEAR_ENERGY_COEF \
147-
LOOSE_MATERIAL_YOUNG_MODULUS \
148-
FRACTURE_ENERGY \
149-
INTERNAL_FRICTION_ANGLE \
150-
ROTATIONAL_MOMENT_COEFFICIENT \
151-
PARTICLE_COHESION]
152-
153-
foreach group [dict keys $partsProperties] {
154-
write::WriteString "Begin Properties [dict get $partsProperties $group MID]"
155-
foreach {prop val} [dict get $partsProperties $group] {
156-
if {$prop in $printable} {
157-
if {$prop eq "ConstitutiveLaw"} {
158-
write::WriteString " DEM_CONTINUUM_CONSTITUTIVE_LAW_NAME $val"
159-
} elseif {$prop eq "FRICTION"} {
160-
set propvalue [expr {tan($val)}]
161-
write::WriteString " FRICTION $propvalue"
162-
} else {
163-
write::WriteString " $prop $val"
164-
}
165-
}
166-
}
167-
if {$::Model::SpatialDimension eq "2D"} {
168-
write::WriteString " DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_D_Linear_viscous_Coulomb2D"
169-
} else {
170-
write::WriteString " DEM_DISCONTINUUM_CONSTITUTIVE_LAW_NAME DEM_D_Linear_viscous_Coulomb"}
171-
172-
write::WriteString "End Properties\n"
173-
}
174-
}
Lines changed: 14 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,29 @@
1-
proc DEM::write::WriteMDPAWalls { } {
2-
# Headers
3-
write::writeModelPartData
41

5-
# Material
6-
set wall_properties [WriteRigidWallProperties]
72

8-
# Nodal coordinates (only for Walls <inefficient> )
9-
write::writeNodalCoordinatesOnGroups [DEM::write::GetRigidWallsGroups]
10-
write::writeNodalCoordinatesOnGroups [GetWallsGroupsSmp]
11-
12-
# Nodal conditions and conditions
13-
DEM::write::writeConditions $wall_properties
14-
15-
# SubmodelParts
16-
DEM::write::writeWallConditionMeshes
17-
18-
# CustomSubmodelParts
19-
WriteWallCustomSmp
20-
}
21-
22-
23-
proc CDEM::write::WriteWallCustomSmp { } {
24-
set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
25-
set i $DEM::write::last_property_id
26-
foreach group [[customlib::GetBaseRoot] selectNodes $xp1] {
27-
incr i
28-
set groupid [$group @n]
29-
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
30-
if {$destination_mdpa == "FEM"} {
31-
write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid"
32-
write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid"
33-
write::WriteString "End SubModelPartData"
34-
write::WriteString "Begin SubModelPartNodes"
35-
GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]]
36-
write::WriteString "End SubModelPartNodes"
37-
write::WriteString "End SubModelPart"
38-
write::WriteString ""
39-
}
40-
}
41-
}
42-
43-
proc DEM::write::DefineFEMExtraConditions {group_node} {
3+
# Overwritten to ad TOP BOTTOM params
4+
proc DEM::write::DefineFEMExtraConditions {props} {
445
set material_analysis [write::getValue DEMTestMaterial Active]
456
if {$material_analysis == "true"} {
46-
set is_material_test [write::getValueByNode [$group_node selectNodes "./value\[@n='MaterialTest'\]"]]
7+
set is_material_test [dict get $props Material Variables MaterialTest]
478
if {$is_material_test == "true"} {
48-
set as_condition [write::getValueByNode [$group_node selectNodes "./value\[@n='DefineTopBot'\]"]]
9+
set as_condition [dict get $props Material Variables DefineTopBot]
4910
if {$as_condition eq "top"} {
5011
write::WriteString " TOP 1"
5112
write::WriteString " BOTTOM 0"
5213
} else {
5314
write::WriteString " TOP 0"
54-
write::WriteString " BOTTOM 1"}
15+
write::WriteString " BOTTOM 1"
16+
}
5517
}
5618
} else {
57-
write::WriteString " TOP 0"
58-
write::WriteString " BOTTOM 0"}
59-
set GraphPrint [write::getValueByNode [$group_node selectNodes "./value\[@n='GraphPrint'\]"]]
60-
if {$GraphPrint == "true" || $material_analysis == "true"} {
61-
set GraphPrintval 1
62-
} else {
63-
set GraphPrintval 0
19+
write::WriteString " TOP 0"
20+
write::WriteString " BOTTOM 0"
6421
}
22+
23+
set GraphPrint [dict get $props Material Variables GraphPrint]
24+
set GraphPrintval 0
25+
if {[write::isBooleanTrue $GraphPrint]} {
26+
set GraphPrintval 1
27+
}
6528
write::WriteString " FORCE_INTEGRATION_GROUP $GraphPrintval"
6629
}

0 commit comments

Comments
 (0)