From 1856629ed59e20377e630be2d3e4b7c567b0899d Mon Sep 17 00:00:00 2001 From: NickNick9 Date: Wed, 28 May 2025 11:15:40 +0200 Subject: [PATCH 1/4] nurbs geometry modeler extension to 3D --- .../nurbs_geometry_modeler.cpp | 63 ++++++--- .../custom_modelers/nurbs_geometry_modeler.h | 28 ++-- .../nurbs_geometry_modeler_sbm.cpp | 132 ++++++++++++++++++ .../nurbs_geometry_modeler_sbm.h | 22 +++ .../IgaApplication/iga_application.cpp | 1 + .../iga_application_variables.cpp | 1 + .../iga_application_variables.h | 1 + 7 files changed, 220 insertions(+), 28 deletions(-) diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp index bc0f408cfc9f..8bc7df93341c 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp @@ -105,8 +105,17 @@ namespace Kratos ///@} ///@name Private Operations ///@{ - void NurbsGeometryModeler::CreateAndAddRegularGrid2D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, - const Point& A_uvw, const Point& B_uvw, SizeType OrderU, SizeType OrderV,SizeType NumKnotSpansU, SizeType NumKnotSpansV, bool AddSurfaceToModelPart) + void NurbsGeometryModeler::CreateAndAddRegularGrid2D( + ModelPart& r_model_part, + const Point& A_xyz, + const Point& B_xyz, + const Point& A_uvw, + const Point& B_uvw, + SizeType OrderU, + SizeType OrderV, + SizeType NumKnotSpansU, + SizeType NumKnotSpansV, + bool AddSurfaceToModelPart) { KRATOS_ERROR_IF( B_xyz.X() <= A_xyz.X() || B_xyz.Y() <= A_xyz.Y() ) << "NurbsGeometryModeler: " << "The two Points A_xyz and B_xyz must meet the following requirement: (B_xyz-A_xyz) > (0,0,0). However, (B_xyz-A_xyz)=" << B_xyz-A_xyz << std::endl; @@ -250,9 +259,19 @@ namespace Kratos } - void NurbsGeometryModeler::CreateAndAddRegularGrid3D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, - const Point& A_uvw, const Point& B_uvw, SizeType OrderU, SizeType OrderV, SizeType OrderW, - SizeType NumKnotSpansU, SizeType NumKnotSpansV, SizeType NumKnotSpansW ) + void NurbsGeometryModeler::CreateAndAddRegularGrid3D( + ModelPart& r_model_part, + const Point& A_xyz, + const Point& B_xyz, + const Point& A_uvw, + const Point& B_uvw, + SizeType OrderU, + SizeType OrderV, + SizeType OrderW, + SizeType NumKnotSpansU, + SizeType NumKnotSpansV, + SizeType NumKnotSpansW, + bool AddVolumeToModelPart) { KRATOS_ERROR_IF( B_xyz.X() <= A_xyz.X() || B_xyz.Y() <= A_xyz.Y() || B_xyz.Z() <= A_xyz.Z() ) << "NurbsGeometryModeler: " << "The two Points A_xyz and B_xyz must meet the following requirement: (B_xyz-A_xyz) > (0,0,0). However, (B_xyz-A_xyz)=" << B_xyz-A_xyz << std::endl; @@ -340,20 +359,23 @@ namespace Kratos insert_knots_w[i] = knot_w; } - // Add geometry to model part - if( mParameters.Has("geometry_name") ){ - p_volume_geometry->SetId(mParameters["geometry_name"].GetString()); - } else { - const SizeType number_of_geometries = r_model_part.NumberOfGeometries(); - SizeType last_geometry_id = 0; - if( number_of_geometries > 0 ){ - for( auto it = r_model_part.GeometriesBegin(); it!= r_model_part.GeometriesEnd(); ++it){ - last_geometry_id = it->Id(); + // In some cases there is no need of add the surface geometry, AddSurfaceToModelPart is true by default + if (AddVolumeToModelPart) { + // Add geometry to model part + if( mParameters.Has("geometry_name") ){ + p_volume_geometry->SetId(mParameters["geometry_name"].GetString()); + } else { + const SizeType number_of_geometries = r_model_part.NumberOfGeometries(); + SizeType last_geometry_id = 0; + if( number_of_geometries > 0 ){ + for( auto it = r_model_part.GeometriesBegin(); it!= r_model_part.GeometriesEnd(); ++it){ + last_geometry_id = it->Id(); + } } + p_volume_geometry->SetId(last_geometry_id+1); } - p_volume_geometry->SetId(last_geometry_id+1); + r_model_part.AddGeometry(p_volume_geometry); } - r_model_part.AddGeometry(p_volume_geometry); // Perform knot refinement. PointerVector PointsRefined = p_volume_geometry->Points(); @@ -407,6 +429,15 @@ namespace Kratos p_volume_geometry->SetInternals(PointsRefined, p_volume_geometry->PolynomialDegreeU(), p_volume_geometry->PolynomialDegreeV(), p_volume_geometry->PolynomialDegreeW(), p_volume_geometry->KnotsU(), p_volume_geometry->KnotsV(), p_volume_geometry->KnotsW()); + + // assign the value p_volume_geometry to the class member mpVolume for derived classes + mpVolume = p_volume_geometry; + mInsertKnotsU = insert_knots_u; + mInsertKnotsV = insert_knots_v; + mInsertKnotsW = insert_knots_w; + mKnotVectorU = knot_vector_u; + mKnotVectorV = knot_vector_v; + mKnotVectorW = knot_vector_w; } ///@} } // end namespace kratos diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.h b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.h index 65237dcb8e77..61b1922fe0d6 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.h +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.h @@ -98,12 +98,28 @@ class KRATOS_API(IGA_APPLICATION) NurbsGeometryModeler virtual void CreateAndAddRegularGrid2D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, const Point& A_uvw, const Point& B_uvw, SizeType OrderU, SizeType OrderV, SizeType NumKnotSpansU, SizeType NumKnotSpansV, bool add_surface_to_model_part = true); + + /** + * @brief Creates a cartesian grid composed out of trivariant B-spline cubes. + * @param PointA Lower point of bounding box. + * @param PointB Upper point of bounding box. + * @param Order Polynomial degree in each direction u,v,w. + * @param NumKnotSpans Number of equidistant elements/knot spans in each direction u,v,w. + * @note The CP'S are defined as nodes and added to the rModelPart. + **/ + virtual void CreateAndAddRegularGrid3D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, const Point& A_uvw, const Point& B_uvw, + SizeType OrderU, SizeType OrderV, SizeType OrderW, SizeType NumKnotSpansU, SizeType NumKnotSpansV, SizeType NumKnotSpansW, bool add_volume_to_model_part = true); + + NurbsSurfaceGeometryPointerType mpSurface; + NurbsVolumeGeometryPointerType mpVolume; Vector mKnotVectorU; Vector mKnotVectorV; + Vector mKnotVectorW; std::vector mInsertKnotsU; std::vector mInsertKnotsV; + std::vector mInsertKnotsW; private: @@ -113,18 +129,6 @@ class KRATOS_API(IGA_APPLICATION) NurbsGeometryModeler ///@} ///@name Private Operations - - /** - * @brief Creates a cartesian grid composed out of trivariant B-spline cubes. - * @param PointA Lower point of bounding box. - * @param PointB Upper point of bounding box. - * @param Order Polynomial degree in each direction u,v,w. - * @param NumKnotSpans Number of equidistant elements/knot spans in each direction u,v,w. - * @note The CP'S are defined as nodes and added to the rModelPart. - **/ - void CreateAndAddRegularGrid3D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, const Point& A_uvw, const Point& B_uvw, - SizeType OrderU, SizeType OrderV, SizeType OrderW, SizeType NumKnotSpansU, SizeType NumKnotSpansV, SizeType NumKnotSpansW ); - }; } // End namesapce Kratos diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp index 15e9ac3ffa67..226cd19bcc21 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp @@ -134,6 +134,138 @@ void NurbsGeometryModelerSbm::CreateAndAddRegularGrid2D( CreateBrepsSbmUtilities.CreateSurrogateBoundary(mpSurface, surrogate_sub_model_part_inner, surrogate_sub_model_part_outer, A_uvw, B_uvw, r_iga_model_part); } +// 3D +void NurbsGeometryModelerSbm::CreateAndAddRegularGrid3D( + ModelPart& rModelPart, + const Point& A_xyz, + const Point& B_xyz, + const Point& A_uvw, + const Point& B_uvw, + const SizeType OrderU, + const SizeType OrderV, + const SizeType OrderW, + const SizeType NumKnotSpansU, + const SizeType NumKnotSpansV, + const SizeType NumKnotSpansW, + const bool AddVolumeToModelPart) +{ + + // Call the CreateAndAddRegularGrid3D method of the base class NurbsGeometryModeler + NurbsGeometryModeler::CreateAndAddRegularGrid3D(rModelPart, A_xyz, B_xyz, + A_uvw, B_uvw, OrderU, OrderV, OrderW, NumKnotSpansU, NumKnotSpansV, NumKnotSpansW, false); + + // Create the Domain/Iga Model Part + const std::string iga_model_part_name = mParameters["model_part_name"].GetString(); + ModelPart& iga_model_part = mpModel->HasModelPart(iga_model_part_name) + ? mpModel->GetModelPart(iga_model_part_name) + : mpModel->CreateModelPart(iga_model_part_name); + + // Create the True Model Part -> contains all the true boundary features + std::string skin_model_part_inner_initial_name = "SkinModelPartInnerInitial"; + std::string skin_model_part_outer_initial_name = "SkinModelPartOuterInitial"; + std::string skin_model_part_name; + if (mParameters.Has("skin_model_part_inner_initial_name")) { + skin_model_part_inner_initial_name = mParameters["skin_model_part_inner_initial_name"].GetString(); + + KRATOS_ERROR_IF_NOT(mpModel->HasModelPart(skin_model_part_inner_initial_name)) + << "The skin_model_part '" << skin_model_part_inner_initial_name << "' was not created in the model.\n" + << "Check the reading of the mdpa file in the import mdpa modeler."<< std::endl; + } + if (mParameters.Has("skin_model_part_outer_initial_name")) { + skin_model_part_outer_initial_name = mParameters["skin_model_part_outer_initial_name"].GetString(); + + KRATOS_ERROR_IF_NOT(mpModel->HasModelPart(skin_model_part_outer_initial_name)) + << "The skin_model_part '" << skin_model_part_outer_initial_name << "' was not created in the model.\n" + << "Check the reading of the mdpa file in the import mdpa modeler."<< std::endl; + } + + // Create the surrogate sub model parts inner and outer + ModelPart& surrogate_sub_model_part_inner = iga_model_part.CreateSubModelPart("surrogate_inner"); + ModelPart& surrogate_sub_model_part_outer = iga_model_part.CreateSubModelPart("surrogate_outer"); + + // If there is not neither skin_inner nor skin_outer throw an error since you are using the sbm modeler + if (!(mParameters.Has("skin_model_part_inner_initial_name") || mParameters.Has("skin_model_part_outer_initial_name"))){ + + // Create the breps for the outer sbm boundary + CreateBrepsSbmUtilities CreateBrepsSbmUtilities(mEchoLevel); + // TODO: NEXT PR CreateSurrogateBoundary with Volume + // CreateBrepsSbmUtilities.CreateSurrogateBoundary(mpVolume, A_uvw, B_uvw, rModelPart); + + KRATOS_WARNING("None of the 'skin_model_part_name' have not been defined ") << + "in the nurbs_geometry_modeler_sbm in the project paramer json" << std::endl; + return; + } + + if (mParameters.Has("skin_model_part_name")) + skin_model_part_name = mParameters["skin_model_part_name"].GetString(); + else + KRATOS_ERROR << "The skin_model_part name '" << skin_model_part_name << "' was not defined in the project parameters.\n" << std::endl; + + // inner + mpModel->HasModelPart(skin_model_part_inner_initial_name) + ? mpModel->GetModelPart(skin_model_part_inner_initial_name) + : mpModel->CreateModelPart(skin_model_part_inner_initial_name); + // outer + mpModel->HasModelPart(skin_model_part_outer_initial_name) + ? mpModel->GetModelPart(skin_model_part_outer_initial_name) + : mpModel->CreateModelPart(skin_model_part_outer_initial_name); + + // Skin model part refined after Snake Process + ModelPart& skin_model_part = mpModel->CreateModelPart(skin_model_part_name); + skin_model_part.CreateSubModelPart("inner"); + skin_model_part.CreateSubModelPart("outer"); + + + // compute unique_knot_vector_u + Vector unique_knot_vector_u(2+(NumKnotSpansU-1)); + unique_knot_vector_u[0] = mKnotVectorU[0]; unique_knot_vector_u[NumKnotSpansU] = mKnotVectorU[mKnotVectorU.size()-1]; + for (SizeType i_knot_insertion = 0; i_knot_insertion < NumKnotSpansU-1; i_knot_insertion++) { + unique_knot_vector_u[i_knot_insertion+1] = mInsertKnotsU[i_knot_insertion]; + } + + // compute unique_knot_vector_v + Vector unique_knot_vector_v(2+(NumKnotSpansV-1)); + unique_knot_vector_v[0] = mKnotVectorV[0]; unique_knot_vector_v[NumKnotSpansV] = mKnotVectorV[mKnotVectorV.size()-1]; + for (SizeType i_knot_insertion = 0; i_knot_insertion < NumKnotSpansV-1; i_knot_insertion++) { + unique_knot_vector_v[i_knot_insertion+1] = mInsertKnotsV[i_knot_insertion]; + } + + // compute unique_knot_vector_w + Vector unique_knot_vector_w(2+(NumKnotSpansW-1)); + unique_knot_vector_w[0] = mKnotVectorW[0]; unique_knot_vector_w[NumKnotSpansW] = mKnotVectorW[mKnotVectorW.size()-1]; + for (SizeType i_knot_insertion = 0; i_knot_insertion < NumKnotSpansW-1; i_knot_insertion++) { + unique_knot_vector_w[i_knot_insertion+1] = mInsertKnotsW[i_knot_insertion]; + } + + // Set the value of the knot vectors + iga_model_part.SetValue(KNOT_VECTOR_U, unique_knot_vector_u); + iga_model_part.SetValue(KNOT_VECTOR_V, unique_knot_vector_v); + iga_model_part.SetValue(KNOT_VECTOR_W, unique_knot_vector_w); + + // Create the parameters for the SnakeSbmProcess + Kratos::Parameters snake_parameters; + snake_parameters.AddString("model_part_name", iga_model_part_name); + snake_parameters.AddString("skin_model_part_name", skin_model_part_name); + snake_parameters.AddDouble("echo_level", mEchoLevel); + snake_parameters.AddString("skin_model_part_inner_initial_name", skin_model_part_inner_initial_name); + snake_parameters.AddString("skin_model_part_outer_initial_name", skin_model_part_outer_initial_name); + if (mParameters.Has("lambda_inner")) + snake_parameters.AddDouble("lambda_inner", mParameters["lambda_inner"].GetDouble()); + if (mParameters.Has("lambda_outer")) + snake_parameters.AddDouble("lambda_outer", mParameters["lambda_outer"].GetDouble()); + if (mParameters.Has("number_of_inner_loops")) + snake_parameters.AddDouble("number_of_inner_loops", mParameters["number_of_inner_loops"].GetInt()); + + // Create the surrogate_sub_model_part for inner and outer // TODO: extend this in 3D + SnakeSbmProcess snake_sbm_process(*mpModel, snake_parameters); + snake_sbm_process.Execute(); + + // Create the breps for the outer sbm boundary // TODO: extend this in 3D + CreateBrepsSbmUtilities CreateBrepsSbmUtilities(mEchoLevel); + // TODO: NEXT PR CreateSurrogateBoundary with Volume + // CreateBrepsSbmUtilities.CreateSurrogateBoundary(mpVolume, surrogate_sub_model_part_inner, surrogate_sub_model_part_outer, A_uvw, B_uvw, iga_model_part); +} + const Parameters NurbsGeometryModelerSbm::GetDefaultParameters() const { diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.h b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.h index 3eaa60ebd473..00e68a7d0228 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.h +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.h @@ -96,6 +96,28 @@ class KRATOS_API(IGA_APPLICATION) NurbsGeometryModelerSbm const SizeType NumKnotSpansV, const bool AddSurfaceToModelPart) override; + /** + * @brief Creates a regular grid composed out of bivariant B-splines. + * @param PointA Lower point of bounding 3D box. + * @param PointB Upper point of bounding 3D box. + * @param Order Polynomial degree in each direction u,v,w. + * @param NumKnotSpans Number of equidistant elements/knot spans in each direction u,v,w. + * @note The CP'S are defined as nodes and added to the rModelPart. + **/ + void CreateAndAddRegularGrid3D( + ModelPart& rModelPart, + const Point& A_xyz, + const Point& B_xyz, + const Point& A_uvw, + const Point& B_uvw, + const SizeType OrderU, + const SizeType OrderV, + const SizeType OrderW, + const SizeType NumKnotSpansU, + const SizeType NumKnotSpansV, + const SizeType NumKnotSpansW, + const bool AddVolumeToModelPart) override; + private: ///@name Private Member Variables diff --git a/applications/IgaApplication/iga_application.cpp b/applications/IgaApplication/iga_application.cpp index 8db86afa1d36..e834916cda97 100644 --- a/applications/IgaApplication/iga_application.cpp +++ b/applications/IgaApplication/iga_application.cpp @@ -167,6 +167,7 @@ KRATOS_INFO("") << " KRATOS _____ _____\n" KRATOS_REGISTER_VARIABLE(CONDITION_NAME) KRATOS_REGISTER_VARIABLE(KNOT_VECTOR_U) KRATOS_REGISTER_VARIABLE(KNOT_VECTOR_V) + KRATOS_REGISTER_VARIABLE(KNOT_VECTOR_W) KRATOS_REGISTER_VARIABLE(KNOT_SPAN_SIZES) KRATOS_REGISTER_VARIABLE(PARAMETER_SPACE_CORNERS) } diff --git a/applications/IgaApplication/iga_application_variables.cpp b/applications/IgaApplication/iga_application_variables.cpp index b308cea06556..7a243ed8fbb7 100644 --- a/applications/IgaApplication/iga_application_variables.cpp +++ b/applications/IgaApplication/iga_application_variables.cpp @@ -87,6 +87,7 @@ KRATOS_CREATE_VARIABLE(std::string, BOUNDARY_CONDITION_TYPE) KRATOS_CREATE_VARIABLE(std::string, CONDITION_NAME) KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_U) KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_V) +KRATOS_CREATE_VARIABLE(Vector, KNOT_VECTOR_W) KRATOS_CREATE_VARIABLE(Vector, KNOT_SPAN_SIZES) KRATOS_CREATE_VARIABLE(std::vector, PARAMETER_SPACE_CORNERS) diff --git a/applications/IgaApplication/iga_application_variables.h b/applications/IgaApplication/iga_application_variables.h index 55e580ab3f53..d512f417a004 100644 --- a/applications/IgaApplication/iga_application_variables.h +++ b/applications/IgaApplication/iga_application_variables.h @@ -96,6 +96,7 @@ KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, std::string, BOUNDARY_CONDIT KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, std::string, CONDITION_NAME) KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, Vector, KNOT_VECTOR_U) KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, Vector, KNOT_VECTOR_V) +KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, Vector, KNOT_VECTOR_W) KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, Vector, KNOT_SPAN_SIZES) KRATOS_DEFINE_APPLICATION_VARIABLE(IGA_APPLICATION, std::vector, PARAMETER_SPACE_CORNERS) From e08fec8b67cffaf3aebac61ac4d9abb960d1982c Mon Sep 17 00:00:00 2001 From: NickNick9 Date: Wed, 28 May 2025 13:44:19 +0200 Subject: [PATCH 2/4] unused surrogate_sub_model_part_ --- .../custom_modelers/nurbs_geometry_modeler.cpp | 2 +- .../custom_modelers/nurbs_geometry_modeler_sbm.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp index 8bc7df93341c..d64e02e9cdbf 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp @@ -359,7 +359,7 @@ namespace Kratos insert_knots_w[i] = knot_w; } - // In some cases there is no need of add the surface geometry, AddSurfaceToModelPart is true by default + // In some cases there is no need of add the volume geometry, AddSurfaceToModelPart is true by default if (AddVolumeToModelPart) { // Add geometry to model part if( mParameters.Has("geometry_name") ){ diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp index 226cd19bcc21..57c897f964af 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp @@ -179,9 +179,10 @@ void NurbsGeometryModelerSbm::CreateAndAddRegularGrid3D( << "Check the reading of the mdpa file in the import mdpa modeler."<< std::endl; } - // Create the surrogate sub model parts inner and outer - ModelPart& surrogate_sub_model_part_inner = iga_model_part.CreateSubModelPart("surrogate_inner"); - ModelPart& surrogate_sub_model_part_outer = iga_model_part.CreateSubModelPart("surrogate_outer"); + // Create the surrogate sub model parts inner and outer + // TO DO: When CreateSurrogateBoundary with Volume is implemented + // ModelPart& surrogate_sub_model_part_inner = iga_model_part.CreateSubModelPart("surrogate_inner"); + // ModelPart& surrogate_sub_model_part_outer = iga_model_part.CreateSubModelPart("surrogate_outer"); // If there is not neither skin_inner nor skin_outer throw an error since you are using the sbm modeler if (!(mParameters.Has("skin_model_part_inner_initial_name") || mParameters.Has("skin_model_part_outer_initial_name"))){ From 64e8ae94abd448fb6c13fa226b8687a7c1ecb65a Mon Sep 17 00:00:00 2001 From: NickNick9 Date: Mon, 2 Jun 2025 16:06:21 +0200 Subject: [PATCH 3/4] Ricky's tips --- .../nurbs_geometry_modeler.cpp | 28 +++------------ .../nurbs_geometry_modeler_sbm.cpp | 35 ++++++------------- 2 files changed, 14 insertions(+), 49 deletions(-) diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp index d64e02e9cdbf..24774dd6a5e8 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler.cpp @@ -105,17 +105,8 @@ namespace Kratos ///@} ///@name Private Operations ///@{ - void NurbsGeometryModeler::CreateAndAddRegularGrid2D( - ModelPart& r_model_part, - const Point& A_xyz, - const Point& B_xyz, - const Point& A_uvw, - const Point& B_uvw, - SizeType OrderU, - SizeType OrderV, - SizeType NumKnotSpansU, - SizeType NumKnotSpansV, - bool AddSurfaceToModelPart) + void NurbsGeometryModeler::CreateAndAddRegularGrid2D( ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, + const Point& A_uvw, const Point& B_uvw, SizeType OrderU, SizeType OrderV,SizeType NumKnotSpansU, SizeType NumKnotSpansV, bool AddSurfaceToModelPart) { KRATOS_ERROR_IF( B_xyz.X() <= A_xyz.X() || B_xyz.Y() <= A_xyz.Y() ) << "NurbsGeometryModeler: " << "The two Points A_xyz and B_xyz must meet the following requirement: (B_xyz-A_xyz) > (0,0,0). However, (B_xyz-A_xyz)=" << B_xyz-A_xyz << std::endl; @@ -259,19 +250,8 @@ namespace Kratos } - void NurbsGeometryModeler::CreateAndAddRegularGrid3D( - ModelPart& r_model_part, - const Point& A_xyz, - const Point& B_xyz, - const Point& A_uvw, - const Point& B_uvw, - SizeType OrderU, - SizeType OrderV, - SizeType OrderW, - SizeType NumKnotSpansU, - SizeType NumKnotSpansV, - SizeType NumKnotSpansW, - bool AddVolumeToModelPart) + void NurbsGeometryModeler::CreateAndAddRegularGrid3D(ModelPart& r_model_part, const Point& A_xyz, const Point& B_xyz, const Point& A_uvw, const Point& B_uvw, + SizeType OrderU, SizeType OrderV, SizeType OrderW, SizeType NumKnotSpansU, SizeType NumKnotSpansV, SizeType NumKnotSpansW, bool AddVolumeToModelPart) { KRATOS_ERROR_IF( B_xyz.X() <= A_xyz.X() || B_xyz.Y() <= A_xyz.Y() || B_xyz.Z() <= A_xyz.Z() ) << "NurbsGeometryModeler: " << "The two Points A_xyz and B_xyz must meet the following requirement: (B_xyz-A_xyz) > (0,0,0). However, (B_xyz-A_xyz)=" << B_xyz-A_xyz << std::endl; diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp index 57c897f964af..3e8819e092ae 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp @@ -156,35 +156,20 @@ void NurbsGeometryModelerSbm::CreateAndAddRegularGrid3D( // Create the Domain/Iga Model Part const std::string iga_model_part_name = mParameters["model_part_name"].GetString(); - ModelPart& iga_model_part = mpModel->HasModelPart(iga_model_part_name) + ModelPart& r_iga_model_part = mpModel->HasModelPart(iga_model_part_name) ? mpModel->GetModelPart(iga_model_part_name) : mpModel->CreateModelPart(iga_model_part_name); // Create the True Model Part -> contains all the true boundary features - std::string skin_model_part_inner_initial_name = "SkinModelPartInnerInitial"; - std::string skin_model_part_outer_initial_name = "SkinModelPartOuterInitial"; std::string skin_model_part_name; - if (mParameters.Has("skin_model_part_inner_initial_name")) { - skin_model_part_inner_initial_name = mParameters["skin_model_part_inner_initial_name"].GetString(); - - KRATOS_ERROR_IF_NOT(mpModel->HasModelPart(skin_model_part_inner_initial_name)) - << "The skin_model_part '" << skin_model_part_inner_initial_name << "' was not created in the model.\n" - << "Check the reading of the mdpa file in the import mdpa modeler."<< std::endl; - } - if (mParameters.Has("skin_model_part_outer_initial_name")) { - skin_model_part_outer_initial_name = mParameters["skin_model_part_outer_initial_name"].GetString(); - - KRATOS_ERROR_IF_NOT(mpModel->HasModelPart(skin_model_part_outer_initial_name)) - << "The skin_model_part '" << skin_model_part_outer_initial_name << "' was not created in the model.\n" - << "Check the reading of the mdpa file in the import mdpa modeler."<< std::endl; - } + std::string skin_model_part_inner_initial_name = mParameters["skin_model_part_inner_initial_name"].GetString(); + std::string skin_model_part_outer_initial_name = mParameters["skin_model_part_outer_initial_name"].GetString(); - // Create the surrogate sub model parts inner and outer - // TO DO: When CreateSurrogateBoundary with Volume is implemented - // ModelPart& surrogate_sub_model_part_inner = iga_model_part.CreateSubModelPart("surrogate_inner"); - // ModelPart& surrogate_sub_model_part_outer = iga_model_part.CreateSubModelPart("surrogate_outer"); + // Create the surrogate sub model parts inner and outer + ModelPart& surrogate_sub_model_part_inner = r_iga_model_part.CreateSubModelPart("surrogate_inner"); + ModelPart& surrogate_sub_model_part_outer = r_iga_model_part.CreateSubModelPart("surrogate_outer"); - // If there is not neither skin_inner nor skin_outer throw an error since you are using the sbm modeler + // If there is not neither skin_inner nor skin_outer throw a warning since you are using the sbm modeler if (!(mParameters.Has("skin_model_part_inner_initial_name") || mParameters.Has("skin_model_part_outer_initial_name"))){ // Create the breps for the outer sbm boundary @@ -239,9 +224,9 @@ void NurbsGeometryModelerSbm::CreateAndAddRegularGrid3D( } // Set the value of the knot vectors - iga_model_part.SetValue(KNOT_VECTOR_U, unique_knot_vector_u); - iga_model_part.SetValue(KNOT_VECTOR_V, unique_knot_vector_v); - iga_model_part.SetValue(KNOT_VECTOR_W, unique_knot_vector_w); + r_iga_model_part.SetValue(KNOT_VECTOR_U, unique_knot_vector_u); + r_iga_model_part.SetValue(KNOT_VECTOR_V, unique_knot_vector_v); + r_iga_model_part.SetValue(KNOT_VECTOR_W, unique_knot_vector_w); // Create the parameters for the SnakeSbmProcess Kratos::Parameters snake_parameters; From e2a09bf7f8e1fc50746e7129830805c0ef741cc7 Mon Sep 17 00:00:00 2001 From: NickNick9 Date: Tue, 3 Jun 2025 09:33:46 +0200 Subject: [PATCH 4/4] unused variable --- .../custom_modelers/nurbs_geometry_modeler_sbm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp index 3e8819e092ae..71d141e1b6ea 100644 --- a/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp +++ b/applications/IgaApplication/custom_modelers/nurbs_geometry_modeler_sbm.cpp @@ -166,8 +166,8 @@ void NurbsGeometryModelerSbm::CreateAndAddRegularGrid3D( std::string skin_model_part_outer_initial_name = mParameters["skin_model_part_outer_initial_name"].GetString(); // Create the surrogate sub model parts inner and outer - ModelPart& surrogate_sub_model_part_inner = r_iga_model_part.CreateSubModelPart("surrogate_inner"); - ModelPart& surrogate_sub_model_part_outer = r_iga_model_part.CreateSubModelPart("surrogate_outer"); + // ModelPart& surrogate_sub_model_part_inner = r_iga_model_part.CreateSubModelPart("surrogate_inner"); // uncomment this line (next PR) + // ModelPart& surrogate_sub_model_part_outer = r_iga_model_part.CreateSubModelPart("surrogate_outer"); // uncomment this line (next PR) // If there is not neither skin_inner nor skin_outer throw a warning since you are using the sbm modeler if (!(mParameters.Has("skin_model_part_inner_initial_name") || mParameters.Has("skin_model_part_outer_initial_name"))){