Skip to content

Commit 5af9ed9

Browse files
committed
Merge branch 'master' into mpm/fix-number-material-points-per-element
2 parents a72ee88 + 3a05179 commit 5af9ed9

30 files changed

Lines changed: 357 additions & 142 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ If you need the developer version, you are on the right place.
2121
* You don't need to install python. The program will detect if you have any pending package to install.
2222
* If there's any missing package, use the GiD command line and execute:
2323

24-
`-np- W [GiD_Python_PipInstall [list $Kratos::pip_packages_required ] 1 ]`
24+
`-np- W [GiD_Python_PipInstall [list $::Kratos::pip_packages_required ] 1 ]`
2525
* 4.1- To execute Kratos using the standard pip packages:
2626
* Python version recommended: 3.8, 3.9, 3.10, 3.11, 3.12
2727
* Open a terminal and run

dockers/deploy.bat

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
set krversion=10.3.0
2-
set pyversion=3.11
2+
set pyversion=3.12
33
@REM 3.10.10-alpine3.17
44
echo "Building kratos %krversion% on python %pyversion%"
5-
docker build --build-arg krversion=%krversion% --build-arg pyversion=%pyversion% -t kratos-run:%krversion% -t kratos-run:latest .
5+
set SCRIPT_DIR=%~dp0
6+
set ROOT_DIR=%SCRIPT_DIR%..
7+
8+
docker build --build-arg pyversion=%pyversion% -f "%ROOT_DIR%\dockers\dockerfile" -t kratos-run:%krversion% -t kratos-run:latest "%ROOT_DIR%"
69

710
docker tag kratos-run:%krversion% fjgarate/kratos-run:%krversion%
811
docker push fjgarate/kratos-run:%krversion%

dockers/dockerfile

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
# Default values. Use --build-arg on build to change
2-
ARG pyversion=3.11
2+
ARG pyversion=3.12
33

44
# Base pyton image
55
FROM python:$pyversion
6-
# FROM python:3.10.10-alpine3.17
76

87
# Update pip
98
RUN pip install --upgrade pip
109

11-
ARG krversion=10.3.0
12-
1310
# WORKDIR /tmp
1411
# COPY ./wheels/ ./wheels/
1512

16-
# Install Kratos and dependencies
17-
RUN python3 -m pip install KratosMultiphysics-all==$krversion numpy
13+
# Copy dependency manifest from Kratos GiD
14+
COPY kratos.gid/kratos.xml /tmp/kratos.xml
15+
COPY dockers/generate_requirements_from_xml.py /tmp/generate_requirements_from_xml.py
16+
17+
# Install Kratos packages listed in kratos.xml
18+
RUN python3 /tmp/generate_requirements_from_xml.py --xml /tmp/kratos.xml --out /tmp/requirements.txt \
19+
&& python3 -m pip install --no-cache-dir -r /tmp/requirements.txt
1820
# RUN python3 -m pip install ./wheels/*.whl
1921

2022
# Prepare run folder
@@ -24,5 +26,5 @@ RUN chmod 777 /model
2426
# Kratos will start on docker run
2527
CMD [ "python3", "MainKratos.py" ]
2628

27-
# docker build -t kratos-run .
29+
# docker build -t kratos-run -f dockers/dockerfile .
2830
# docker run -rm -it --entrypoint bash kratos-run
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import argparse
2+
import xml.etree.ElementTree as ET
3+
from pathlib import Path
4+
5+
6+
def build_requirements(xml_path: Path) -> list[str]:
7+
root = ET.parse(xml_path).getroot()
8+
requirements: list[str] = []
9+
seen: set[str] = set()
10+
11+
for package in root.findall("./Program/PythonPackages/Package"):
12+
name = (package.get("Name") or "").strip()
13+
version = (package.get("Version") or "").strip()
14+
if not name:
15+
continue
16+
17+
requirement = f"{name}=={version}" if version else name
18+
if requirement in seen:
19+
continue
20+
21+
requirements.append(requirement)
22+
seen.add(requirement)
23+
24+
return requirements
25+
26+
27+
def main() -> None:
28+
parser = argparse.ArgumentParser()
29+
parser.add_argument("--xml", required=True)
30+
parser.add_argument("--out", required=True)
31+
args = parser.parse_args()
32+
33+
xml_path = Path(args.xml)
34+
out_path = Path(args.out)
35+
requirements = build_requirements(xml_path)
36+
requirements.append("numpy")
37+
38+
out_path.write_text("\n".join(requirements) + "\n", encoding="utf-8")
39+
40+
41+
if __name__ == "__main__":
42+
main()

