11 #if !defined(KRATOS_CAD_JSON_INPUT_INCLUDED )
12 #define KRATOS_CAD_JSON_INPUT_INCLUDED
45 template<
class TNodeType = Node,
class TEmbeddedNodeType = Po
int>
90 const std::string& rDataFileName,
94 mCadJsonParameters = ReadParamatersFile(rDataFileName,
EchoLevel);
101 : mCadJsonParameters(CadJsonParameters)
116 ReadGeometryModelPart(mCadJsonParameters, rModelPart, mEchoLevel);
126 static void ReadGeometryModelPart(
132 <<
"Missing \"breps\" section" << std::endl;
134 ReadBreps(rCadJsonParameters[
"breps"], rModelPart,
EchoLevel);
141 static void ReadBreps(
142 const Parameters rParameters,
143 ModelPart& rModelPart,
146 for (
IndexType brep_index = 0; brep_index < rParameters.size(); brep_index++)
149 <<
"Reading Brep \"" << GetIdOrName(rParameters[brep_index])
150 <<
"\" - faces." << std::endl;
152 if (rParameters[brep_index].
Has(
"faces"))
154 ReadBrepSurfaces(rParameters[brep_index][
"faces"], rModelPart,
EchoLevel);
158 for (
IndexType brep_index = 0; brep_index < rParameters.size(); brep_index++)
161 <<
"Reading Brep \"" << GetIdOrName(rParameters[brep_index])
162 <<
"\" - edges." << std::endl;
164 if (rParameters[brep_index].
Has(
"edges"))
166 ReadBrepCurveOnSurfaces(rParameters[brep_index][
"edges"], rModelPart,
EchoLevel);
170 for (
IndexType brep_index = 0; brep_index < rParameters.size(); brep_index++)
173 <<
"Reading Brep \"" << GetIdOrName(rParameters[brep_index])
174 <<
"\" - points." << std::endl;
176 if (rParameters[brep_index].
Has(
"vertices"))
178 ReadPointsOnGeometries(rParameters[brep_index][
"vertices"], rModelPart,
EchoLevel);
187 static void ReadBrepSurfaces(
188 const Parameters rParameters,
189 ModelPart& rModelPart,
193 <<
"\"faces\" section needs to be an array of BrepSurfaces." << std::endl;
196 <<
"Reading " << rParameters.size() <<
" BrepSurfaces..." << std::endl;
198 for (
IndexType brep_surface_i = 0; brep_surface_i < rParameters.size(); ++brep_surface_i)
200 ReadBrepSurface(rParameters[brep_surface_i], rModelPart,
EchoLevel);
204 static void ReadBrepSurface(
205 const Parameters rParameters,
206 ModelPart& rModelPart,
210 <<
"Reading BrepSurface \"" << GetIdOrName(rParameters) <<
"\"" << std::endl;
213 <<
"Missing 'brep_id' or 'brep_name' in brep face." << std::endl;
216 <<
"Missing 'surface' in brep face." << std::endl;
218 auto p_surface(ReadNurbsSurface<3, TNodeType>(
219 rParameters[
"surface"], rModelPart,
EchoLevel));
221 const bool is_trimmed = (rParameters[
"surface"].Has(
"is_trimmed"))
222 ? rParameters[
"surface"][
"is_trimmed"].GetBool()
225 <<
"For BrepSurface \"" << GetIdOrName(rParameters) <<
"\""
226 <<
"\", is_trimmed is not provided in the input."
227 <<
" is_trimmed = true is considered." << std::endl;
229 if (rParameters.Has(
"boundary_loops"))
232 tie(outer_loops, inner_loops) =
233 ReadBoundaryLoops(rParameters[
"boundary_loops"], p_surface, rModelPart,
EchoLevel);
235 auto p_brep_surface =
236 Kratos::make_shared<BrepSurfaceType>(
243 p_surface->SetGeometryParent(p_brep_surface.get());
245 SetIdOrName<BrepSurfaceType>(rParameters, p_brep_surface);
247 ReadAndAddEmbeddedEdges(p_brep_surface, rParameters, p_surface, rModelPart,
EchoLevel);
249 rModelPart.AddGeometry(p_brep_surface);
254 <<
"For BrepSurface \"" << GetIdOrName(rParameters) <<
"\""
255 <<
"\", boundary_loops are not provided in the input."
256 <<
" It will be considered as untrimmed." << std::endl;
258 auto p_brep_surface =
259 Kratos::make_shared<BrepSurfaceType>(
262 SetIdOrName<BrepSurfaceType>(rParameters, p_brep_surface);
264 ReadAndAddEmbeddedEdges(p_brep_surface, rParameters, p_surface, rModelPart,
EchoLevel);
266 rModelPart.AddGeometry(p_brep_surface);
275 ReadTrimmingCurveVector(
276 const Parameters rParameters,
277 typename NurbsSurfaceType::Pointer pNurbsSurface,
278 ModelPart& rModelPart,
282 <<
"Trimming curve list has no element." << std::endl;
285 trimming_brep_curve_vector(rParameters.size());
287 for (
IndexType tc_idx = 0; tc_idx < rParameters.size(); tc_idx++)
289 trimming_brep_curve_vector[tc_idx] = ReadTrimmingCurve(
290 rParameters[tc_idx], pNurbsSurface, rModelPart,
EchoLevel);
293 return trimming_brep_curve_vector;
296 static typename BrepCurveOnSurfaceType::Pointer
298 const Parameters rParameters,
299 typename NurbsSurfaceType::Pointer pNurbsSurface,
300 ModelPart& rModelPart,
304 <<
"Missing 'curve_direction' in nurbs curve" << std::endl;
305 bool curve_direction = rParameters[
"curve_direction"].GetBool();
308 <<
"Missing 'parameter_curve' in nurbs curve" << std::endl;
310 auto p_trimming_curve(ReadNurbsCurve<2, TEmbeddedNodeType>(
311 rParameters[
"parameter_curve"], rModelPart,
EchoLevel));
314 <<
"Missing 'active_range' in parameter_curve, in trimming curve." << std::endl;
315 Vector active_range_vector = rParameters[
"parameter_curve"][
"active_range"].GetVector();
316 NurbsInterval brep_active_range(active_range_vector[0], active_range_vector[1]);
318 auto p_brep_curve_on_surface
319 = Kratos::make_shared<BrepCurveOnSurfaceType>(
320 pNurbsSurface, p_trimming_curve, brep_active_range, curve_direction);
322 if (rParameters.Has(
"trim_index")) {
323 p_brep_curve_on_surface->SetId(rParameters[
"trim_index"].GetInt());
326 return p_brep_curve_on_surface;
329 static std::tuple<BrepCurveOnSurfaceLoopArrayType, BrepCurveOnSurfaceLoopArrayType>
331 const Parameters rParameters,
332 typename NurbsSurfaceType::Pointer pNurbsSurface,
333 ModelPart& rModelPart,
339 for (
IndexType bl_idx = 0; bl_idx < rParameters.size(); bl_idx++)
342 <<
"Missing 'loop_type' in boundary loops, in "
343 << bl_idx <<
" loop." << std::endl;
344 std::string loop_type = rParameters[bl_idx][
"loop_type"].GetString();
347 <<
"Missing 'trimming_curves' in boundary loops"
348 << bl_idx <<
" loop." << std::endl;
349 auto trimming_curves(ReadTrimmingCurveVector(
350 rParameters[bl_idx][
"trimming_curves"], pNurbsSurface, rModelPart,
EchoLevel));
352 if (loop_type ==
"outer")
354 outer_loops.resize(outer_loops.size() + 1);
355 outer_loops[outer_loops.size() - 1] = trimming_curves;
357 else if (loop_type ==
"inner")
359 inner_loops.resize(inner_loops.size() + 1);
360 inner_loops[inner_loops.size() - 1] = trimming_curves;
365 <<
" is not supported." << std::endl;
369 return std::make_tuple(outer_loops, inner_loops);
372 static void ReadAndAddEmbeddedEdges(
373 typename BrepSurfaceType::Pointer pBrepSurface,
374 const Parameters rParameters,
375 typename NurbsSurfaceType::Pointer pNurbsSurface,
376 ModelPart& rModelPart,
379 if (rParameters.Has(
"embedded_edges")) {
380 if (rParameters[
"embedded_edges"].size() > 0) {
382 rParameters[
"embedded_edges"], pNurbsSurface, rModelPart,
EchoLevel));
384 pBrepSurface->AddEmbeddedEdges(embedded_edges);
393 static void ReadBrepCurveOnSurfaces(
394 const Parameters rParameters,
395 ModelPart& rModelPart,
399 <<
"\"faces\" section needs to be an array of BrepSurfaces." << std::endl;
402 <<
"Reading " << rParameters.size() <<
" BrepEdge..." << std::endl;
406 ReadBrepEdge(rParameters[
i], rModelPart,
EchoLevel);
410 static void ReadBrepEdge(
411 const Parameters rParameters,
412 ModelPart& rModelPart,
416 <<
"Missing 'brep_id' or 'brep_name' in brep edge" << std::endl;
418 if (rParameters.Has(
"topology"))
420 if (rParameters[
"topology"].size() == 0)
422 ReadBrepCurve(rParameters, rModelPart,
EchoLevel);
424 else if (rParameters[
"topology"].size() == 1)
426 ReadBrepEdgeBrepCurveOnSurface(rParameters, rModelPart,
EchoLevel);
429 ReadCouplingGeometry(rParameters, rModelPart,
EchoLevel);
434 static void ReadBrepCurve(
435 const Parameters rParameters,
436 ModelPart& rModelPart,
440 <<
"Missing 'brep_id' or 'brep_name' in brep curve." << std::endl;
443 <<
"Reading BrepCurve \"" << GetIdOrName(rParameters) <<
"\"" << std::endl;
446 <<
"Missing '3d_curve' in brep curve." << std::endl;
448 auto p_curve = ReadNurbsCurve<3, TNodeType>(
449 rParameters[
"3d_curve"], rModelPart,
EchoLevel);
451 auto p_brep_curve = Kratos::make_shared<BrepCurveType>(p_curve);
453 SetIdOrName<BrepCurveType>(rParameters, p_brep_curve);
455 rModelPart.AddGeometry(p_brep_curve);
459 static void ReadBrepEdgeBrepCurveOnSurface(
460 const Parameters & rParameters,
461 ModelPart & rModelPart,
465 <<
"Reading BrepEdge \"" << GetIdOrName(rParameters) <<
"\"" << std::endl;
468 <<
"Missing 'brep_id' or 'brep_name' in topology" << std::endl;
471 <<
"Getting trim: \"" << rParameters[
"topology"][0][
"trim_index"].GetInt()
472 <<
"\" from geometry: \"" << GetIdOrName(rParameters[
"topology"][0])
473 <<
"\"." << std::endl;
477 p_geometry->pGetGeometryPart(rParameters[
"topology"][0][
"trim_index"].GetInt());
479 auto p_brep_curve_on_surface
480 = dynamic_pointer_cast<BrepCurveOnSurfaceType>(p_brep_trim);
482 <<
"dynamic_cast from Geometry to BrepCurveOnSurface not successfull. Brep Id: "
483 << GetIdOrName(rParameters[
"topology"][0]) <<
" and trim index: "
484 << rParameters[
"topology"][0][
"trim_index"].GetInt() << std::endl;
486 bool relative_direction =
true;
487 if (rParameters[
"topology"][0].
Has(
"relative_direction")) {
488 relative_direction = rParameters[
"topology"][0][
"relative_direction"].GetBool();
492 <<
"For trim: \"" << rParameters[
"topology"][0][
"trim_index"].GetInt()
493 <<
"\" from geometry: \"" << GetIdOrName(rParameters[
"topology"][0])
494 <<
"\", no relative_direction is provided in the input." << std::endl;
497 auto p_nurbs_curve_on_surface = p_brep_curve_on_surface->pGetCurveOnSurface();
499 auto brep_nurbs_interval = p_brep_curve_on_surface->DomainInterval();
500 auto p_bre_edge_brep_curve_on_surface = Kratos::make_shared<BrepCurveOnSurfaceType>(
501 p_nurbs_curve_on_surface, brep_nurbs_interval, relative_direction);
503 SetIdOrName<BrepCurveOnSurfaceType>(rParameters, p_bre_edge_brep_curve_on_surface);
505 rModelPart.AddGeometry(p_bre_edge_brep_curve_on_surface);
508 static void ReadCouplingGeometry(
509 const Parameters rParameters,
510 ModelPart& rModelPart,
514 <<
"Reading CouplingGeometry \"" << GetIdOrName(rParameters) <<
"\"" << std::endl;
518 for (
IndexType i = 0;
i < rParameters[
"topology"].size();
i++)
521 <<
"Missing 'brep_id' or 'brep_name' in topology of Coupling - BrepEdge" << std::endl;
523 auto p_geometry = GetGeometry(rParameters[
"topology"][
i], rModelPart);
525 geometry_vector.push_back(
526 p_geometry->pGetGeometryPart(rParameters[
"topology"][
i][
"trim_index"].GetInt()));
529 auto p_coupling_geometry = Kratos::make_shared<CouplingGeometryType>(
532 SetIdOrName<CouplingGeometryType>(rParameters, p_coupling_geometry);
534 rModelPart.AddGeometry(p_coupling_geometry);
537 static void ReadPointsOnGeometries(
538 const Parameters rParameters,
539 ModelPart& rModelPart,
543 <<
"\"vertices\" section needs to be an array of PointsOnGeometries." << std::endl;
546 <<
"Reading " << rParameters.size() <<
" PointsOnGeometries..." << std::endl;
548 for (
IndexType brep_point_i = 0; brep_point_i < rParameters.size(); ++brep_point_i)
551 <<
"Reading PointOnGeometry \"" << GetIdOrName(rParameters[brep_point_i]) <<
"\"" << std::endl;
553 if (rParameters[brep_point_i][
"topology"].size() == 1) {
554 if (rParameters[brep_point_i][
"topology"][0].
Has(
"local_coordinates"))
556 auto p_geometry = GetGeometry(rParameters[brep_point_i][
"topology"][0], rModelPart);
558 GeometryPointerType p_point_on_geometry = ReadPointOnGeometry(rParameters[brep_point_i][
"topology"][0], rModelPart, p_geometry,
EchoLevel);
560 SetIdOrName(rParameters[brep_point_i], p_point_on_geometry);
561 rModelPart.AddGeometry(p_point_on_geometry);
564 KRATOS_ERROR <<
"Topology of brep point: " << GetIdOrName(rParameters[brep_point_i])
565 <<
" does not provide local coordinates. No other import option provided. Topology as following: "
566 << rParameters[brep_point_i] << std::endl;
569 else if (rParameters[brep_point_i][
"topology"].size() > 1) {
570 std::vector<GeometryPointerType> coupling_point_geometries(rParameters[brep_point_i][
"topology"].size());
572 for (
IndexType i = 0;
i < rParameters[brep_point_i][
"topology"].size(); ++
i) {
573 auto p_geometry = GetGeometry(rParameters[brep_point_i][
"topology"][
i], rModelPart);
575 coupling_point_geometries[
i] = ReadPointOnGeometry(rParameters[brep_point_i][
"topology"][
i], rModelPart, p_geometry,
EchoLevel);
578 auto p_coupling_geometry = Kratos::make_shared<CouplingGeometryType>(
579 coupling_point_geometries);
581 SetIdOrName<CouplingGeometryType>(rParameters[brep_point_i], p_coupling_geometry);
582 rModelPart.AddGeometry(p_coupling_geometry);
585 KRATOS_ERROR <<
"PointOnGeometry did not provide any topology, which is not allowed.\n Parameters are read as following: \n"
586 << rParameters[brep_point_i] << std::endl;
592 const Parameters rParameters,
593 ModelPart& rModelPart,
597 auto coordinates_vector = rParameters[
"local_coordinates"].GetVector();
598 array_1d<double, 3> local_coordinates;
599 local_coordinates[0] = coordinates_vector[0];
600 local_coordinates[1] = coordinates_vector[1];
601 local_coordinates[2] = coordinates_vector[2];
603 if (pBackgroundGeometry->LocalSpaceDimension() == 2)
604 return Kratos::make_shared<PointOnGeometryOnSurfaceType>(local_coordinates, pBackgroundGeometry);
605 else if (pBackgroundGeometry->LocalSpaceDimension() == 1)
606 return Kratos::make_shared<PointOnGeometryOnCurveType>(local_coordinates, pBackgroundGeometry);
608 KRATOS_ERROR <<
"Local space dimension of: " << pBackgroundGeometry->LocalSpaceDimension()
609 <<
" is not supported for point on geometry." << std::endl;
631 template<
int TWorkingSpaceDimension,
class TThisNodeType>
632 static typename NurbsCurveGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>::Pointer
634 const Parameters rParameters,
635 ModelPart& rModelPart,
638 bool is_rational =
true;
639 if (rParameters.Has(
"is_rational")) {
640 is_rational = rParameters[
"is_rational"].GetBool();
644 <<
"\"is_rational\" is not provided within \"surface\". Thus, it is considered as rational. "
645 <<
"If this curve is non-rational the computation of the shape functions is less optimized."
650 <<
"Missing 'knot_vector' in nurbs curve" << std::endl;
651 Vector knot_vector = rParameters[
"knot_vector"].GetVector();
654 <<
"Missing 'degree' in nurbs curve" << std::endl;
655 int polynomial_degree = rParameters[
"degree"].GetInt();
657 PointerVector<TThisNodeType> control_points;
659 ReadControlPointVector(control_points,
660 rParameters[
"control_points"], rModelPart,
EchoLevel);
664 Vector control_point_weights = ReadControlPointWeightVector(
665 rParameters[
"control_points"]);
667 return Kratos::make_shared<NurbsCurveGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>>(
668 NurbsCurveGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>(
672 control_point_weights));
674 typename NurbsCurveGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>::Pointer p_nurbs_curve(
675 new NurbsCurveGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>(
680 return p_nurbs_curve;
700 template<
int TWorkingSpaceDimension,
class TThisNodeType>
701 static typename NurbsSurfaceGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>::Pointer
703 const Parameters rParameters,
704 ModelPart& rModelPart,
707 bool is_rational =
true;
708 if (rParameters.Has(
"is_rational")) {
709 is_rational = rParameters[
"is_rational"].GetBool();
713 <<
"\"is_rational\" is not provided within \"surface\". Thus, it is considered as rational. "
714 <<
"If this surface is non-rational the computation of the shape functions is less optimized."
719 <<
"Missing 'knot_vector' in nurbs surface" << std::endl;
721 <<
"'knot_vectors' need to be of size two, knot_vector_u and knot_vector_v" << std::endl;
722 Vector knot_vector_u = rParameters[
"knot_vectors"][0].GetVector();
723 Vector knot_vector_v = rParameters[
"knot_vectors"][1].GetVector();
726 <<
"Missing 'degrees' in nurbs surface" << std::endl;
728 <<
"'degrees' need to be of size two, p and q" << std::endl;
729 int p = rParameters[
"degrees"][0].GetInt();
730 int q = rParameters[
"degrees"][1].GetInt();
732 PointerVector<TThisNodeType> control_points;
734 ReadControlPointVector(control_points,
735 rParameters[
"control_points"], rModelPart,
EchoLevel);
739 Vector control_point_weights = ReadControlPointWeightVector(
740 rParameters[
"control_points"]);
742 return Kratos::make_shared<NurbsSurfaceGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>>(
748 control_point_weights);
750 typename NurbsSurfaceGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>::Pointer p_nurbs_surface(
751 new NurbsSurfaceGeometry<TWorkingSpaceDimension, PointerVector<TThisNodeType>>(
758 return p_nurbs_surface;
766 static Vector ReadControlPointWeightVector(
767 const Parameters rParameters,
772 <<
"Length of control point list is zero!" << std::endl;
774 SizeType number_of_entries = rParameters[0].size();
776 <<
"Control points need to be provided in following structure: [[x, y, z, weight]] or [id, [x, y, z, weight]]"
777 <<
"Size of inner vector incorrect!"
780 for (
IndexType cp_idx = 0; cp_idx < rParameters.size(); cp_idx++)
782 control_point_weights[cp_idx] = rParameters[cp_idx][number_of_entries - 1][3].GetDouble();
785 return control_point_weights;
789 static void ReadControlPointVector(
790 PointerVector<Node>& rControlPoints,
791 const Parameters rParameters,
792 ModelPart& rModelPart,
796 <<
"\"control_points\" section needs to be an array." << std::endl;
799 <<
"Reading " << rParameters.size() <<
" control points of type Node." << std::endl;
801 for (
IndexType cp_idx = 0; cp_idx < rParameters.size(); cp_idx++)
803 rControlPoints.push_back(ReadAndCreateNode(rParameters[cp_idx], rModelPart));
808 static void ReadControlPointVector(
809 PointerVector<Point>& rControlPoints,
810 const Parameters rParameters,
811 ModelPart& rModelPart,
815 <<
"\"control_points\" section needs to be an array." << std::endl;
818 <<
"Reading " << rParameters.size() <<
" control points of type Point." << std::endl;
820 for (
IndexType cp_idx = 0; cp_idx < rParameters.size(); cp_idx++)
822 rControlPoints.push_back(ReadPoint(rParameters[cp_idx]));
834 static Node::Pointer ReadAndCreateNode(
835 const Parameters rParameters,
836 ModelPart& rModelPart,
839 SizeType number_of_entries = rParameters.size();
841 <<
"Control points as Node need to be provided in following structure: [id, [x, y, z, weight]]"
845 Vector cp = rParameters[1].GetVector();
847 return rModelPart.CreateNewNode(
id, cp[0], cp[1], cp[2]);
854 static Point::Pointer ReadPoint(
855 const Parameters rParameters,
858 SizeType number_of_entries = rParameters.size();
860 <<
"Control points as Point need to be provided in following structure: "
861 <<
"[[x, y, z, weight]] or [id, [x, y, z, weight]]" << std::endl;
863 Vector cp = rParameters[number_of_entries - 1].GetVector();
865 return Kratos::make_shared<Point>(cp[0], cp[1], cp[2]);
873 template<
class TGeometry>
874 static void SetIdOrName(
875 const Parameters rParameters,
876 typename TGeometry::Pointer pGeometry)
878 if (rParameters.Has(
"brep_id")) {
879 pGeometry->SetId(rParameters[
"brep_id"].GetInt());
881 else if (rParameters.Has(
"brep_name")) {
882 pGeometry->SetId(rParameters[
"brep_name"].GetString());
887 static void SetIdOrName(
888 const Parameters rParameters,
891 if (rParameters.Has(
"brep_id")) {
892 pGeometry->SetId(rParameters[
"brep_id"].GetInt());
894 else if (rParameters.Has(
"brep_name")) {
895 pGeometry->SetId(rParameters[
"brep_name"].GetString());
900 static std::string GetIdOrName(
901 const Parameters rParameters)
903 if (rParameters.Has(
"brep_id")) {
904 return std::to_string(rParameters[
"brep_id"].GetInt());
906 else if (rParameters.Has(
"brep_name")) {
907 return rParameters[
"brep_name"].GetString();
910 return "no_id_assigned";
915 static bool HasIdOrName(
916 const Parameters rParameters)
918 return (rParameters.Has(
"brep_id") || rParameters.Has(
"brep_name"));
922 static typename GeometryType::Pointer GetGeometry(
923 const Parameters rParameters,
924 ModelPart& rModelPart)
926 if (rParameters.Has(
"brep_id")) {
927 return rModelPart.pGetGeometry(rParameters[
"brep_id"].GetInt());
930 return rModelPart.pGetGeometry(rParameters[
"brep_name"].GetString());
935 static Parameters ReadParamatersFile(
936 const std::string& rDataFileName,
940 const std::string data_file_name = (rDataFileName.compare(rDataFileName.size() - 9, 9,
".cad.json") != 0)
941 ? rDataFileName +
".cad.json"
944 std::ifstream infile(data_file_name);
946 << data_file_name <<
" cannot be found." << std::endl;
948 <<
"Reading file: \"" << data_file_name <<
"\"" << std::endl;
950 std::stringstream buffer;
951 buffer << infile.rdbuf();
953 return Parameters(buffer.str());
960 Parameters mCadJsonParameters;
The BrepCurve acts as topology for curves. Those can be enclosed by a certain set of points.
Definition: brep_curve.h:37
The BrepCurveOnSurface acts as topology for curves on surfaces.
Definition: brep_curve_on_surface.h:44
The BrepSurface acts as topology for faces. Those can be enclosed by a certain set of brep face curve...
Definition: brep_surface.h:45
The CouplingGeometry connects two or more geometries of different types and entities.
Definition: coupling_geometry.h:41
std::vector< GeometryPointer > GeometryPointerVector
Definition: coupling_geometry.h:52
Geometry base class.
Definition: geometry.h:71
IO provides different implementation of input output procedures which can be used to read and write w...
Definition: io.h:58
std::size_t SizeType
Definition: io.h:97
Definition: amatrix_interface.h:41
This class aims to manage meshes for multi-physics simulations.
Definition: model_part.h:77
Definition: nurbs_curve_geometry.h:33
Definition: nurbs_surface_geometry.h:38
This class provides to Kratos a data structure for I/O based on the standard of JSON.
Definition: kratos_parameters.h:59
bool Has(const std::string &rEntry) const
This method checks if the Parameter contains a certain entry.
Definition: kratos_parameters.cpp:520
Definition: point_on_geometry.h:36
PointerVector is a container like stl vector but using a vector to store pointers to its data.
Definition: pointer_vector.h:72
#define KRATOS_ERROR
Definition: exception.h:161
#define KRATOS_ERROR_IF_NOT(conditional)
Definition: exception.h:163
#define KRATOS_ERROR_IF(conditional)
Definition: exception.h:162
#define KRATOS_INFO_IF(label, conditional)
Definition: logger.h:251
static int EchoLevel
Definition: co_sim_EMPIRE_API.h:42
bool Has(const std::string &ModelerName)
Checks if the modeler is registered.
Definition: modeler_factory.cpp:24
REF: G. R. Cowper, GAUSSIAN QUADRATURE FORMULAS FOR TRIANGLES.
Definition: mesh_condition.cpp:21
KratosZeroVector< double > ZeroVector
Definition: amatrix_interface.h:561
Internals::Matrix< double, AMatrix::dynamic, 1 > Vector
Definition: amatrix_interface.h:472
std::size_t SizeType
The definition of the size type.
Definition: mortar_classes.h:43
q
Definition: generate_convection_diffusion_explicit_element.py:109
p
Definition: sensitivityMatrix.py:52
integer i
Definition: TensorModule.f:17