Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
393 changes: 393 additions & 0 deletions examples/cfd/underfill/README.md

Large diffs are not rendered by default.

36 changes: 36 additions & 0 deletions examples/cfd/underfill/conf/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

hydra:
job:
chdir: True
run:
dir: ./outputs/

experiment_name: "Unified-Training"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these names are outdated?

experiment_desc: "unified training recipe for crash models"
run_desc: "unified training recipe for crash models"
Comment on lines +23 to +25
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Stale experiment description copied from another example

experiment_desc and run_desc both read "unified training recipe for crash models", which describes a completely different application. These should describe the underfill use case.

Suggested change
experiment_name: "Unified-Training"
experiment_desc: "unified training recipe for crash models"
run_desc: "unified training recipe for crash models"
experiment_name: "Underfill-Training"
experiment_desc: "GeoTransolver autoregressive rollout for transient epoxy VOF prediction"
run_desc: "GeoTransolver autoregressive rollout for transient epoxy VOF prediction"


defaults:
- datapipe: point_cloud # will be overridden by model configs
- model: transolver_autoregressive_rollout_training
- training: default
- inference: default
- _self_

reader:
_target_: vtp_reader.Reader
debug: ${training.debug}
24 changes: 24 additions & 0 deletions examples/cfd/underfill/conf/datapipe/graph.yaml
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please change the name of the example to underfill_dispensing

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

_target_: datapipe.CrashGraphDataset
_convert_: all
data_dir: ${training.raw_data_dir}
name: crash_train
split: train
num_samples: ${training.num_training_samples}
num_steps: ${training.num_time_steps}
features: [thickness]
25 changes: 25 additions & 0 deletions examples/cfd/underfill/conf/datapipe/point_cloud.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

_target_: datapipe.UnderfillDataset
_convert_: all
data_dir: ${training.raw_data_dir}
num_samples: ${training.num_samples}
num_steps: ${training.num_time_steps}
dt: 5e-3

# Only epoxy_vof - no need to specify features list since it's hardcoded
debug: ${training.debug}
20 changes: 20 additions & 0 deletions examples/cfd/underfill/conf/inference/default.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

output_dir_pred: "./predicted_vtps"
output_dir_exact: "./exact_vtps"
raw_data_dir_test: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/val"
#raw_data_dir_test: raw_data_dir_test:"/workspace/isv/ansys/data/converted_output_singleVTU-VTP/val"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Hardcoded personal path and malformed comment

raw_data_dir_test contains the same personal absolute path. Additionally, line 20 is a malformed comment that contains what looks like an accidental key duplication (raw_data_dir_test: raw_data_dir_test:"/..."); this should either be cleaned up or removed.

Suggested change
raw_data_dir_test: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/val"
#raw_data_dir_test: raw_data_dir_test:"/workspace/isv/ansys/data/converted_output_singleVTU-VTP/val"
raw_data_dir_test: "/path/to/test_data"

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.



_target_: rollout.TransolverAutoregressiveRollout
_convert_: all
# --- INPUT DIMENSION CORRECTION ---
# Math:
# 1 (Epoxy VOF)
# + 1 (Pressure)
# + 3 (Velocity Vector)
# + 1 (Time Embedding)
# = 6 Total Input Channels
#functional_dim: 6
functional_dim: 16 # epoxy_vof(1) + fourier features

# --- OUTPUT DIMENSION CORRECTION ---
# Math:
# The model predicts the next state of the physics fields.
# 1 (Epoxy VOF) + 1 (Pressure) + 3 (Velocity) = 5
#out_dim: 5
out_dim: 1 # epoxy_vof prediction

geometry_dim: 3
slice_num: 64
n_layers: 5
use_te: false
time_input: false
include_local_features: true
num_time_steps: ${training.num_time_steps}
dt: 5e-3



18 changes: 18 additions & 0 deletions examples/cfd/underfill/conf/reader/vtp.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

_target_: vtu_reader.Reader
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Wrong _target_ in reader config

The target class is vtu_reader.Reader, but the file is vtp.yaml and the reader module introduced in this PR is vtp_reader.py, whose class is vtp_reader.Reader. Any workflow that uses this override config (e.g., reader=vtp) will fail with an ImportError / ModuleNotFoundError.

Suggested change
_target_: vtu_reader.Reader
_target_: vtp_reader.Reader

_convert_: all
58 changes: 58 additions & 0 deletions examples/cfd/underfill/conf/training/default.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# SPDX-FileCopyrightText: Copyright (c) 2023 - 2025 NVIDIA CORPORATION & AFFILIATES.
# SPDX-FileCopyrightText: All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# ┌───────────────────────────────────────────┐
# │ Data │
# └───────────────────────────────────────────┘

#raw_data_dir: "/code/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP/train" # TODO change
raw_data_dir: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/train_all"
raw_data_dir_validation: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/val"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Hardcoded personal workspace paths

Both raw_data_dir and raw_data_dir_validation point to a specific user's workspace directory (/workspace/aghasemi/...). These will fail for any other user or machine. They should be replaced with descriptive placeholder values, consistent with how similar examples in this repository are documented.

Suggested change
raw_data_dir: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/train_all"
raw_data_dir_validation: "/workspace/aghasemi/isv/ansys/data/converted_output_singleVTU-VTP2/val"
raw_data_dir: "/path/to/train_data"
raw_data_dir_validation: "/path/to/val_data"

max_workers_preprocessing: 64 # Maximum parallel workers
debug: False

# ┌───────────────────────────────────────────┐
# │ Training │
# └───────────────────────────────────────────┘
epochs: 1201
num_time_steps: 10
# Performance
amp: true # Automatic Mixed Precision
use_apex: false # Use Apex FusedAdam if available
num_dataloader_workers: 8
start_lr: 0.0002
end_lr: 0.000001
scheduler_T0: 50 # restart period in epochs (first cycle length)
scheduler_T_mult: 2 # multiply period by this factor after each restart


# Training settings
num_samples: 23
num_validation_samples: 5
validation_freq: 25
save_chckpoint_freq: 25

interface_mask:
vof_lo: 0.01 # nodes with VOF > this AND < vof_hi are "interface"
vof_hi: 0.99
band_fraction: 0.05 # dilate by 10% of domain extent along interface-normal axis
interface_axis: -1 # -1 = auto-detect per sample
absolute_expansion: 0

ckpt_path: "./checkpoints"
tensorboard_log_dir: ./tensorboard_logs
# Debug mode (verbose output for first batch)

Loading