kratos.gid/apps/DEM/xml/XmlController.tcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ proc ::DEM::xml::CustomTree { args } {
2929
spdAux::SetValueOnTreeItem state hidden DEMTimeParameters StartTime
3030

3131
# 3D gravity
32-
if {$Model::SpatialDimension eq "3D"} {
32+
if {$::Model::SpatialDimension eq "3D"} {
3333
catch {
3434
spdAux::SetValueOnTreeItem v 0.0 DEMGravity Cy
3535
spdAux::SetValueOnTreeItem v -1.0 DEMGravity Cz

kratos.gid/apps/Dam/write/write.tcl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ proc ::Dam::write::writeTables_dev { } {
265265
proc ::Dam::write::GetPrinTables {} {
266266

267267
set root [customlib::GetBaseRoot]
268-
if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]}
268+
if {$::Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]}
269269
set tableid_list [list ]
270270
set files_list [list ]
271271
set num 0
@@ -301,7 +301,7 @@ proc ::Dam::write::GetPrinTables {} {
301301
proc ::Dam::write::GetPrinTables_dev { } {
302302

303303
set root [customlib::GetBaseRoot]
304-
if {$Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]}
304+
if {$::Kratos::kratos_private(UseFiles) eq 1} {FileSelector::CopyFilesIntoModel [file join [GiD_Info project ModelName] ".gid"]}
305305
set tableid_list2 [list ]
306306
set files_list2 [list ]
307307
set num [llength [GetPrinTables]]

kratos.gid/apps/EmbeddedFluid/write/write.tcl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ proc EmbeddedFluid::write::writeDistances { } {
3131
set length [objarray length $nodes_list]
3232
if {$length eq "0"} {W "Warning: No distances detected! Check Preferences > Meshing > General > Mesh type > Embedded"}
3333
write::WriteString "Begin NodalData DISTANCE"
34-
incr write::current_mdpa_indent_level
34+
incr ::write::current_mdpa_indent_level
3535
set s [write::mdpaIndent]
3636
for {set i 0} {$i < $length} {incr i } {
3737
set node_id [objarray get $nodes_list $i]
3838
set distance [objarray get $distances_list $i]
3939
write::WriteString "$s$node_id 0 $distance"
4040
}
41-
incr write::current_mdpa_indent_level -1
41+
incr ::write::current_mdpa_indent_level -1
4242
write::WriteString "End NodalData"
4343
}
4444
}

kratos.gid/apps/GeoMechanics/xml/XmlController.tcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ proc ::GeoMechanics::xml::ProcCheckNodalConditionStateGeoMechanics {domNode args
129129
set condition [Model::getNodalConditionbyId $conditionId]
130130
set cnd_dim [$condition getAttribute WorkingSpaceDimension]
131131
if {$cnd_dim ne ""} {
132-
if {$cnd_dim ne $Model::SpatialDimension} {return "hidden"}
132+
if {$cnd_dim ne $::Model::SpatialDimension} {return "hidden"}
133133
}
134134
set elems [$domNode selectNodes "[spdAux::getRoute $parts_un]/condition/group/value\[@n='Element'\]"]
135135
set elemnames [list ]

kratos.gid/apps/PfemFluid/start.tcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ proc ::PfemFluid::Init { app } {
2424
proc ::PfemFluid::CustomToolbarItems { } {
2525
variable dir
2626
# Reset the left toolbar
27-
set Kratos::kratos_private(MenuItems) [dict create]
27+
set ::Kratos::kratos_private(MenuItems) [dict create]
2828
set img_dir [file join $dir images]
2929
if {[gid_themes::GetCurrentTheme] eq "GiD_black"} {
3030
set img_dir [file join $img_dir Black]

kratos.gid/apps/PfemFluid/write/write.tcl

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace eval ::PfemFluid::write {
22
namespace path ::PfemFluid
33
Kratos::AddNamespace [namespace current]
4-
4+
55
variable writeAttributes
66
variable remesh_domains_dict
77
variable bodies_list
@@ -16,11 +16,11 @@ proc PfemFluid::write::Init { } {
1616
set bodies_list [list ]
1717
variable Names
1818
set Names [dict create DeltaTime DeltaTime]
19-
20-
19+
20+
2121
SetAttribute materials_un [::PfemFluid::GetUniqueName materials]
2222
SetAttribute nodal_conditions_un [::PfemFluid::GetUniqueName nodal_conditions]
23-
23+
2424
SetAttribute main_launch_file [::PfemFluid::GetAttribute main_launch_file]
2525
SetAttribute materials_file [::PfemFluid::GetWriteProperty materials_file]
2626
SetAttribute properties_location [::PfemFluid::GetWriteProperty properties_location]
@@ -33,20 +33,20 @@ proc PfemFluid::write::writeModelPartEvent { } {
3333
# Validation
3434
set err [Validate]
3535
if {$err ne ""} {error $err}
36-
36+
3737
# Init data
3838
write::initWriteConfiguration [GetAttributes]
39-
39+
4040
set parts_un_list [GetPartsUN]
4141
foreach part_un $parts_un_list {
4242
write::initWriteData $part_un [GetAttribute materials_un]
4343
}
44-
44+
4545
write::writeModelPartData
4646
write::WriteString "Begin Properties 0"
4747
write::WriteString "End Properties"
4848
# write::writeMaterials "PfemFluid"
49-
49+
5050
write::writeNodalCoordinates
5151
foreach part_un $parts_un_list {
5252
write::initWriteData $part_un [GetAttribute materials_un]
@@ -56,16 +56,16 @@ proc PfemFluid::write::writeModelPartEvent { } {
5656
}
5757

5858
proc PfemFluid::write::writeMeshes { } {
59-
59+
6060
foreach part_un [GetPartsUN] {
6161
write::initWriteData $part_un [GetAttribute materials_un]
6262
write::writePartSubModelPart
6363
}
6464
# Solo Malla , no en conditions
6565
writeNodalConditions [GetAttribute nodal_conditions_un]
6666
#writeWaveMonitorMesh
67-
68-
67+
68+
6969
}
7070

7171

@@ -97,7 +97,7 @@ proc PfemFluid::write::GetPartsUN { } {
9797

9898

9999
proc PfemFluid::write::writeWaveMonitorMesh { } {
100-
100+
101101
set xp1 "[spdAux::getRoute "WaveMonitor"]/group"
102102
set groups_wave_height [[customlib::GetBaseRoot] selectNodes $xp1]
103103
foreach group $groups_wave_height {
@@ -111,7 +111,7 @@ proc PfemFluid::write::writeWaveMonitorMesh { } {
111111
proc ::PfemFluid::write::Validate {} {
112112
set err ""
113113
set root [customlib::GetBaseRoot]
114-
114+
115115

116116
return $err
117117
}
@@ -132,10 +132,18 @@ proc PfemFluid::write::WriteMaterialsFile { {write_const_law True} {include_mode
132132

133133
proc PfemFluid::write::writePropertiesJsonFile { {fname "materials.json"} {write_claw_name "True"} {model_part_name ""}} {
134134
set mats_json [dict create properties [list ] ]
135-
foreach parts_un [PfemFluid::write::GetPartsUN] {
136-
foreach property [dict get [write::getPropertiesList $parts_un $write_claw_name $model_part_name] properties ] {
135+
set parts_uns [PfemFluid::write::GetPartsUN]
136+
set ids [list ]
137+
foreach parts_un $parts_uns {
138+
set properties_dict [write::getPropertiesList $parts_un $write_claw_name $model_part_name]
139+
set properties [dict get $properties_dict properties ]
140+
foreach property $properties {
137141
if {$property ne "\[\]"} {
138-
dict lappend mats_json properties $property
142+
set property_id [dict get $property properties_id]
143+
if {$property_id ni $ids} {
144+
lappend ids $property_id
145+
dict lappend mats_json properties $property
146+
}
139147
}
140148
}
141149
}

0 commit comments

Comments
 (0)