Skip to content
Merged
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
3 changes: 2 additions & 1 deletion iga/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Iga Examples

## Use Cases
- [External Boundary Circle (NURBS) ](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/external_boundary_cirle_with_nurbs/README.md)
- [External Boundary Circle (NURBS)](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/external_boundary_circle_with_nurbs/README.md)
- [IGA Single-Patch Shell in Membrane Action with Weak Supports and Line Load](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/iga_shell_3p_single_patch/README.md)
- [3D Laplacian on an Embedded Cube with SBM](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/laplacian_3d_cube_sbm/README.md)

## Validation Cases

Expand Down
138 changes: 138 additions & 0 deletions iga/use_cases/laplacian_sbm_3d_bunny/ProjectParameters.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
{
"problem_data": {
"problem_name": "laplacian_3d_stanford_bunny",
"echo_level": 1,
"parallel_type": "OpenMP",
"start_time": 0.0,
"end_time": 1.0
},
"solver_settings": {
"solver_type": "stationary",
"analysis_type": "non_linear",
"model_part_name": "IgaModelPart",
"domain_size": 3,
"model_import_settings": {
"input_type": "use_input_model_part"
},
"material_import_settings": {
"materials_filename": "materials.json"
},
"linear_solver_settings": {
"solver_type": "skyline_lu_factorization"
},
"skip_entities_replace_and_check": true,
"line_search": false,
"echo_level": 1,
"compute_reactions": false,
"max_iteration": 3,
"solution_relative_tolerance": 1e-14,
"solution_absolute_tolerance": 1e-14,
"residual_relative_tolerance": 1e-14,
"residual_absolute_tolerance": 1e-14,
"time_stepping": {
"time_step": 1e20
}
},
"modelers": [
{
"modeler_name": "import_mdpa_modeler",
"kratos_module": "KratosMultiphysics",
"Parameters": {
"input_filename": "bunny",
"model_part_name": "initial_skin_model_part_out"
}
},
{
"modeler_name": "NurbsGeometryModelerSbm",
"Parameters": {
"model_part_name": "IgaModelPart",
"lower_point_xyz": [0.0, 0.0, 0.0],
"upper_point_xyz": [2.0, 2.0, 2.0],
"lower_point_uvw": [0.0, 0.0, 0.0],
"upper_point_uvw": [2.0, 2.0, 2.0],
"polynomial_order": [2, 2, 2],
"number_of_knot_spans": [40, 40, 40],
"lambda_outer": 1.0,
"lambda_inner": 0.5,
"number_of_inner_loops": 0,
"skin_model_part_outer_initial_name": "initial_skin_model_part_out",
"skin_model_part_name": "skin_model_part"
}
},
{
"modeler_name": "IgaModelerSbm",
"Parameters": {
"echo_level": 0,
"skin_model_part_name": "skin_model_part",
"analysis_model_part_name": "IgaModelPart",
"element_condition_list": [
{
"geometry_type": "GeometryVolume",
"iga_model_part": "ConvectionDiffusionDomain",
"type": "element",
"name": "LaplacianElement",
"shape_function_derivatives_order": 2
},
{
"geometry_type": "SurfaceEdge",
"iga_model_part": "SBM_Support_outer",
"type": "condition",
"name": "SbmLaplacianConditionDirichlet",
"shape_function_derivatives_order": 10,
"sbm_parameters": {
"is_inner": false
}
}
]
}
}
],
"processes": {
"additional_processes": [
{
"python_module": "assign_iga_external_conditions_process",
"kratos_module": "KratosMultiphysics.IgaApplication",
"process_name": "AssignIgaExternalConditionsProcess",
"Parameters": {
"echo_level": 0,
"model_part_name": "IgaModelPart",
"element_condition_list": [
{
"iga_model_part": "IgaModelPart.ConvectionDiffusionDomain",
"variables": [
{
"variable_name": "HEAT_FLUX",
"value": "sin(x) * sinh(y) * cos(z)"
}
]
},
{
"iga_model_part": "IgaModelPart.SBM_Support_outer",
"variables": [
{
"variable_name": "TEMPERATURE",
"value": "sin(x) * sinh(y) * cos(z)"
}
]
}
]
}
}
],
"dirichlet_process_list": [
{
"kratos_module": "KratosMultiphysics",
"python_module": "assign_scalar_variable_to_nodes_process",
"Parameters": {
"model_part_name": "skin_model_part.outer",
"variable_name": "TEMPERATURE",
"value": "sin(x) * sinh(y) * cos(z)"
}
}
],
"constraints_process_list": []
},
"output_processes": {
"output_process_list": []
}
}
46 changes: 46 additions & 0 deletions iga/use_cases/laplacian_sbm_3d_bunny/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Use Case IGA - 3D Laplacian on the Stanford Bunny with SBM

Short description

This example solves a stationary 3D Laplacian problem with the Surrogate Boundary Method (SBM) in the IGA Application. The embedded boundary is the Stanford bunny imported from `bunny.mdpa`, while the analysis is carried out on a structured background NURBS volume.

The manufactured solution used for validation is:

`T(x, y, z) = sin(x) * sinh(y) * cos(z)`

The same field is prescribed on the surrogate boundary, and the corresponding volumetric term is assigned through `HEAT_FLUX`.

Files
- `ProjectParameters.json`
- `materials.json`
- `bunny.mdpa`
- `run_and_post.py`
- `convergence.py`
- `plot_conditions.py`

Geometry
- `import_mdpa_modeler` loads the Stanford bunny skin into `initial_skin_model_part_out`.
- `NurbsGeometryModelerSbm` creates the background volume on `[0, 2]^3` with order `[2, 2, 2]` and a structured knot-span grid.
- `IgaModelerSbm` creates:
- `LaplacianElement` on `IgaModelPart.ConvectionDiffusionDomain`
- `SbmLaplacianConditionDirichlet` on `IgaModelPart.SBM_Support_outer`

Solver
- Stationary convection-diffusion analysis
- 3D Laplacian formulation
- SBM Dirichlet condition with `PENALTY_FACTOR = -1`
- Linear solver: `skyline_lu_factorization`

Run

```bash
python3 run_and_post.py
python3 convergence.py
python3 plot_conditions.py
```

`run_and_post.py` runs the analysis, prints the absolute and normalized L2 errors, and plots the error distribution at the element integration points.

`convergence.py` performs a mesh-refinement study by changing the number of knot spans of the background NURBS volume.

`plot_conditions.py` initializes the model and plots the outer surrogate boundary in 3D using three gray tones according to the face orientation.
Loading
Loading