Skip to content

Commit 13c1d16

Browse files
committed
Add Validation Cases 1st commit
1 parent a289c30 commit 13c1d16

36 files changed

Lines changed: 4085 additions & 2 deletions

iga/README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
11
# Iga Examples
22

3+
This folder contains examples related to Isogeometric Analysis in Kratos.
4+
5+
They are realized using the IgaApplication
6+
7+
The Examples are continuously updated and extended
8+
39
## Use Cases
410
- [External Boundary Circle (NURBS)](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/external_boundary_circle_with_nurbs/README.md)
511
- [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)
612
- [3D Laplacian on an Embedded Cube with SBM](https://github.com/KratosMultiphysics/Examples/blob/master/iga/use_cases/laplacian_3d_cube_sbm/README.md)
713

814
## Validation Cases
9-
10-
# Use Cases
15+
- [Buckling Analysis](https://github.com/KratosMultiphysics/Examples/blob/master/iga/validation/buckling_analysis/README.md)
16+
- [Cantilever Beam - Multi Patch - Geometric Non-Linear Analysis](https://github.com/KratosMultiphysics/Examples/blob/master/iga/validation/cantilever_beam_multi_patch_non_linear/README.md)
17+
- [Cantilever Beam - Single Patch - Geometric Non-Linear Analysis](https://github.com/KratosMultiphysics/Examples/blob/master/iga/validation/cantilever_beam_single_patch_non_linear/README.md)
18+
- [Plate with Hole - Trimmed Patch - Linear Analysis](https://github.com/KratosMultiphysics/Examples/blob/master/iga/validation/plate_with_hole_trimmed_patch_linear/README.md)
19+
- [Scordelis-Lo Roof - Single_Patch - Linear Analysis](https://github.com/KratosMultiphysics/Examples/blob/master/iga/validation/scordelis_lo_roof_single_patch_linear/README.md)

iga/validation/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,8 @@
22

33
This folder contains the validation cases:
44

5+
- [Buckling Analysis](buckling_analysis/README.md)
6+
- [Cantilever Beam - Multi Patch - Geometric Non-Linear Analysis](cantilever_beam_multi_patch_non_linear/README.md)
7+
- [Cantilever Beam - Single Patch - Geometric Non-Linear Analysis](cantilever_beam_single_patch_non_linear/README.md)
8+
- [Plate with Hole - Trimmed Patch - Linear Analysis](plate_with_hole_trimmed_patch_linear/README.md)
9+
- [Scordelis-Lo Roof - Single_Patch - Linear Analysis](scordelis_lo_roof_single_patch_linear/README.md)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Buckling Analysis
2+
3+
**Author:** Aakash Ravichandran
4+
5+
**Kratos version:** 10.2
6+
7+
**Source files:** [Buckling Analysis](https://github.com/KratosMultiphysics/Examples/tree/master/iga/validation/buckling_analysis/source)
8+
9+
## Problem definition
10+
11+
This example presents the validation of buckling analysis in Kratos with IGA element.
12+
13+
![Reference Model](data/Reference_Model.png)
14+
15+
*Structural System [1]*
16+
17+
18+
The cantilever beam is modeled using single IGA patch with the Shell3pElement. The CAD model of both the patches is constructed with single span B-spline surfaces. The patch has an curve degree of 2 in both axes. Additional refinement is applied in Kratos by increasing the curve degree by 2 in both directions. Additional refinement is applied in Kratos, by increasing the curve degree to 4 in both directions and inserting 4 knots in the width and 20 knots along the length of the beam.
19+
20+
## Results
21+
22+
The buckling load factors are shown in table below. The corresponding buckling modes are shown in image below.
23+
24+
| Quantity | Reference | Kratos |
25+
| :--- | :--- | :--- |
26+
| $\lambda_{cr}^{(1)}$ | 4.1123 | 4.06977 |
27+
| $\lambda_{cr}^{(2)}$ | 16.449 | 16.1693 |
28+
| $\lambda_{cr}^{(3)}$ | 37.011 | 36.6759 |
29+
| $\lambda_{cr}^{(4)}$ | 102.81 | 102.106 |
30+
31+
| Buckling Mode Shape 1 | Buckling Mode Shape 2 |
32+
| :---: | :---: |
33+
| ![Buckling Mode Shape 1](data/Buckling_Mode_Shape_1.png) | ![Buckling Mode Shape 2](data/Buckling_Mode_Shape_2.png) |
34+
35+
| Buckling Mode Shape 3 | Buckling Mode Shape 4 |
36+
| :---: | :---: |
37+
| ![Buckling Mode Shape 3](data/Buckling_Mode_Shape_3.png) | ![Buckling Mode Shape 4](data/Buckling_Mode_Shape_4.png) |
38+
39+
40+
41+
## References
42+
43+
1. Altair Engineering, Inc. (2026). *OS-V: 0080 Buckling of Shells and Composites with Offset*. In Altair OptiStruct Verification Problems. [link](https://help.altair.com/hwsolvers/os/topics/solvers/os/buckling_of_shells_and_composites_with_offset_verification_r.htm)
13.8 KB
Loading
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
{
2+
"problem_data": {
3+
"problem_name": "Buckling_Analysis",
4+
"echo_level": 0,
5+
"parallel_type": "OpenMP",
6+
"start_time": 0,
7+
"end_time": 0.1
8+
},
9+
"solver_settings": {
10+
"model_part_name": "IgaModelPart",
11+
"domain_size": 1,
12+
"echo_level": 1,
13+
"buffer_size": 2,
14+
"analysis_type": "linear",
15+
"model_import_settings": {
16+
"input_type": "use_input_model_part"
17+
},
18+
"material_import_settings": {
19+
"materials_filename": "materials.json"
20+
},
21+
"time_stepping": {
22+
"time_step": 1
23+
},
24+
"rotation_dofs": false,
25+
"reform_dofs_at_each_step": false,
26+
"line_search": false,
27+
"compute_reactions": true,
28+
"clear_storage": false,
29+
"move_mesh_flag": true,
30+
"convergence_criterion": "residual_criterion",
31+
"displacement_relative_tolerance": 0.0001,
32+
"displacement_absolute_tolerance": 1E-09,
33+
"residual_relative_tolerance": 0.0001,
34+
"residual_absolute_tolerance": 1E-09,
35+
"max_iteration": 1,
36+
"builder_and_solver_settings" : {
37+
"advanced_settings": {},
38+
"use_block_builder": true,
39+
"use_lagrange_BS": false
40+
},
41+
"solver_type": "prebuckling",
42+
"buckling_settings" : {
43+
"initial_load_increment" : 1.0,
44+
"small_load_increment" : 0.0005,
45+
"path_following_step" : 0.5,
46+
"convergence_ratio" : 0.05,
47+
"make_matrices_symmetric" : true
48+
},
49+
"eigensolver_settings" : {
50+
"solver_type" : "eigen_eigensystem",
51+
"max_iteration" : 1000,
52+
"tolerance" : 1e-6,
53+
"number_of_eigenvalues" : 5,
54+
"echo_level" : 1
55+
},
56+
"auxiliary_variables_list": [],
57+
"auxiliary_dofs_list": [],
58+
"auxiliary_reaction_list": []
59+
},
60+
"modelers": [
61+
{
62+
"modeler_name": "CadIoModeler",
63+
"Parameters": {
64+
"echo_level": 0,
65+
"cad_model_part_name": "IgaModelPart",
66+
"geometry_file_name": "geometry.cad.json",
67+
"output_geometry_file_name": "Buckling_Analysis_0.georhino.json"
68+
}
69+
},
70+
{
71+
"modeler_name": "RefinementModeler",
72+
"Parameters": {
73+
"echo_level": 0,
74+
"physics_file_name": "refinements.iga.json"
75+
}
76+
},
77+
{
78+
"modeler_name": "IgaModeler",
79+
"Parameters": {
80+
"echo_level": 0,
81+
"cad_model_part_name": "IgaModelPart",
82+
"analysis_model_part_name": "IgaModelPart",
83+
"physics_file_name": "physics.iga.json"
84+
}
85+
}
86+
],
87+
"processes": {
88+
"additional_processes": [
89+
{
90+
"kratos_module": "IgaApplication",
91+
"python_module": "output_quadrature_domain_process",
92+
"Parameters": {
93+
"output_file_name": "Buckling_Analysis_shell_1_integrationdomain.json",
94+
"model_part_name": "IgaModelPart.StructuralAnalysis_1",
95+
"output_geometry_elements": true,
96+
"output_geometry_conditions": false
97+
}
98+
},
99+
{
100+
"kratos_module": "IgaApplication",
101+
"python_module": "output_quadrature_domain_process",
102+
"Parameters": {
103+
"output_file_name": "Buckling_Analysis_support_2_integrationdomain.json",
104+
"model_part_name": "IgaModelPart.Support_2",
105+
"output_geometry_elements": false,
106+
"output_geometry_conditions": true
107+
}
108+
},
109+
{
110+
"kratos_module": "IgaApplication",
111+
"python_module": "output_eigen_values_process",
112+
"Parameters": {
113+
"output_file_name": "Buckling_Analysis_eigen_values.post.res",
114+
"model_part_name": "IgaModelPart"
115+
}
116+
}
117+
],
118+
"dirichlet_process_list": [
119+
{
120+
"kratos_module": "KratosMultiphysics",
121+
"python_module": "assign_vector_variable_process",
122+
"Parameters": {
123+
"model_part_name": "IgaModelPart.Support_2",
124+
"variable_name": "DISPLACEMENT",
125+
"value": [
126+
0,
127+
0,
128+
0
129+
],
130+
"interval": [
131+
0,
132+
"End"
133+
]
134+
}
135+
},
136+
{
137+
"kratos_module": "KratosMultiphysics",
138+
"python_module": "assign_vector_variable_process",
139+
"Parameters": {
140+
"model_part_name": "IgaModelPart.Support_2_Rotational",
141+
"variable_name": "DISPLACEMENT",
142+
"value": [
143+
0,
144+
0,
145+
0
146+
],
147+
"interval": [
148+
0,
149+
"End"
150+
]
151+
}
152+
}
153+
],
154+
"neumann_process_list": [
155+
{
156+
"kratos_module": "KratosMultiphysics",
157+
"python_module": "assign_vector_variable_to_conditions_process",
158+
"Parameters": {
159+
"model_part_name": "IgaModelPart.Load_3",
160+
"variable_name": "DEAD_LOAD",
161+
"value": [
162+
-5,
163+
0,
164+
0
165+
],
166+
"interval": [
167+
0,
168+
"End"
169+
]
170+
}
171+
}
172+
]
173+
},
174+
"output_processes": {
175+
"output_process_list": []
176+
}
177+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"tolerances":{"model_tolerance":0.001},"version_number":1,"breps":[{"brep_id":1,"faces":[{"brep_id":2,"swapped_surface_normal":false,"surface":{"is_trimmed":true,"is_rational":false,"degrees":[2,2],"knot_vectors":[[0,0,0,2,2,2],[0,0,0,100,100,100]],"control_points":[[1,[0,0,0,1]],[2,[0,1,0,1]],[3,[0,2,0,1]],[4,[50,0,0,1]],[5,[50,1,0,1]],[6,[50,2,0,1]],[7,[100,0,0,1]],[8,[100,1,0,1]],[9,[100,2,0,1]]]},"boundary_loops":[{"loop_type":"outer","trimming_curves":[{"trim_index":0,"curve_direction":true,"parameter_curve":{"is_rational":false,"degree":1,"knot_vector":[0,0,2,2],"active_range":[0,2],"control_points":[[10,[0,0,0,1]],[11,[2,0,0,1]]]}},{"trim_index":1,"curve_direction":true,"parameter_curve":{"is_rational":false,"degree":1,"knot_vector":[0,0,100,100],"active_range":[0,100],"control_points":[[12,[2,0,0,1]],[13,[2,100,0,1]]]}},{"trim_index":2,"curve_direction":true,"parameter_curve":{"is_rational":false,"degree":1,"knot_vector":[0,0,2,2],"active_range":[0,2],"control_points":[[14,[2,100,0,1]],[15,[0,100,0,1]]]}},{"trim_index":3,"curve_direction":true,"parameter_curve":{"is_rational":false,"degree":1,"knot_vector":[0,0,100,100],"active_range":[0,100],"control_points":[[16,[0,100,0,1]],[17,[0,0,0,1]]]}}]}],"embedded_loops":[],"embedded_edges":[],"embedded_points":[]}],"edges":[{"brep_id":3,"3d_curve":{"degree":2,"knot_vector":[0,0,0,2,2,2],"active_range":[0,2],"control_points":[[18,[0,0,0,1]],[19,[0,1,0,1]],[20,[0,2,0,1]]]},"topology":[{"brep_id":2,"trim_index":0,"relative_direction":true}]},{"brep_id":4,"3d_curve":{"degree":2,"knot_vector":[0,0,0,100,100,100],"active_range":[0,100],"control_points":[[21,[0,2,0,1]],[22,[50,2,0,1]],[23,[100,2,0,1]]]},"topology":[{"brep_id":2,"trim_index":1,"relative_direction":true}]},{"brep_id":5,"3d_curve":{"degree":2,"knot_vector":[-2,-2,-2,0,0,0],"active_range":[-2,0],"control_points":[[24,[100,2,0,1]],[25,[100,1,0,1]],[26,[100,0,0,1]]]},"topology":[{"brep_id":2,"trim_index":2,"relative_direction":true}]},{"brep_id":6,"3d_curve":{"degree":2,"knot_vector":[-100,-100,-100,0,0,0],"active_range":[-100,0],"control_points":[[27,[100,0,0,1]],[28,[50,0,0,1]],[29,[0,0,0,1]]]},"topology":[{"brep_id":2,"trim_index":3,"relative_direction":true}]}],"vertices":[]}]}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import KratosMultiphysics
2+
import KratosMultiphysics.IgaApplication
3+
from KratosMultiphysics.StructuralMechanicsApplication.structural_mechanics_analysis import StructuralMechanicsAnalysis
4+
5+
if __name__ == "__main__":
6+
with open("ProjectParameters.json",'r') as parameter_file:
7+
parameters = KratosMultiphysics.Parameters(parameter_file.read())
8+
9+
model = KratosMultiphysics.Model()
10+
simulation = StructuralMechanicsAnalysis(model, parameters)
11+
simulation.Run()
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"properties": [
3+
{
4+
"model_part_name": "IgaModelPart.StructuralAnalysis_1",
5+
"properties_id": 1,
6+
"Material": {
7+
"name": "Steel",
8+
"constitutive_law": {
9+
"name": "LinearElasticPlaneStress2DLaw"
10+
},
11+
"Variables": {
12+
"THICKNESS": 1,
13+
"YOUNG_MODULUS": 1e6,
14+
"POISSON_RATIO": 0,
15+
"DENSITY": 1
16+
},
17+
"Tables": {}
18+
}
19+
}
20+
]
21+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"element_condition_list": [
3+
{
4+
"brep_ids": [
5+
2
6+
],
7+
"geometry_type": "GeometrySurface",
8+
"iga_model_part": "StructuralAnalysis_1",
9+
"parameters": {
10+
"type": "element",
11+
"name": "Shell3pElement",
12+
"shape_function_derivatives_order": 3
13+
}
14+
},
15+
{
16+
"brep_id": 2,
17+
"geometry_type": "GeometrySurfaceNodes",
18+
"iga_model_part": "Support_2",
19+
"parameters": {
20+
"local_parameters": [
21+
-1,
22+
0
23+
]
24+
}
25+
},
26+
{
27+
"brep_id": 2,
28+
"geometry_type": "GeometrySurfaceVariationNodes",
29+
"iga_model_part": "Support_2_Rotational",
30+
"parameters": {
31+
"local_parameters": [
32+
-1,
33+
0
34+
]
35+
}
36+
},
37+
{
38+
"brep_ids": [
39+
5
40+
],
41+
"geometry_type": "SurfaceEdge",
42+
"iga_model_part": "Load_3",
43+
"parameters": {
44+
"type": "condition",
45+
"name": "LoadCondition",
46+
"shape_function_derivatives_order": 2
47+
}
48+
}
49+
]
50+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"refinements": [
3+
{
4+
"brep_ids": [
5+
2
6+
],
7+
"geometry_type": "NurbsSurface",
8+
"model_part_name": "IgaModelPart",
9+
"parameters": {
10+
"insert_nb_per_span_u": 4,
11+
"insert_nb_per_span_v": 20,
12+
"increase_degree_u": 2,
13+
"increase_degree_v": 2
14+
}
15+
}
16+
]
17+
}

0 commit comments

Comments
 (0)