diff --git a/index.html b/index.html index 3054ef3c1..9c37d3930 100644 --- a/index.html +++ b/index.html @@ -199,7 +199,7 @@

Derived Types

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/interface/elemconn_c0.html b/interface/elemconn_c0.html index 2bc69db99..cde7695ad 100644 --- a/interface/elemconn_c0.html +++ b/interface/elemconn_c0.html @@ -327,9 +327,9 @@

Called by

proc~get_elem_xc - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_volume::bezier_volume%get_elem_Xc @@ -357,9 +357,9 @@

Called by

proc~get_elem_xc~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xc + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc @@ -372,24 +372,24 @@

Called by

proc~get_elem_xc~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 - - + + proc~get_elem_xc~5 - + -forcad_bezier_volume::bezier_volume%get_elem_Xc +forcad_bezier_surface::bezier_surface%get_elem_Xc @@ -417,9 +417,9 @@

Called by

proc~get_elem_xg - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + + +forcad_bezier_volume::bezier_volume%get_elem_Xg @@ -447,24 +447,24 @@

Called by

proc~get_elem_xg~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xg + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 - - + + proc~get_elem_xg~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg @@ -477,9 +477,9 @@

Called by

proc~get_elem_xg~5 - + -forcad_bezier_volume::bezier_volume%get_elem_Xg +forcad_bezier_surface::bezier_surface%get_elem_Xg @@ -507,17 +507,17 @@

Called by

proc~export_xc - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc - - + + @@ -537,39 +537,39 @@

Called by

proc~export_xc~3 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + proc~export_xc~4 - - -forcad_bezier_surface::bezier_surface%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + proc~export_xc~5 - + -forcad_bezier_volume::bezier_volume%export_Xc +forcad_bezier_surface::bezier_surface%export_Xc @@ -597,17 +597,17 @@

Called by

proc~export_xg - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg - - + + @@ -627,39 +627,39 @@

Called by

proc~export_xg~3 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + proc~export_xg~4 - - -forcad_bezier_surface::bezier_surface%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + proc~export_xg~5 - + -forcad_bezier_volume::bezier_volume%export_Xg +forcad_bezier_surface::bezier_surface%export_Xg @@ -688,64 +688,64 @@

Called by

program~example_bezier_curve - -example_bezier_curve + +example_bezier_curve - - -program~example_bezier_curve->proc~export_xc~3 - - + + +program~example_bezier_curve->proc~export_xc~4 + + - - -program~example_bezier_curve->proc~export_xg~3 - - + + +program~example_bezier_curve->proc~export_xg~4 + + program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~export_xc~4 - - + + +program~example_bezier_surface->proc~export_xc~5 + + - - -program~example_bezier_surface->proc~export_xg~4 - - + + +program~example_bezier_surface->proc~export_xg~5 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~export_xc~5 - - + + +program~example_bezier_volume->proc~export_xc + + - - -program~example_bezier_volume->proc~export_xg~5 - - + + +program~example_bezier_volume->proc~export_xg + + @@ -793,22 +793,22 @@

Called by

program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc - - + + +program~example_nurbs_volume->proc~export_xc~3 + + - - -program~example_nurbs_volume->proc~export_xg - - + + +program~example_nurbs_volume->proc~export_xg~3 + + @@ -940,7 +940,7 @@

Arguments

- + integer, intent(in) @@ -1197,7 +1197,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/interface/ndgrid.html b/interface/ndgrid.html index ac7f135b6..ee4c83626 100644 --- a/interface/ndgrid.html +++ b/interface/ndgrid.html @@ -311,9 +311,9 @@

Called by

proc~create - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_volume::bezier_volume%create @@ -338,27 +338,27 @@

Called by

- + -proc~create~4 - - -forcad_bezier_surface::bezier_surface%create +proc~create~3 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create~4->interface~ndgrid - - +proc~create~3->interface~ndgrid + + proc~create~5 - + -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create @@ -372,31 +372,31 @@

Called by

program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~4 - - + + +program~example_bezier_surface->proc~create~5 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create~5 - - + + +program~example_bezier_volume->proc~create + + @@ -417,16 +417,16 @@

Called by

program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create - - + + +program~example_nurbs_volume->proc~create~3 + + @@ -569,7 +569,7 @@

Arguments

- + real(kind=rk), intent(out), @@ -658,7 +658,7 @@

Arguments

- + real(kind=rk), intent(out), @@ -692,7 +692,7 @@

Arguments

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/lists/files.html b/lists/files.html index 6a38faa92..ce5589472 100644 --- a/lists/files.html +++ b/lists/files.html @@ -443,7 +443,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/lists/modules.html b/lists/modules.html index a69ab2ee9..a58b05177 100644 --- a/lists/modules.html +++ b/lists/modules.html @@ -451,7 +451,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/lists/procedures.html b/lists/procedures.html index aa0c1cec1..59aa3f77d 100644 --- a/lists/procedures.html +++ b/lists/procedures.html @@ -115,7 +115,7 @@

Procedures

create - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -127,19 +127,19 @@

Procedures

create - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Generate geometry points of the Bezier curve.

+ create - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Generate geometry points of the Bezier curve.

create - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -163,7 +163,7 @@

Procedures

export_Xc - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -175,19 +175,19 @@

Procedures

export_Xc - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Export control points to a VTK file.

+ export_Xc - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Export control points to a VTK file.

export_Xc - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -199,7 +199,7 @@

Procedures

export_Xg - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -211,19 +211,19 @@

Procedures

export_Xg - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Export geometry points to a VTK file.

+ export_Xg - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Export geometry points to a VTK file.

export_Xg - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -235,7 +235,7 @@

Procedures

finalize - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -247,19 +247,19 @@

Procedures

finalize - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Finalize the Bezier curve object by deallocating memory.

+ finalize - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Finalize the Bezier curve object by deallocating memory.

finalize - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -277,37 +277,37 @@

Procedures

generate_Xc - example_nurbs_surface + example_nurbs_volume Function generate_Xc - example_bezier_curve + example_bezier_volume Function generate_Xc - example_nurbs_volume + example_bezier_curve Function generate_Xc - example_bezier_volume + example_nurbs_surface Function get_continuity - forcad_nurbs_volume + forcad_nurbs_surface Function get_continuity - forcad_nurbs_surface + forcad_nurbs_volume Function @@ -319,7 +319,7 @@

Procedures

get_elem_Xc - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -331,19 +331,19 @@

Procedures

get_elem_Xc - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Generate connectivity for control points.

+ get_elem_Xc - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Generate connectivity for control points.

get_elem_Xc - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -355,7 +355,7 @@

Procedures

get_elem_Xg - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -367,19 +367,19 @@

Procedures

get_elem_Xg - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Generate connectivity for geometry points.

+ get_elem_Xg - forcad_bezier_surface + forcad_bezier_curve Subroutine - +

Generate connectivity for geometry points.

get_elem_Xg - forcad_bezier_volume + forcad_bezier_surface Subroutine @@ -391,13 +391,13 @@

Procedures

get_knot - forcad_nurbs_volume + forcad_nurbs_surface Function get_knot - forcad_nurbs_surface + forcad_nurbs_volume Function @@ -409,13 +409,13 @@

Procedures

get_multiplicity - forcad_nurbs_volume + forcad_nurbs_surface Function get_multiplicity - forcad_nurbs_surface + forcad_nurbs_volume Function @@ -427,7 +427,7 @@

Procedures

get_nc - forcad_nurbs_volume + forcad_bezier_volume Function @@ -439,19 +439,19 @@

Procedures

get_nc - forcad_bezier_curve + forcad_nurbs_volume Function get_nc - forcad_bezier_surface + forcad_bezier_curve Function get_nc - forcad_bezier_volume + forcad_bezier_surface Function @@ -463,7 +463,7 @@

Procedures

get_ng - forcad_nurbs_volume + forcad_bezier_volume Function @@ -475,19 +475,19 @@

Procedures

get_ng - forcad_bezier_curve + forcad_nurbs_volume Function get_ng - forcad_bezier_surface + forcad_bezier_curve Function get_ng - forcad_bezier_volume + forcad_bezier_surface Function @@ -499,7 +499,7 @@

Procedures

get_order - forcad_nurbs_volume + forcad_bezier_volume Function @@ -511,19 +511,19 @@

Procedures

get_order - forcad_bezier_curve + forcad_nurbs_volume Function get_order - forcad_bezier_surface + forcad_bezier_curve Function get_order - forcad_bezier_volume + forcad_bezier_surface Function @@ -535,7 +535,7 @@

Procedures

get_Wc - forcad_nurbs_volume + forcad_bezier_volume Function @@ -547,19 +547,19 @@

Procedures

get_Wc - forcad_bezier_curve + forcad_nurbs_volume Function get_Wc - forcad_bezier_surface + forcad_bezier_curve Function get_Wc - forcad_bezier_volume + forcad_bezier_surface Function @@ -571,7 +571,7 @@

Procedures

get_Xc - forcad_nurbs_volume + forcad_bezier_volume Function @@ -583,19 +583,19 @@

Procedures

get_Xc - forcad_bezier_curve + forcad_nurbs_volume Function get_Xc - forcad_bezier_surface + forcad_bezier_curve Function get_Xc - forcad_bezier_volume + forcad_bezier_surface Function @@ -607,7 +607,7 @@

Procedures

get_Xg - forcad_nurbs_volume + forcad_bezier_volume Function @@ -619,19 +619,19 @@

Procedures

get_Xg - forcad_bezier_curve + forcad_nurbs_volume Function get_Xg - forcad_bezier_surface + forcad_bezier_curve Function get_Xg - forcad_bezier_volume + forcad_bezier_surface Function @@ -643,7 +643,7 @@

Procedures

get_Xt - forcad_nurbs_volume + forcad_bezier_volume Function @@ -655,19 +655,19 @@

Procedures

get_Xt - forcad_bezier_curve + forcad_nurbs_volume Function get_Xt - forcad_bezier_surface + forcad_bezier_curve Function get_Xt - forcad_bezier_volume + forcad_bezier_surface Function @@ -685,7 +685,7 @@

Procedures

modify_Wc - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -697,21 +697,21 @@

Procedures

modify_Wc - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Modify weight of a control point given its index.

+ modify_Wc - forcad_bezier_surface + forcad_bezier_curve Subroutine

Modify weight of a control point given its index.

modify_Wc - forcad_bezier_volume + forcad_bezier_surface Subroutine - +

Modify weight of a control point given its index.

modify_Wc @@ -721,7 +721,7 @@

Procedures

modify_Xc - forcad_nurbs_volume + forcad_bezier_volume Subroutine @@ -733,21 +733,21 @@

Procedures

modify_Xc - forcad_bezier_curve + forcad_nurbs_volume Subroutine -

Modify coordinate of a control point given its index and direction.

+ modify_Xc - forcad_bezier_surface + forcad_bezier_curve Subroutine

Modify coordinate of a control point given its index and direction.

modify_Xc - forcad_bezier_volume + forcad_bezier_surface Subroutine - +

Modify coordinate of a control point given its index and direction.

modify_Xc @@ -781,33 +781,33 @@

Procedures

set - forcad_bezier_curve + forcad_bezier_volume Subroutine

Set control points and weights for the Bezier curve object.

set - forcad_bezier_surface + forcad_bezier_curve Subroutine

Set control points and weights for the Bezier curve object.

set - forcad_bezier_volume + forcad_bezier_surface Subroutine

Set control points and weights for the Bezier curve object.

set1 - forcad_nurbs_volume + forcad_nurbs_surface Subroutine -

Set control points and weights for the NURBS curve object.

+

Set control points and weights for the NURBS surface object.

set1 - forcad_nurbs_surface + forcad_nurbs_volume Subroutine -

Set control points and weights for the NURBS surface object.

+

Set control points and weights for the NURBS curve object.

set1 @@ -817,15 +817,15 @@

Procedures

set2 - forcad_nurbs_volume + forcad_nurbs_surface Subroutine -

Set control points and weights for the NURBS curve object.

+

Set control points and weights for the NURBS surface object.

set2 - forcad_nurbs_surface + forcad_nurbs_volume Subroutine -

Set control points and weights for the NURBS surface object.

+

Set control points and weights for the NURBS curve object.

set2 @@ -840,17 +840,17 @@

Procedures

- - + + call~~graph~~CallGraph - + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 @@ -858,53 +858,53 @@

Procedures

proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + interface~ndgrid - -forcad_utils::ndgrid + +forcad_utils::ndgrid @@ -912,116 +912,116 @@

Procedures

proc~ndgrid2 - -forcad_utils::ndgrid2 + +forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 - - + + proc~ndgrid3 - -forcad_utils::ndgrid3 + +forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 - - + + - + -none~set - - -forcad_nurbs_volume::nurbs_volume%set +none~set~2 + + +forcad_nurbs_surface::nurbs_surface%set proc~set1 - - -forcad_nurbs_volume::nurbs_volume%set1 + + +forcad_nurbs_surface::nurbs_surface%set1 - + -none~set->proc~set1 - - +none~set~2->proc~set1 + + proc~set2 - - -forcad_nurbs_volume::nurbs_volume%set2 + + +forcad_nurbs_surface::nurbs_surface%set2 - + -none~set->proc~set2 - - +none~set~2->proc~set2 + + - + -none~set~2 - - -forcad_nurbs_surface::nurbs_surface%set +none~set~3 + + +forcad_nurbs_volume::nurbs_volume%set proc~set1~2 - - -forcad_nurbs_surface::nurbs_surface%set1 + + +forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~2->proc~set1~2 - - +none~set~3->proc~set1~2 + + proc~set2~2 - - -forcad_nurbs_surface::nurbs_surface%set2 + + +forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~2->proc~set2~2 - - +none~set~3->proc~set2~2 + + none~set~6 - -forcad_nurbs_curve::nurbs_curve%set + +forcad_nurbs_curve::nurbs_curve%set @@ -1029,38 +1029,38 @@

Procedures

proc~set1~3 - -forcad_nurbs_curve::nurbs_curve%set1 + +forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 - - + + proc~set2~3 - -forcad_nurbs_curve::nurbs_curve%set2 + +forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 - - + + proc~basis_bernstein - -forcad_utils::basis_bernstein + +forcad_utils::basis_bernstein @@ -1068,8 +1068,8 @@

Procedures

proc~basis_bspline - -forcad_utils::basis_bspline + +forcad_utils::basis_bspline @@ -1077,8 +1077,8 @@

Procedures

proc~compute_knot_vector - -forcad_utils::compute_knot_vector + +forcad_utils::compute_knot_vector @@ -1086,233 +1086,233 @@

Procedures

proc~repelem - -forcad_utils::repelem + +forcad_utils::repelem proc~compute_knot_vector->proc~repelem - - + + proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity proc~create - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_volume::bezier_volume%create proc~create->interface~ndgrid - - + + - + -proc~create->proc~basis_bspline - - +proc~create->proc~basis_bernstein + + proc~kron - -forcad_utils::kron + +forcad_utils::kron proc~create->proc~kron - - + + proc~create~2 - -forcad_nurbs_surface::nurbs_surface%create + +forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid - - + + proc~create~2->proc~basis_bspline - - + + proc~create~2->proc~kron - - + + proc~create~3 - - -forcad_bezier_curve::bezier_curve%create + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create~3->proc~basis_bernstein - - +proc~create~3->interface~ndgrid + + + + + +proc~create~3->proc~basis_bspline + + + + + +proc~create~3->proc~kron + + proc~create~4 - - -forcad_bezier_surface::bezier_surface%create + + +forcad_bezier_curve::bezier_curve%create - - -proc~create~4->interface~ndgrid - - - - -proc~create~4->proc~basis_bernstein - - - - -proc~create~4->proc~kron - - +proc~create~4->proc~basis_bernstein + + proc~create~5 - - -forcad_bezier_volume::bezier_volume%create + + +forcad_bezier_surface::bezier_surface%create proc~create~5->interface~ndgrid - - + + proc~create~5->proc~basis_bernstein - - + + proc~create~5->proc~kron - - + + proc~create~6 - -forcad_nurbs_curve::nurbs_curve%create + +forcad_nurbs_curve::nurbs_curve%create proc~create~6->proc~basis_bspline - - + + proc~elevate_degree - -forcad_bezier_curve::bezier_curve%elevate_degree + +forcad_bezier_curve::bezier_curve%elevate_degree - + -proc~elevate_degree->proc~create~3 - - +proc~elevate_degree->proc~create~4 + + - - -proc~set - - -forcad_bezier_curve::bezier_curve%set + + +proc~set~2 + + +forcad_bezier_curve::bezier_curve%set - + -proc~elevate_degree->proc~set - - +proc~elevate_degree->proc~set~2 + + proc~export_xc - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_volume::bezier_volume%export_Xc proc~get_elem_xc - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc - - + + proc~export_xc~2 - -forcad_nurbs_surface::nurbs_surface%export_Xc + +forcad_nurbs_surface::nurbs_surface%export_Xc @@ -1320,95 +1320,95 @@

Procedures

proc~get_elem_xc~2 - -forcad_nurbs_surface::nurbs_surface%get_elem_Xc + +forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 - - + + proc~export_xc~3 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xc + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + proc~export_xc~4 - - -forcad_bezier_surface::bezier_surface%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + proc~export_xc~5 - - -forcad_bezier_volume::bezier_volume%export_Xc + + +forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~5 - - -forcad_bezier_volume::bezier_volume%get_elem_Xc + + +forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 - - + + proc~export_xc~6 - -forcad_nurbs_curve::nurbs_curve%export_Xc + +forcad_nurbs_curve::nurbs_curve%export_Xc @@ -1416,47 +1416,47 @@

Procedures

proc~get_elem_xc~6 - -forcad_nurbs_curve::nurbs_curve%get_elem_Xc + +forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 - - + + proc~export_xg - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_volume::bezier_volume%export_Xg proc~get_elem_xg - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + + +forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg - - + + proc~export_xg~2 - -forcad_nurbs_surface::nurbs_surface%export_Xg + +forcad_nurbs_surface::nurbs_surface%export_Xg @@ -1464,95 +1464,95 @@

Procedures

proc~get_elem_xg~2 - -forcad_nurbs_surface::nurbs_surface%get_elem_Xg + +forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 - - + + proc~export_xg~3 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xg + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + proc~export_xg~4 - - -forcad_bezier_surface::bezier_surface%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + proc~export_xg~5 - - -forcad_bezier_volume::bezier_volume%export_Xg + + +forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~5 - - -forcad_bezier_volume::bezier_volume%get_elem_Xg + + +forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 - - + + proc~export_xg~6 - -forcad_nurbs_curve::nurbs_curve%export_Xg + +forcad_nurbs_curve::nurbs_curve%export_Xg @@ -1560,23 +1560,23 @@

Procedures

proc~get_elem_xg~6 - -forcad_nurbs_curve::nurbs_curve%get_elem_Xg + +forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 - - + + proc~finalize - - -forcad_nurbs_volume::nurbs_volume%finalize + + +forcad_bezier_volume::bezier_volume%finalize @@ -1584,35 +1584,35 @@

Procedures

proc~finalize~2 - -forcad_nurbs_surface::nurbs_surface%finalize + +forcad_nurbs_surface::nurbs_surface%finalize proc~finalize~3 - - -forcad_bezier_curve::bezier_curve%finalize + + +forcad_nurbs_volume::nurbs_volume%finalize proc~finalize~4 - - -forcad_bezier_surface::bezier_surface%finalize + + +forcad_bezier_curve::bezier_curve%finalize proc~finalize~5 - - -forcad_bezier_volume::bezier_volume%finalize + + +forcad_bezier_surface::bezier_surface%finalize @@ -1620,8 +1620,8 @@

Procedures

proc~finalize~6 - -forcad_nurbs_curve::nurbs_curve%finalize + +forcad_nurbs_curve::nurbs_curve%finalize @@ -1629,179 +1629,179 @@

Procedures

proc~generate_xc - -example_bezier_surface::generate_Xc + +example_bezier_surface::generate_Xc proc~generate_xc~2 - - -example_nurbs_surface::generate_Xc + + +example_nurbs_volume::generate_Xc proc~generate_xc~3 - - -example_bezier_curve::generate_Xc + + +example_bezier_volume::generate_Xc proc~generate_xc~4 - - -example_nurbs_volume::generate_Xc + + +example_bezier_curve::generate_Xc proc~generate_xc~5 - - -example_bezier_volume::generate_Xc + + +example_nurbs_surface::generate_Xc proc~get_continuity - - -forcad_nurbs_volume::nurbs_volume%get_continuity + + +forcad_nurbs_surface::nurbs_surface%get_continuity proc~get_continuity->proc~compute_multiplicity - - + + proc~get_continuity~2 - - -forcad_nurbs_surface::nurbs_surface%get_continuity + + +forcad_nurbs_volume::nurbs_volume%get_continuity proc~get_continuity~2->proc~compute_multiplicity - - + + proc~get_continuity~3 - -forcad_nurbs_curve::nurbs_curve%get_continuity + +forcad_nurbs_curve::nurbs_curve%get_continuity proc~get_continuity~3->proc~compute_multiplicity - - + + proc~get_elem_xc->interface~elemconn_c0 - - + + proc~get_elem_xc~2->interface~elemconn_c0 - - + + proc~get_elem_xc~3->interface~elemconn_c0 - - + + proc~get_elem_xc~4->interface~elemconn_c0 - - + + proc~get_elem_xc~5->interface~elemconn_c0 - - + + proc~get_elem_xc~6->interface~elemconn_c0 - - + + proc~get_elem_xg->interface~elemconn_c0 - - + + proc~get_elem_xg~2->interface~elemconn_c0 - - + + proc~get_elem_xg~3->interface~elemconn_c0 - - + + proc~get_elem_xg~4->interface~elemconn_c0 - - + + proc~get_elem_xg~5->interface~elemconn_c0 - - + + proc~get_elem_xg~6->interface~elemconn_c0 - - + + proc~get_knot - - -forcad_nurbs_volume::nurbs_volume%get_knot + + +forcad_nurbs_surface::nurbs_surface%get_knot proc~get_knot~2 - - -forcad_nurbs_surface::nurbs_surface%get_knot + + +forcad_nurbs_volume::nurbs_volume%get_knot @@ -1809,110 +1809,110 @@

Procedures

proc~get_knot~3 - -forcad_nurbs_curve::nurbs_curve%get_knot + +forcad_nurbs_curve::nurbs_curve%get_knot proc~get_multiplicity - - -forcad_nurbs_volume::nurbs_volume%get_multiplicity + + +forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_multiplicity->proc~compute_multiplicity - - + + proc~get_multiplicity~2 - - -forcad_nurbs_surface::nurbs_surface%get_multiplicity + + +forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity - - + + proc~get_multiplicity~3 - -forcad_nurbs_curve::nurbs_curve%get_multiplicity + +forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity - - + + proc~get_nc - - -forcad_nurbs_volume::nurbs_volume%get_nc + + +forcad_bezier_volume::bezier_volume%get_nc - - -proc~get_nc->proc~compute_multiplicity - - - proc~get_nc~2 - -forcad_nurbs_surface::nurbs_surface%get_nc + +forcad_nurbs_surface::nurbs_surface%get_nc - + proc~get_nc~2->proc~compute_multiplicity - - + + proc~get_nc~3 - - -forcad_bezier_curve::bezier_curve%get_nc + + +forcad_nurbs_volume::nurbs_volume%get_nc + + +proc~get_nc~3->proc~compute_multiplicity + + + proc~get_nc~4 - - -forcad_bezier_surface::bezier_surface%get_nc + + +forcad_bezier_curve::bezier_curve%get_nc proc~get_nc~5 - - -forcad_bezier_volume::bezier_volume%get_nc + + +forcad_bezier_surface::bezier_surface%get_nc @@ -1920,23 +1920,23 @@

Procedures

proc~get_nc~6 - -forcad_nurbs_curve::nurbs_curve%get_nc + +forcad_nurbs_curve::nurbs_curve%get_nc proc~get_nc~6->proc~compute_multiplicity - - + + proc~get_ng - - -forcad_nurbs_volume::nurbs_volume%get_ng + + +forcad_bezier_volume::bezier_volume%get_ng @@ -1944,35 +1944,35 @@

Procedures

proc~get_ng~2 - -forcad_nurbs_surface::nurbs_surface%get_ng + +forcad_nurbs_surface::nurbs_surface%get_ng proc~get_ng~3 - - -forcad_bezier_curve::bezier_curve%get_ng + + +forcad_nurbs_volume::nurbs_volume%get_ng proc~get_ng~4 - - -forcad_bezier_surface::bezier_surface%get_ng + + +forcad_bezier_curve::bezier_curve%get_ng proc~get_ng~5 - - -forcad_bezier_volume::bezier_volume%get_ng + + +forcad_bezier_surface::bezier_surface%get_ng @@ -1980,65 +1980,65 @@

Procedures

proc~get_ng~6 - -forcad_nurbs_curve::nurbs_curve%get_ng + +forcad_nurbs_curve::nurbs_curve%get_ng proc~get_order - - -forcad_nurbs_volume::nurbs_volume%get_order + + +forcad_bezier_volume::bezier_volume%get_order - - -proc~get_order->proc~get_multiplicity - - - proc~get_order~2 - -forcad_nurbs_surface::nurbs_surface%get_order + +forcad_nurbs_surface::nurbs_surface%get_order - - -proc~get_order~2->proc~get_multiplicity~2 - - + + +proc~get_order~2->proc~get_multiplicity + + proc~get_order~3 - - -forcad_bezier_curve::bezier_curve%get_order + + +forcad_nurbs_volume::nurbs_volume%get_order + + +proc~get_order~3->proc~get_multiplicity~2 + + + proc~get_order~4 - - -forcad_bezier_surface::bezier_surface%get_order + + +forcad_bezier_curve::bezier_curve%get_order proc~get_order~5 - - -forcad_bezier_volume::bezier_volume%get_order + + +forcad_bezier_surface::bezier_surface%get_order @@ -2046,23 +2046,23 @@

Procedures

proc~get_order~6 - -forcad_nurbs_curve::nurbs_curve%get_order + +forcad_nurbs_curve::nurbs_curve%get_order proc~get_order~6->proc~get_multiplicity~3 - - + + proc~get_wc - - -forcad_nurbs_volume::nurbs_volume%get_Wc + + +forcad_bezier_volume::bezier_volume%get_Wc @@ -2070,35 +2070,35 @@

Procedures

proc~get_wc~2 - -forcad_nurbs_surface::nurbs_surface%get_Wc + +forcad_nurbs_surface::nurbs_surface%get_Wc proc~get_wc~3 - - -forcad_bezier_curve::bezier_curve%get_Wc + + +forcad_nurbs_volume::nurbs_volume%get_Wc proc~get_wc~4 - - -forcad_bezier_surface::bezier_surface%get_Wc + + +forcad_bezier_curve::bezier_curve%get_Wc proc~get_wc~5 - - -forcad_bezier_volume::bezier_volume%get_Wc + + +forcad_bezier_surface::bezier_surface%get_Wc @@ -2106,17 +2106,17 @@

Procedures

proc~get_wc~6 - -forcad_nurbs_curve::nurbs_curve%get_Wc + +forcad_nurbs_curve::nurbs_curve%get_Wc proc~get_xc - - -forcad_nurbs_volume::nurbs_volume%get_Xc + + +forcad_bezier_volume::bezier_volume%get_Xc @@ -2124,35 +2124,35 @@

Procedures

proc~get_xc~2 - -forcad_nurbs_surface::nurbs_surface%get_Xc + +forcad_nurbs_surface::nurbs_surface%get_Xc proc~get_xc~3 - - -forcad_bezier_curve::bezier_curve%get_Xc + + +forcad_nurbs_volume::nurbs_volume%get_Xc proc~get_xc~4 - - -forcad_bezier_surface::bezier_surface%get_Xc + + +forcad_bezier_curve::bezier_curve%get_Xc proc~get_xc~5 - - -forcad_bezier_volume::bezier_volume%get_Xc + + +forcad_bezier_surface::bezier_surface%get_Xc @@ -2160,17 +2160,17 @@

Procedures

proc~get_xc~6 - -forcad_nurbs_curve::nurbs_curve%get_Xc + +forcad_nurbs_curve::nurbs_curve%get_Xc proc~get_xg - - -forcad_nurbs_volume::nurbs_volume%get_Xg + + +forcad_bezier_volume::bezier_volume%get_Xg @@ -2178,35 +2178,35 @@

Procedures

proc~get_xg~2 - -forcad_nurbs_surface::nurbs_surface%get_Xg + +forcad_nurbs_surface::nurbs_surface%get_Xg proc~get_xg~3 - - -forcad_bezier_curve::bezier_curve%get_Xg + + +forcad_nurbs_volume::nurbs_volume%get_Xg proc~get_xg~4 - - -forcad_bezier_surface::bezier_surface%get_Xg + + +forcad_bezier_curve::bezier_curve%get_Xg proc~get_xg~5 - - -forcad_bezier_volume::bezier_volume%get_Xg + + +forcad_bezier_surface::bezier_surface%get_Xg @@ -2214,17 +2214,17 @@

Procedures

proc~get_xg~6 - -forcad_nurbs_curve::nurbs_curve%get_Xg + +forcad_nurbs_curve::nurbs_curve%get_Xg proc~get_xt - - -forcad_nurbs_volume::nurbs_volume%get_Xt + + +forcad_bezier_volume::get_Xt @@ -2232,35 +2232,35 @@

Procedures

proc~get_xt~2 - -forcad_nurbs_surface::nurbs_surface%get_Xt + +forcad_nurbs_surface::nurbs_surface%get_Xt proc~get_xt~3 - - -forcad_bezier_curve::bezier_curve%get_Xt + + +forcad_nurbs_volume::nurbs_volume%get_Xt proc~get_xt~4 - - -forcad_bezier_surface::bezier_surface%get_Xt + + +forcad_bezier_curve::bezier_curve%get_Xt proc~get_xt~5 - - -forcad_bezier_volume::get_Xt + + +forcad_bezier_surface::bezier_surface%get_Xt @@ -2268,532 +2268,532 @@

Procedures

proc~get_xt~6 - -forcad_nurbs_curve::nurbs_curve%get_Xt + +forcad_nurbs_curve::nurbs_curve%get_Xt proc~modify_wc - - -forcad_nurbs_volume::nurbs_volume%modify_Wc + + +forcad_bezier_volume::bezier_volume%modify_Wc + + + + + +proc~set + + +forcad_bezier_volume::bezier_volume%set - + -proc~modify_wc->none~set - - +proc~modify_wc->proc~set + + proc~modify_wc~2 - -forcad_nurbs_surface::nurbs_surface%modify_Wc + +forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 - - + + proc~modify_wc~3 - - -forcad_bezier_curve::bezier_curve%modify_Wc + + +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~3->proc~set - - +proc~modify_wc~3->none~set~3 + + proc~modify_wc~4 - - -forcad_bezier_surface::bezier_surface%modify_Wc - - - - - -proc~set~2 - - -forcad_bezier_surface::bezier_surface%set + + +forcad_bezier_curve::bezier_curve%modify_Wc proc~modify_wc~4->proc~set~2 - - + + proc~modify_wc~5 - - -forcad_bezier_volume::bezier_volume%modify_Wc + + +forcad_bezier_surface::bezier_surface%modify_Wc proc~set~3 - - -forcad_bezier_volume::bezier_volume%set + + +forcad_bezier_surface::bezier_surface%set proc~modify_wc~5->proc~set~3 - - + + proc~modify_wc~6 - -forcad_nurbs_curve::nurbs_curve%modify_Wc + +forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 - - + + proc~modify_xc - - -forcad_nurbs_volume::nurbs_volume%modify_Xc + + +forcad_bezier_volume::bezier_volume%modify_Xc - + -proc~modify_xc->none~set - - +proc~modify_xc->proc~set + + proc~modify_xc~2 - -forcad_nurbs_surface::nurbs_surface%modify_Xc + +forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 - - + + proc~modify_xc~3 - - -forcad_bezier_curve::bezier_curve%modify_Xc + + +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~3->proc~set - - +proc~modify_xc~3->none~set~3 + + proc~modify_xc~4 - - -forcad_bezier_surface::bezier_surface%modify_Xc + + +forcad_bezier_curve::bezier_curve%modify_Xc proc~modify_xc~4->proc~set~2 - - + + proc~modify_xc~5 - - -forcad_bezier_volume::bezier_volume%modify_Xc + + +forcad_bezier_surface::bezier_surface%modify_Xc proc~modify_xc~5->proc~set~3 - - + + proc~modify_xc~6 - -forcad_nurbs_curve::nurbs_curve%modify_Xc + +forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 - - + + - + -proc~set1->proc~get_nc - - +proc~set1->proc~get_nc~2 + + - + -proc~set1->proc~get_order - - +proc~set1->proc~get_order~2 + + - + -proc~set1~2->proc~get_nc~2 - - +proc~set1~2->proc~get_nc~3 + + - + -proc~set1~2->proc~get_order~2 - - +proc~set1~2->proc~get_order~3 + + proc~set1~3->proc~get_order~6 - - + + proc~set2->proc~compute_knot_vector - - + + - + -proc~set2->proc~get_nc - - +proc~set2->proc~get_nc~2 + + proc~set2~2->proc~compute_knot_vector - - + + - + -proc~set2~2->proc~get_nc~2 - - +proc~set2~2->proc~get_nc~3 + + proc~set2~3->proc~compute_knot_vector - - + + program~example_bezier_curve - -example_bezier_curve + +example_bezier_curve - + -program~example_bezier_curve->proc~create~3 - - +program~example_bezier_curve->proc~create~4 + + - + -program~example_bezier_curve->proc~export_xc~3 - - +program~example_bezier_curve->proc~export_xc~4 + + - + -program~example_bezier_curve->proc~export_xg~3 - - +program~example_bezier_curve->proc~export_xg~4 + + - + -program~example_bezier_curve->proc~finalize~3 - - +program~example_bezier_curve->proc~finalize~4 + + - + -program~example_bezier_curve->proc~generate_xc~3 - - +program~example_bezier_curve->proc~generate_xc~4 + + - + -program~example_bezier_curve->proc~set - - +program~example_bezier_curve->proc~set~2 + + program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - + -program~example_bezier_surface->proc~create~4 - - +program~example_bezier_surface->proc~create~5 + + - + -program~example_bezier_surface->proc~export_xc~4 - - +program~example_bezier_surface->proc~export_xc~5 + + - + -program~example_bezier_surface->proc~export_xg~4 - - +program~example_bezier_surface->proc~export_xg~5 + + - + -program~example_bezier_surface->proc~finalize~4 - - +program~example_bezier_surface->proc~finalize~5 + + program~example_bezier_surface->proc~generate_xc - - + + - + -program~example_bezier_surface->proc~set~2 - - +program~example_bezier_surface->proc~set~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - + -program~example_bezier_volume->proc~create~5 - - +program~example_bezier_volume->proc~create + + - + -program~example_bezier_volume->proc~export_xc~5 - - +program~example_bezier_volume->proc~export_xc + + - + -program~example_bezier_volume->proc~export_xg~5 - - +program~example_bezier_volume->proc~export_xg + + - + -program~example_bezier_volume->proc~finalize~5 - - +program~example_bezier_volume->proc~finalize + + - + -program~example_bezier_volume->proc~generate_xc~5 - - +program~example_bezier_volume->proc~generate_xc~3 + + - + -program~example_bezier_volume->proc~set~3 - - +program~example_bezier_volume->proc~set + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve program~example_nurbs_curve->none~set~6 - - + + program~example_nurbs_curve->proc~create~6 - - + + program~example_nurbs_curve->proc~export_xc~6 - - + + program~example_nurbs_curve->proc~export_xg~6 - - + + program~example_nurbs_curve->proc~finalize~6 - - + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface program~example_nurbs_surface->none~set~2 - - + + program~example_nurbs_surface->proc~create~2 - - + + program~example_nurbs_surface->proc~export_xc~2 - - + + program~example_nurbs_surface->proc~export_xg~2 - - + + program~example_nurbs_surface->proc~finalize~2 - - + + - + -program~example_nurbs_surface->proc~generate_xc~2 - - +program~example_nurbs_surface->proc~generate_xc~5 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - + -program~example_nurbs_volume->none~set - - +program~example_nurbs_volume->none~set~3 + + - + -program~example_nurbs_volume->proc~create - - +program~example_nurbs_volume->proc~create~3 + + - + -program~example_nurbs_volume->proc~export_xc - - +program~example_nurbs_volume->proc~export_xc~3 + + - + -program~example_nurbs_volume->proc~export_xg - - +program~example_nurbs_volume->proc~export_xg~3 + + - + -program~example_nurbs_volume->proc~finalize - - +program~example_nurbs_volume->proc~finalize~3 + + - + -program~example_nurbs_volume->proc~generate_xc~4 - - +program~example_nurbs_volume->proc~generate_xc~2 + +
@@ -2894,7 +2894,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/lists/programs.html b/lists/programs.html index c9f8e04f4..1e81e57c3 100644 --- a/lists/programs.html +++ b/lists/programs.html @@ -125,7 +125,7 @@

Programs

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/lists/types.html b/lists/types.html index c4c83a6c1..725cba6ae 100644 --- a/lists/types.html +++ b/lists/types.html @@ -239,7 +239,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/module/forcad.html b/module/forcad.html index c397afd8a..370ebb554 100644 --- a/module/forcad.html +++ b/module/forcad.html @@ -144,13 +144,13 @@

Uses

@@ -144,7 +144,7 @@

private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3)

Type Bound

-

nurbs_volume

+

bezier_volume

Arguments

@@ -159,8 +159,8 @@

Arguments

@@ -564,7 +564,7 @@

Documentation generated by FORD - on 2024-03-30T00:59:12.067358

+ on 2024-03-30T01:06:29.265865


diff --git a/proc/create~3.html b/proc/create~3.html index 630848d19..db94b6eff 100644 --- a/proc/create~3.html +++ b/proc/create~3.html @@ -79,20 +79,20 @@

create
  • 37 statements + title=" 3.4% of total for procedures.">63 statements
  • - Source File + Source File
  • -

    private pure subroutine create(this, res, Xt) +

    private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3)

    -

    Generate geometry points of the Bezier curve.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(inout) @@ -277,91 +277,91 @@

    Calls

    - + proc~~create~~CallsGraph - + proc~create - -forcad_nurbs_volume::nurbs_volume%create + +forcad_bezier_volume::bezier_volume%create interface~ndgrid - -forcad_utils::ndgrid + +forcad_utils::ndgrid proc~create->interface~ndgrid - - + + - + -proc~basis_bspline - - -forcad_utils::basis_bspline +proc~basis_bernstein + + +forcad_utils::basis_bernstein - + -proc~create->proc~basis_bspline - - +proc~create->proc~basis_bernstein + + proc~kron - -forcad_utils::kron + +forcad_utils::kron proc~create->proc~kron - - + + proc~ndgrid2 - -forcad_utils::ndgrid2 + +forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 - - + + proc~ndgrid3 - -forcad_utils::ndgrid3 + +forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 - - + + @@ -457,31 +457,31 @@

    Called by

    - + proc~~create~~CalledByGraph - + proc~create - -forcad_nurbs_volume::nurbs_volume%create + +forcad_bezier_volume::bezier_volume%create - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~create - - +program~example_bezier_volume->proc~create + + @@ -594,7 +594,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/create~2.html b/proc/create~2.html index da6070b69..b7ef7d82c 100644 --- a/proc/create~2.html +++ b/proc/create~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(inout)
    @@ -160,8 +159,8 @@

    Arguments

    @@ -183,14 +182,44 @@

    Arguments

    - + + + + + + + + + + + + + + + + + @@ -198,7 +227,37 @@

    Arguments

    - + + + + + + + + + + + + + + + + + @@ -218,31 +277,91 @@

    Calls

    - - + + proc~~create~3~~CallsGraph - + proc~create~3 - -forcad_bezier_curve::bezier_curve%create + +forcad_nurbs_volume::nurbs_volume%create - + -proc~basis_bernstein - - -forcad_utils::basis_bernstein +interface~ndgrid + + +forcad_utils::ndgrid - + -proc~create~3->proc~basis_bernstein - - +proc~create~3->interface~ndgrid + + + + + +proc~basis_bspline + + +forcad_utils::basis_bspline + + + + + +proc~create~3->proc~basis_bspline + + + + + +proc~kron + + +forcad_utils::kron + + + + + +proc~create~3->proc~kron + + + + + +proc~ndgrid2 + + +forcad_utils::ndgrid2 + + + + + +interface~ndgrid->proc~ndgrid2 + + + + + +proc~ndgrid3 + + +forcad_utils::ndgrid3 + + + + + +interface~ndgrid->proc~ndgrid3 + + @@ -338,46 +457,31 @@

    Called by

    - - + + proc~~create~3~~CalledByGraph - + proc~create~3 - -forcad_bezier_curve::bezier_curve%create + +forcad_nurbs_volume::nurbs_volume%create - + -proc~elevate_degree - - -forcad_bezier_curve::bezier_curve%elevate_degree +program~example_nurbs_volume + + +example_nurbs_volume - + -proc~elevate_degree->proc~create~3 - - - - - -program~example_bezier_curve - - -example_bezier_curve - - - - - -program~example_bezier_curve->proc~create~3 - - +program~example_nurbs_volume->proc~create~3 + + @@ -490,7 +594,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/create~4.html b/proc/create~4.html index 7e6bd0b4a..1a78b3b2a 100644 --- a/proc/create~4.html +++ b/proc/create~4.html @@ -79,20 +79,20 @@

    create
  • 52 statements + title=" 2.0% of total for procedures.">37 statements
  • - Source File + Source File
  • @@ -131,12 +131,6 @@

    Contents

    -
    -

    Source Code

    -
    - create -
    -
    @@ -144,13 +138,14 @@

    Contents

    -

    private pure subroutine create(this, res1, res2, Xt1, Xt2) +

    private pure subroutine create(this, res, Xt)

    +

    Generate geometry points of the Bezier curve.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(inout) @@ -175,7 +174,7 @@

    Arguments

    - + integer, intent(in), ::resres1
    - + + integer, + intent(in),optional + + ::res2 + +
    + + integer, + intent(in),optional + + ::res3 + +
    + real(kind=rk), intent(in), ::Xt(:)Xt1(:) + +
    + + real(kind=rk), + intent(in),optional + + ::Xt2(:) + +
    + + real(kind=rk), + intent(in),optional + + ::Xt3(:)
    @@ -165,8 +160,8 @@

    Arguments

    - - - - - - - - @@ -203,14 +183,14 @@

    Arguments

    - + @@ -218,22 +198,7 @@

    Arguments

    - - - - - - - - - + @@ -253,91 +218,31 @@

    Calls

    - - + + proc~~create~4~~CallsGraph - + proc~create~4 - -forcad_bezier_surface::bezier_surface%create - - - -interface~ndgrid - - -forcad_utils::ndgrid - - - - - -proc~create~4->interface~ndgrid - - + +forcad_bezier_curve::bezier_curve%create - + proc~basis_bernstein - - -forcad_utils::basis_bernstein + + +forcad_utils::basis_bernstein - + proc~create~4->proc~basis_bernstein - - - - - -proc~kron - - -forcad_utils::kron - - - - - -proc~create~4->proc~kron - - - - - -proc~ndgrid2 - - -forcad_utils::ndgrid2 - - - - - -interface~ndgrid->proc~ndgrid2 - - - - - -proc~ndgrid3 - - -forcad_utils::ndgrid3 - - - - - -interface~ndgrid->proc~ndgrid3 - - + + @@ -433,31 +338,46 @@

    Called by

    - - + + proc~~create~4~~CalledByGraph - + proc~create~4 - -forcad_bezier_surface::bezier_surface%create + +forcad_bezier_curve::bezier_curve%create - + -program~example_bezier_surface - - -example_bezier_surface +proc~elevate_degree + + +forcad_bezier_curve::bezier_curve%elevate_degree - + -program~example_bezier_surface->proc~create~4 - - +proc~elevate_degree->proc~create~4 + + + + + +program~example_bezier_curve + + +example_bezier_curve + + + + + +program~example_bezier_curve->proc~create~4 + + @@ -554,82 +474,6 @@ -
    -

    Source Code

    -
        pure subroutine create(this, res1, res2, Xt1, Xt2)
    -        class(bezier_surface), intent(inout) :: this
    -        integer, intent(in), optional :: res1, res2
    -        real(rk), intent(in), optional :: Xt1(:), Xt2(:)
    -        integer :: i, j
    -        real(rk), dimension(:), allocatable :: Tgc1, Tgc2, Tgc
    -        real(rk), dimension(:,:), allocatable :: Xt
    -
    -        ! check
    -        if (.not.allocated(this%Xc)) then
    -            ! print*, 'Error: Control points are not set.'
    -            return
    -        end if
    -
    -
    -        ! Set parameter values
    -        if (present(Xt1)) then
    -            if (allocated(this%Xt1)) deallocate(this%Xt1)
    -            this%Xt1 = Xt1
    -        elseif (present(res1)) then
    -            if (allocated(this%Xt1)) deallocate(this%Xt1)
    -            allocate(this%Xt1(res1))
    -            this%Xt1 = [(real(i-1, rk) / real(res1-1, rk), i=1, res1)]
    -            ! else
    -            ! this%Xt1 = this%Xt1
    -        end if
    -
    -        ! Set parameter values
    -        if (present(Xt2)) then
    -            if (allocated(this%Xt2)) deallocate(this%Xt2)
    -            this%Xt2 = Xt2
    -        elseif (present(res2)) then
    -            if (allocated(this%Xt2)) deallocate(this%Xt2)
    -            allocate(this%Xt2(res2))
    -            this%Xt2 = [(real(i-1, rk) / real(res2-1, rk), i=1, res2)]
    -            ! else
    -            ! this%Xt2 = this%Xt2
    -        end if
    -
    -
    -        ! Set number of geometry points
    -        this%ng(1) = size(this%Xt1,1)
    -        this%ng(2) = size(this%Xt2,1)
    -
    -        call ndgrid(this%Xt1, this%Xt2, Xt)
    -
    -        if (allocated(this%Xg)) deallocate(this%Xg)
    -        allocate(this%Xg(this%ng(1)*this%ng(2), size(this%Xc,2)))
    -
    -        if (allocated(this%Wc)) then ! Rational Bezier surface
    -            do i = 1, size(Xt, 1)
    -                Tgc1 = basis_bernstein(Xt(i,1), this%nc(1))
    -                Tgc2 = basis_bernstein(Xt(i,2), this%nc(2))
    -                Tgc = kron(Tgc2, Tgc1)
    -                Tgc = Tgc*(this%Wc/(dot_product(Tgc,this%Wc)))
    -                do j = 1, size(this%Xc, 2)
    -                    this%Xg(i,j) = dot_product(Tgc,this%Xc(:,j))
    -                end do
    -            end do
    -        else ! Non-rational Bezier surface
    -            do i = 1, size(Xt, 1)
    -                Tgc1 = basis_bernstein(Xt(i,1), this%nc(1))
    -                Tgc2 = basis_bernstein(Xt(i,2), this%nc(2))
    -                Tgc = kron(Tgc2, Tgc1)
    -                do j = 1, size(this%Xc, 2)
    -                    this%Xg(i,j) = dot_product(Tgc,this%Xc(:,j))
    -                end do
    -            end do
    -        end if
    -    end subroutine create
    -
    - -
    -
    @@ -646,7 +490,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/create~5.html b/proc/create~5.html index a28e3a2f7..cc6f1c94d 100644 --- a/proc/create~5.html +++ b/proc/create~5.html @@ -79,20 +79,20 @@

    create
  • 63 statements + title=" 2.8% of total for procedures.">52 statements
  • - Source File + Source File
  • @@ -131,6 +131,12 @@

    Contents

    +
    +

    Source Code

    +
    + create +
    +
    @@ -138,13 +144,13 @@

    Contents

    -

    private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) +

    private pure subroutine create(this, res1, res2, Xt1, Xt2)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(inout) @@ -180,22 +175,7 @@

    Arguments

    - - integer, - intent(in),optional - - ::res1 - -
    - + integer, intent(in), ::res2res
    - + real(kind=rk), intent(in), ::Xt1(:) - -
    - - real(kind=rk), - intent(in),optional - - ::Xt2(:)Xt(:)
    @@ -160,7 +166,7 @@

    Arguments

    - - - - - - - - - - - - - - - - @@ -286,7 +262,7 @@

    Calls

    proc~create~5 -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create @@ -466,20 +442,20 @@

    Called by

    proc~create~5 -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~create~5 +program~example_bezier_surface->proc~create~5 @@ -578,6 +554,82 @@ +
    +

    Source Code

    +
        pure subroutine create(this, res1, res2, Xt1, Xt2)
    +        class(bezier_surface), intent(inout) :: this
    +        integer, intent(in), optional :: res1, res2
    +        real(rk), intent(in), optional :: Xt1(:), Xt2(:)
    +        integer :: i, j
    +        real(rk), dimension(:), allocatable :: Tgc1, Tgc2, Tgc
    +        real(rk), dimension(:,:), allocatable :: Xt
    +
    +        ! check
    +        if (.not.allocated(this%Xc)) then
    +            ! print*, 'Error: Control points are not set.'
    +            return
    +        end if
    +
    +
    +        ! Set parameter values
    +        if (present(Xt1)) then
    +            if (allocated(this%Xt1)) deallocate(this%Xt1)
    +            this%Xt1 = Xt1
    +        elseif (present(res1)) then
    +            if (allocated(this%Xt1)) deallocate(this%Xt1)
    +            allocate(this%Xt1(res1))
    +            this%Xt1 = [(real(i-1, rk) / real(res1-1, rk), i=1, res1)]
    +            ! else
    +            ! this%Xt1 = this%Xt1
    +        end if
    +
    +        ! Set parameter values
    +        if (present(Xt2)) then
    +            if (allocated(this%Xt2)) deallocate(this%Xt2)
    +            this%Xt2 = Xt2
    +        elseif (present(res2)) then
    +            if (allocated(this%Xt2)) deallocate(this%Xt2)
    +            allocate(this%Xt2(res2))
    +            this%Xt2 = [(real(i-1, rk) / real(res2-1, rk), i=1, res2)]
    +            ! else
    +            ! this%Xt2 = this%Xt2
    +        end if
    +
    +
    +        ! Set number of geometry points
    +        this%ng(1) = size(this%Xt1,1)
    +        this%ng(2) = size(this%Xt2,1)
    +
    +        call ndgrid(this%Xt1, this%Xt2, Xt)
    +
    +        if (allocated(this%Xg)) deallocate(this%Xg)
    +        allocate(this%Xg(this%ng(1)*this%ng(2), size(this%Xc,2)))
    +
    +        if (allocated(this%Wc)) then ! Rational Bezier surface
    +            do i = 1, size(Xt, 1)
    +                Tgc1 = basis_bernstein(Xt(i,1), this%nc(1))
    +                Tgc2 = basis_bernstein(Xt(i,2), this%nc(2))
    +                Tgc = kron(Tgc2, Tgc1)
    +                Tgc = Tgc*(this%Wc/(dot_product(Tgc,this%Wc)))
    +                do j = 1, size(this%Xc, 2)
    +                    this%Xg(i,j) = dot_product(Tgc,this%Xc(:,j))
    +                end do
    +            end do
    +        else ! Non-rational Bezier surface
    +            do i = 1, size(Xt, 1)
    +                Tgc1 = basis_bernstein(Xt(i,1), this%nc(1))
    +                Tgc2 = basis_bernstein(Xt(i,2), this%nc(2))
    +                Tgc = kron(Tgc2, Tgc1)
    +                do j = 1, size(this%Xc, 2)
    +                    this%Xg(i,j) = dot_product(Tgc,this%Xc(:,j))
    +                end do
    +            end do
    +        end if
    +    end subroutine create
    +
    + +
    +
    @@ -594,7 +646,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/create~6.html b/proc/create~6.html index f7079cb45..d8cbfdf4e 100644 --- a/proc/create~6.html +++ b/proc/create~6.html @@ -474,7 +474,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/elevate_degree.html b/proc/elevate_degree.html index 40723d10c..8785db446 100644 --- a/proc/elevate_degree.html +++ b/proc/elevate_degree.html @@ -160,7 +160,7 @@

    Arguments

    @@ -199,33 +199,33 @@

    Calls

    forcad_bezier_curve::bezier_curve%elevate_degree - + -proc~create~3 - +proc~create~4 + forcad_bezier_curve::bezier_curve%create - + -proc~elevate_degree->proc~create~3 +proc~elevate_degree->proc~create~4 - + -proc~set - +proc~set~2 + forcad_bezier_curve::bezier_curve%set - + -proc~elevate_degree->proc~set +proc~elevate_degree->proc~set~2 @@ -238,9 +238,9 @@

    Calls

    - + -proc~create~3->proc~basis_bernstein +proc~create~4->proc~basis_bernstein @@ -359,7 +359,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc.html b/proc/export_xc.html index b1706d5fb..7ef1cd6c4 100644 --- a/proc/export_xc.html +++ b/proc/export_xc.html @@ -84,15 +84,15 @@

    export_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(inout) @@ -202,21 +208,6 @@

    Arguments

    - - integer, - intent(in),optional - - ::res3 - -
    @@ -245,21 +236,6 @@

    Arguments

    Xt2(:) -
    - - real(kind=rk), - intent(in),optional - - ::Xt3(:) -
    - + class(bezier_curve), intent(inout)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc~3.html b/proc/export_xc~3.html index 0506c5358..b2b2fcbb0 100644 --- a/proc/export_xc~3.html +++ b/proc/export_xc~3.html @@ -84,15 +84,15 @@

    export_Xc
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private impure subroutine export_Xc(this, filename)

    -

    Export control points to a VTK file.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -202,91 +202,91 @@

    Calls

    - - + + proc~~export_xc~~CallsGraph - + proc~export_xc - -forcad_nurbs_volume::nurbs_volume%export_Xc + +forcad_bezier_volume::bezier_volume%export_Xc proc~get_elem_xc - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,31 +386,31 @@

    Called by

    - + proc~~export_xc~~CalledByGraph - + proc~export_xc - -forcad_nurbs_volume::nurbs_volume%export_Xc + +forcad_bezier_volume::bezier_volume%export_Xc - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~export_xc - - +program~example_bezier_volume->proc~export_xc + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc~2.html b/proc/export_xc~2.html index bc34e2a40..30cbffb9e 100644 --- a/proc/export_xc~2.html +++ b/proc/export_xc~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -160,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -203,91 +202,91 @@

    Calls

    - - + + proc~~export_xc~3~~CallsGraph - + proc~export_xc~3 - -forcad_bezier_curve::bezier_curve%export_Xc + +forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xc + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,31 +386,31 @@

    Called by

    - + proc~~export_xc~3~~CalledByGraph - + proc~export_xc~3 - -forcad_bezier_curve::bezier_curve%export_Xc + +forcad_nurbs_volume::nurbs_volume%export_Xc - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_bezier_curve->proc~export_xc~3 - - +program~example_nurbs_volume->proc~export_xc~3 + + @@ -524,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc~4.html b/proc/export_xc~4.html index 2ed277f07..d43b85c5e 100644 --- a/proc/export_xc~4.html +++ b/proc/export_xc~4.html @@ -84,15 +84,15 @@

    export_Xc
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private impure subroutine export_Xc(this, filename)

    +

    Export control points to a VTK file.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +160,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -202,91 +203,91 @@

    Calls

    - - + + proc~~export_xc~4~~CallsGraph - + proc~export_xc~4 - -forcad_bezier_surface::bezier_surface%export_Xc + +forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,31 +387,31 @@

    Called by

    - + proc~~export_xc~4~~CalledByGraph - + proc~export_xc~4 - -forcad_bezier_surface::bezier_surface%export_Xc + +forcad_bezier_curve::bezier_curve%export_Xc - + -program~example_bezier_surface - - -example_bezier_surface +program~example_bezier_curve + + +example_bezier_curve - + -program~example_bezier_surface->proc~export_xc~4 - - +program~example_bezier_curve->proc~export_xc~4 + + @@ -523,7 +524,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc~5.html b/proc/export_xc~5.html index 621384a92..edca3842f 100644 --- a/proc/export_xc~5.html +++ b/proc/export_xc~5.html @@ -84,15 +84,15 @@

    export_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -211,14 +211,14 @@

    Calls

    proc~export_xc~5 -forcad_bezier_volume::bezier_volume%export_Xc +forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~5 - + -forcad_bezier_volume::bezier_volume%get_elem_Xc +forcad_bezier_surface::bezier_surface%get_elem_Xc @@ -395,20 +395,20 @@

    Called by

    proc~export_xc~5 -forcad_bezier_volume::bezier_volume%export_Xc +forcad_bezier_surface::bezier_surface%export_Xc - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~export_xc~5 +program~example_bezier_surface->proc~export_xc~5 @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xc~6.html b/proc/export_xc~6.html index f1ecbef10..98b6db046 100644 --- a/proc/export_xc~6.html +++ b/proc/export_xc~6.html @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg.html b/proc/export_xg.html index 5089e036f..b482ec4aa 100644 --- a/proc/export_xg.html +++ b/proc/export_xg.html @@ -84,15 +84,15 @@

    export_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg~3.html b/proc/export_xg~3.html index 20e24afd4..f3580f342 100644 --- a/proc/export_xg~3.html +++ b/proc/export_xg~3.html @@ -84,15 +84,15 @@

    export_Xg
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private impure subroutine export_Xg(this, filename)

    -

    Export geometry points to a VTK file.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -203,90 +203,90 @@

    Calls

    --> - + viewBox="0.00 0.00 641.00 71.56" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~export_xg~~CallsGraph - + proc~export_xg - -forcad_nurbs_volume::nurbs_volume%export_Xg + +forcad_bezier_volume::bezier_volume%export_Xg proc~get_elem_xg - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + + +forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,31 +386,31 @@

    Called by

    - + proc~~export_xg~~CalledByGraph - + proc~export_xg - -forcad_nurbs_volume::nurbs_volume%export_Xg + +forcad_bezier_volume::bezier_volume%export_Xg - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~export_xg - - +program~example_bezier_volume->proc~export_xg + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg~2.html b/proc/export_xg~2.html index 4903bc624..b26e933c2 100644 --- a/proc/export_xg~2.html +++ b/proc/export_xg~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -160,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -203,91 +202,91 @@

    Calls

    - - + + proc~~export_xg~3~~CallsGraph - + proc~export_xg~3 - -forcad_bezier_curve::bezier_curve%export_Xg + +forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~3 - - -forcad_bezier_curve::bezier_curve%get_elem_Xg + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,31 +386,31 @@

    Called by

    - + proc~~export_xg~3~~CalledByGraph - + proc~export_xg~3 - -forcad_bezier_curve::bezier_curve%export_Xg + +forcad_nurbs_volume::nurbs_volume%export_Xg - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_bezier_curve->proc~export_xg~3 - - +program~example_nurbs_volume->proc~export_xg~3 + + @@ -524,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg~4.html b/proc/export_xg~4.html index 32de5f30f..61773d599 100644 --- a/proc/export_xg~4.html +++ b/proc/export_xg~4.html @@ -84,15 +84,15 @@

    export_Xg
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private impure subroutine export_Xg(this, filename)

    +

    Export geometry points to a VTK file.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +160,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -202,91 +203,91 @@

    Calls

    - - + + proc~~export_xg~4~~CallsGraph - + proc~export_xg~4 - -forcad_bezier_surface::bezier_surface%export_Xg + +forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~4 - - -forcad_bezier_surface::bezier_surface%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,31 +387,31 @@

    Called by

    - + proc~~export_xg~4~~CalledByGraph - + proc~export_xg~4 - -forcad_bezier_surface::bezier_surface%export_Xg + +forcad_bezier_curve::bezier_curve%export_Xg - + -program~example_bezier_surface - - -example_bezier_surface +program~example_bezier_curve + + +example_bezier_curve - + -program~example_bezier_surface->proc~export_xg~4 - - +program~example_bezier_curve->proc~export_xg~4 + + @@ -523,7 +524,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg~5.html b/proc/export_xg~5.html index 6d5661ee8..9d69452c1 100644 --- a/proc/export_xg~5.html +++ b/proc/export_xg~5.html @@ -84,15 +84,15 @@

    export_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -211,14 +211,14 @@

    Calls

    proc~export_xg~5 -forcad_bezier_volume::bezier_volume%export_Xg +forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~5 - + -forcad_bezier_volume::bezier_volume%get_elem_Xg +forcad_bezier_surface::bezier_surface%get_elem_Xg @@ -395,20 +395,20 @@

    Called by

    proc~export_xg~5 -forcad_bezier_volume::bezier_volume%export_Xg +forcad_bezier_surface::bezier_surface%export_Xg - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~export_xg~5 +program~example_bezier_surface->proc~export_xg~5 @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/export_xg~6.html b/proc/export_xg~6.html index d05246384..14e270da5 100644 --- a/proc/export_xg~6.html +++ b/proc/export_xg~6.html @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize.html b/proc/finalize.html index b6d0f39b4..8caded616 100644 --- a/proc/finalize.html +++ b/proc/finalize.html @@ -79,20 +79,20 @@

    finalize
  • 12 statements + title=" 0.5% of total for procedures.">9 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine finalize(this)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize~3.html b/proc/finalize~3.html index fe2e132a0..918e4e605 100644 --- a/proc/finalize~3.html +++ b/proc/finalize~3.html @@ -79,20 +79,20 @@

    finalize
  • 7 statements + title=" 0.6% of total for procedures.">12 statements
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private pure subroutine finalize(this)

    -

    Finalize the Bezier curve object by deallocating memory.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(inout) @@ -187,31 +187,31 @@

    Called by

    - + proc~~finalize~~CalledByGraph - + proc~finalize - -forcad_nurbs_volume::nurbs_volume%finalize + +forcad_bezier_volume::bezier_volume%finalize - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~finalize - - +program~example_bezier_volume->proc~finalize + + @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize~2.html b/proc/finalize~2.html index 02441f232..dea3bb790 100644 --- a/proc/finalize~2.html +++ b/proc/finalize~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(inout)
    @@ -160,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(inout) @@ -188,31 +187,31 @@

    Called by

    - + proc~~finalize~3~~CalledByGraph - + proc~finalize~3 - -forcad_bezier_curve::bezier_curve%finalize + +forcad_nurbs_volume::nurbs_volume%finalize - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_bezier_curve->proc~finalize~3 - - +program~example_nurbs_volume->proc~finalize~3 + + @@ -325,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize~4.html b/proc/finalize~4.html index a7b42a6ca..29f3da991 100644 --- a/proc/finalize~4.html +++ b/proc/finalize~4.html @@ -79,20 +79,20 @@

    finalize
  • 8 statements + title=" 0.4% of total for procedures.">7 statements
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine finalize(this)

    +

    Finalize the Bezier curve object by deallocating memory.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +160,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(inout) @@ -187,31 +188,31 @@

    Called by

    - + proc~~finalize~4~~CalledByGraph - + proc~finalize~4 - -forcad_bezier_surface::bezier_surface%finalize + +forcad_bezier_curve::bezier_curve%finalize - + -program~example_bezier_surface - - -example_bezier_surface +program~example_bezier_curve + + +example_bezier_curve - + -program~example_bezier_surface->proc~finalize~4 - - +program~example_bezier_curve->proc~finalize~4 + + @@ -324,7 +325,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize~5.html b/proc/finalize~5.html index 3bbbc67dc..495c7a9b6 100644 --- a/proc/finalize~5.html +++ b/proc/finalize~5.html @@ -79,20 +79,20 @@

    finalize
  • 9 statements + title=" 0.4% of total for procedures.">8 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine finalize(this)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - - - - - - - - - - - - - - - - @@ -194,7 +164,7 @@

    Arguments

    - + @@ -230,20 +200,20 @@

    Called by

    proc~generate_xc~2 -example_nurbs_surface::generate_Xc +example_nurbs_volume::generate_Xc - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~generate_xc~2 +program~example_nurbs_volume->proc~generate_xc~2 @@ -358,7 +328,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/generate_xc~3.html b/proc/generate_xc~3.html index b5dc1bd59..302da3bd1 100644 --- a/proc/generate_xc~3.html +++ b/proc/generate_xc~3.html @@ -78,20 +78,20 @@

    generate_Xc
  • 18 statements + title=" 0.9% of total for procedures.">16 statements
  • - Source File + Source File
  • @@ -137,7 +137,7 @@

    Contents

    -

    function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points) +

    function generate_Xc(L) result(control_points)

    @@ -156,22 +156,7 @@

    Arguments

    - - - - - - - - @@ -179,37 +164,7 @@

    Arguments

    - - - - - - - - - - - - - - - - - + @@ -236,31 +191,31 @@

    Called by

    - + proc~~generate_xc~3~~CalledByGraph - + proc~generate_xc~3 - -example_bezier_curve::generate_Xc + +example_bezier_volume::generate_Xc - + -program~example_bezier_curve - - -example_bezier_curve +program~example_bezier_volume + + +example_bezier_volume - + -program~example_bezier_curve->proc~generate_xc~3 - - +program~example_bezier_volume->proc~generate_xc~3 + + @@ -373,7 +328,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/generate_xc~4.html b/proc/generate_xc~4.html index 28f51d800..e96cf11fb 100644 --- a/proc/generate_xc~4.html +++ b/proc/generate_xc~4.html @@ -78,20 +78,20 @@

    generate_Xc
  • 16 statements + title=" 1.0% of total for procedures.">18 statements
  • - Source File + Source File
  • @@ -137,7 +137,7 @@

    Contents

    -

    function generate_Xc(L) result(control_points) +

    function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points)

    @@ -156,7 +156,22 @@

    Arguments

    + + + + + + + + @@ -164,7 +179,37 @@

    Arguments

    - + + + + + + + + + + + + + + + + + @@ -191,31 +236,31 @@

    Called by

    - + proc~~generate_xc~4~~CalledByGraph - + proc~generate_xc~4 - -example_nurbs_volume::generate_Xc + +example_bezier_curve::generate_Xc - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_volume->proc~generate_xc~4 - - +program~example_bezier_curve->proc~generate_xc~4 + + @@ -328,7 +373,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/generate_xc~5.html b/proc/generate_xc~5.html index e1a9fb4a6..e0fcc0ea2 100644 --- a/proc/generate_xc~5.html +++ b/proc/generate_xc~5.html @@ -78,20 +78,20 @@

    generate_Xc
  • 16 statements + title=" 1.0% of total for procedures.">19 statements
  • - Source File + Source File
  • @@ -137,7 +137,7 @@

    Contents

    -

    function generate_Xc(L) result(control_points) +

    function generate_Xc(num_rows, num_cols, peak_height) result(control_points)

    @@ -156,7 +156,37 @@

    Arguments

    + + + + + + + + + + + + + + + + @@ -164,7 +194,7 @@

    Arguments

    - + @@ -191,31 +221,31 @@

    Called by

    - + proc~~generate_xc~5~~CalledByGraph - + proc~generate_xc~5 - -example_bezier_volume::generate_Xc + +example_nurbs_surface::generate_Xc - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_volume->proc~generate_xc~5 - - +program~example_nurbs_surface->proc~generate_xc~5 + + @@ -328,7 +358,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_continuity.html b/proc/get_continuity.html index 352587e85..fdb7dfb68 100644 --- a/proc/get_continuity.html +++ b/proc/get_continuity.html @@ -79,20 +79,20 @@

    get_continuity
  • 25 statements + title=" 1.0% of total for procedures.">19 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_continuity(this, dir) result(c)

    Type Bound

    -

    nurbs_volume

    +

    nurbs_surface

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(inout) @@ -196,20 +196,20 @@

    Called by

    proc~finalize~5 -forcad_bezier_volume::bezier_volume%finalize +forcad_bezier_surface::bezier_surface%finalize - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~finalize~5 +program~example_bezier_surface->proc~finalize~5 @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/finalize~6.html b/proc/finalize~6.html index e69e6b3fa..f532cbc4f 100644 --- a/proc/finalize~6.html +++ b/proc/finalize~6.html @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/generate_xc.html b/proc/generate_xc.html index 3a3c01534..c8d46df5d 100644 --- a/proc/generate_xc.html +++ b/proc/generate_xc.html @@ -358,7 +358,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/generate_xc~2.html b/proc/generate_xc~2.html index 24c028aed..bd5624d26 100644 --- a/proc/generate_xc~2.html +++ b/proc/generate_xc~2.html @@ -78,20 +78,20 @@

    generate_Xc
  • 19 statements + title=" 0.9% of total for procedures.">16 statements
  • - Source File + Source File
  • @@ -137,7 +137,7 @@

    Contents

    -

    function generate_Xc(num_rows, num_cols, peak_height) result(control_points) +

    function generate_Xc(L) result(control_points)

    @@ -156,37 +156,7 @@

    Arguments

    - - integer, - intent(in) - - ::num_rows - -
    - - integer, - intent(in) - - ::num_cols - -
    - + real(kind=rk), intent(in) ::peak_heightL
    - - integer, - intent(in) - - ::num_coils - -
    - + real(kind=rk), intent(in) ::radius - -
    - - real(kind=rk), - intent(in) - - ::height - -
    - - integer, - intent(in) - - ::num_points_per_coilL
    - + + integer, + intent(in) + + ::num_coils + +
    + real(kind=rk), intent(in) ::Lradius + +
    + + real(kind=rk), + intent(in) + + ::height + +
    + + integer, + intent(in) + + ::num_points_per_coil
    - + + integer, + intent(in) + + ::num_rows + +
    + + integer, + intent(in) + + ::num_cols + +
    + real(kind=rk), intent(in) ::Lpeak_height
    @@ -159,8 +159,8 @@

    Arguments

    @@ -218,7 +218,7 @@

    Calls

    proc~get_continuity -forcad_nurbs_volume::nurbs_volume%get_continuity +forcad_nurbs_surface::nurbs_surface%get_continuity @@ -346,7 +346,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_continuity~2.html b/proc/get_continuity~2.html index 4f378dcbd..055d536ab 100644 --- a/proc/get_continuity~2.html +++ b/proc/get_continuity~2.html @@ -79,20 +79,20 @@

    get_continuity
  • 19 statements + title=" 1.3% of total for procedures.">25 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_continuity(this, dir) result(c)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(nurbs_surface), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -218,7 +218,7 @@

    Calls

    proc~get_continuity~2 -forcad_nurbs_surface::nurbs_surface%get_continuity +forcad_nurbs_volume::nurbs_volume%get_continuity @@ -346,7 +346,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_continuity~3.html b/proc/get_continuity~3.html index a6d0bc6d0..0dc2bb355 100644 --- a/proc/get_continuity~3.html +++ b/proc/get_continuity~3.html @@ -331,7 +331,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc.html b/proc/get_elem_xc.html index c90cffe96..00b7fdd00 100644 --- a/proc/get_elem_xc.html +++ b/proc/get_elem_xc.html @@ -84,15 +84,15 @@

    get_elem_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc~3.html b/proc/get_elem_xc~3.html index 9bd681b13..3b35036f7 100644 --- a/proc/get_elem_xc~3.html +++ b/proc/get_elem_xc~3.html @@ -84,15 +84,15 @@

    get_elem_Xc
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    -

    Generate connectivity for control points.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -217,76 +217,76 @@

    Calls

    - - + + proc~~get_elem_xc~~CallsGraph - + proc~get_elem_xc - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + +forcad_bezier_volume::bezier_volume%get_elem_Xc interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,45 +387,45 @@

    Called by

    --> - + viewBox="0.00 0.00 641.00 25.90" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~get_elem_xc~~CalledByGraph - + proc~get_elem_xc - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + +forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc - - + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~export_xc - - +program~example_bezier_volume->proc~export_xc + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc~2.html b/proc/get_elem_xc~2.html index 10e750710..21733ae4d 100644 --- a/proc/get_elem_xc~2.html +++ b/proc/get_elem_xc~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -160,8 +159,8 @@

    Arguments

    @@ -190,7 +189,7 @@

    Arguments

    @@ -198,7 +197,7 @@

    Arguments

    - + @@ -218,76 +217,76 @@

    Calls

    - - + + proc~~get_elem_xc~3~~CallsGraph - + proc~get_elem_xc~3 - -forcad_bezier_curve::bezier_curve%get_elem_Xc + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xc~3~~CalledByGraph - + proc~get_elem_xc~3 - -forcad_bezier_curve::bezier_curve%get_elem_Xc + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_bezier_curve->proc~export_xc~3 - - +program~example_nurbs_volume->proc~export_xc~3 + + @@ -543,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc~4.html b/proc/get_elem_xc~4.html index ef75a21f5..3094fde44 100644 --- a/proc/get_elem_xc~4.html +++ b/proc/get_elem_xc~4.html @@ -84,15 +84,15 @@

    get_elem_Xc
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    +

    Generate connectivity for control points.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -175,7 +174,7 @@

    Arguments

    - + integer, intent(out),
    - + integer, intent(in), ::pp(:)
    @@ -159,8 +160,8 @@

    Arguments

    - + @@ -217,76 +218,76 @@

    Calls

    - - + + proc~~get_elem_xc~4~~CallsGraph - + proc~get_elem_xc~4 - -forcad_bezier_surface::bezier_surface%get_elem_Xc + +forcad_bezier_curve::bezier_curve%get_elem_Xc interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,46 +387,46 @@

    Called by

    - - + + proc~~get_elem_xc~4~~CalledByGraph - + proc~get_elem_xc~4 - -forcad_bezier_surface::bezier_surface%get_elem_Xc + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4 - - -forcad_bezier_surface::bezier_surface%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + - + -program~example_bezier_surface - - -example_bezier_surface +program~example_bezier_curve + + +example_bezier_curve - + -program~example_bezier_surface->proc~export_xc~4 - - +program~example_bezier_curve->proc~export_xc~4 + + @@ -542,7 +543,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc~5.html b/proc/get_elem_xc~5.html index 63cb4ab7b..b67e38823 100644 --- a/proc/get_elem_xc~5.html +++ b/proc/get_elem_xc~5.html @@ -84,15 +84,15 @@

    get_elem_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -197,7 +198,7 @@

    Arguments

    ::p(:)p
    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -226,7 +226,7 @@

    Calls

    proc~get_elem_xc~5 -forcad_bezier_volume::bezier_volume%get_elem_Xc +forcad_bezier_surface::bezier_surface%get_elem_Xc @@ -395,14 +395,14 @@

    Called by

    proc~get_elem_xc~5 -forcad_bezier_volume::bezier_volume%get_elem_Xc +forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~5 - + -forcad_bezier_volume::bezier_volume%export_Xc +forcad_bezier_surface::bezier_surface%export_Xc @@ -412,18 +412,18 @@

    Called by

    - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~export_xc~5 +program~example_bezier_surface->proc~export_xc~5 @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xc~6.html b/proc/get_elem_xc~6.html index f1d1663c1..2f47d0e87 100644 --- a/proc/get_elem_xc~6.html +++ b/proc/get_elem_xc~6.html @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg.html b/proc/get_elem_xg.html index 0b6f2493d..6c89a7ed0 100644 --- a/proc/get_elem_xg.html +++ b/proc/get_elem_xg.html @@ -84,15 +84,15 @@

    get_elem_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg~3.html b/proc/get_elem_xg~3.html index 6090ad481..2c15d694d 100644 --- a/proc/get_elem_xg~3.html +++ b/proc/get_elem_xg~3.html @@ -84,15 +84,15 @@

    get_elem_Xg
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    -

    Generate connectivity for geometry points.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -218,75 +218,75 @@

    Calls

    --> - + viewBox="0.00 0.00 641.00 102.56" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~get_elem_xg~~CallsGraph - + proc~get_elem_xg - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + +forcad_bezier_volume::bezier_volume%get_elem_Xg interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,45 +387,45 @@

    Called by

    --> - + viewBox="0.00 0.00 641.00 25.83" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~get_elem_xg~~CalledByGraph - + proc~get_elem_xg - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + +forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg - - + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_volume + + +example_bezier_volume - + -program~example_nurbs_volume->proc~export_xg - - +program~example_bezier_volume->proc~export_xg + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg~2.html b/proc/get_elem_xg~2.html index 0b069baf7..67d6c2515 100644 --- a/proc/get_elem_xg~2.html +++ b/proc/get_elem_xg~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -160,8 +159,8 @@

    Arguments

    @@ -190,7 +189,7 @@

    Arguments

    @@ -198,7 +197,7 @@

    Arguments

    - + @@ -218,76 +217,76 @@

    Calls

    - - + + proc~~get_elem_xg~3~~CallsGraph - + proc~get_elem_xg~3 - -forcad_bezier_curve::bezier_curve%get_elem_Xg + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -387,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xg~3~~CalledByGraph - + proc~get_elem_xg~3 - -forcad_bezier_curve::bezier_curve%get_elem_Xg + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_volume + + +example_nurbs_volume - + -program~example_bezier_curve->proc~export_xg~3 - - +program~example_nurbs_volume->proc~export_xg~3 + + @@ -543,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg~4.html b/proc/get_elem_xg~4.html index 6aae56178..5c5643c3c 100644 --- a/proc/get_elem_xg~4.html +++ b/proc/get_elem_xg~4.html @@ -84,15 +84,15 @@

    get_elem_Xg
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    +

    Generate connectivity for geometry points.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -175,7 +174,7 @@

    Arguments

    - + integer, intent(out),
    - + integer, intent(in), ::pp(:)
    @@ -159,8 +160,8 @@

    Arguments

    - + @@ -217,76 +218,76 @@

    Calls

    - - + + proc~~get_elem_xg~4~~CallsGraph - + proc~get_elem_xg~4 - -forcad_bezier_surface::bezier_surface%get_elem_Xg + +forcad_bezier_curve::bezier_curve%get_elem_Xg interface~elemconn_c0 - -forcad_utils::elemConn_C0 + +forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 - - + + proc~cmp_elemconn_c0_l - -forcad_utils::cmp_elemConn_C0_L + +forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l - - + + proc~cmp_elemconn_c0_s - -forcad_utils::cmp_elemConn_C0_S + +forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s - - + + proc~cmp_elemconn_c0_v - -forcad_utils::cmp_elemConn_C0_V + +forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v - - + + @@ -386,46 +387,46 @@

    Called by

    - - + + proc~~get_elem_xg~4~~CalledByGraph - + proc~get_elem_xg~4 - -forcad_bezier_surface::bezier_surface%get_elem_Xg + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4 - - -forcad_bezier_surface::bezier_surface%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + - + -program~example_bezier_surface - - -example_bezier_surface +program~example_bezier_curve + + +example_bezier_curve - + -program~example_bezier_surface->proc~export_xg~4 - - +program~example_bezier_curve->proc~export_xg~4 + + @@ -542,7 +543,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg~5.html b/proc/get_elem_xg~5.html index 8e5d82319..590285ab9 100644 --- a/proc/get_elem_xg~5.html +++ b/proc/get_elem_xg~5.html @@ -84,15 +84,15 @@

    get_elem_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -197,7 +198,7 @@

    Arguments

    ::p(:)p
    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -226,7 +226,7 @@

    Calls

    proc~get_elem_xg~5 -forcad_bezier_volume::bezier_volume%get_elem_Xg +forcad_bezier_surface::bezier_surface%get_elem_Xg @@ -395,14 +395,14 @@

    Called by

    proc~get_elem_xg~5 -forcad_bezier_volume::bezier_volume%get_elem_Xg +forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~5 - + -forcad_bezier_volume::bezier_volume%export_Xg +forcad_bezier_surface::bezier_surface%export_Xg @@ -412,18 +412,18 @@

    Called by

    - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~export_xg~5 +program~example_bezier_surface->proc~export_xg~5 @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_elem_xg~6.html b/proc/get_elem_xg~6.html index 5fb4e34d3..3c6931e7e 100644 --- a/proc/get_elem_xg~6.html +++ b/proc/get_elem_xg~6.html @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_knot.html b/proc/get_knot.html index 2d7fcf2e2..95b59a133 100644 --- a/proc/get_knot.html +++ b/proc/get_knot.html @@ -79,20 +79,20 @@

    get_knot
  • 22 statements + title=" 0.9% of total for procedures.">17 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_knot(this, dir) result(knot)

    Type Bound

    -

    nurbs_volume

    +

    nurbs_surface

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -225,7 +225,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_knot~2.html b/proc/get_knot~2.html index da32ab478..85ba809f2 100644 --- a/proc/get_knot~2.html +++ b/proc/get_knot~2.html @@ -79,20 +79,20 @@

    get_knot
  • 17 statements + title=" 1.2% of total for procedures.">22 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_knot(this, dir) result(knot)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(nurbs_surface), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -192,7 +192,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -225,7 +225,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_knot~3.html b/proc/get_knot~3.html index 83643f5c3..029982774 100644 --- a/proc/get_knot~3.html +++ b/proc/get_knot~3.html @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_multiplicity.html b/proc/get_multiplicity.html index 9223bdcee..110bc4b63 100644 --- a/proc/get_multiplicity.html +++ b/proc/get_multiplicity.html @@ -79,20 +79,20 @@

    get_multiplicity
  • 25 statements + title=" 1.0% of total for procedures.">19 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_multiplicity(this, dir) result(m)

    Type Bound

    -

    nurbs_volume

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -218,7 +218,7 @@

    Calls

    proc~get_multiplicity -forcad_nurbs_volume::nurbs_volume%get_multiplicity +forcad_nurbs_surface::nurbs_surface%get_multiplicity @@ -338,95 +338,95 @@

    Called by

    proc~get_multiplicity -forcad_nurbs_volume::nurbs_volume%get_multiplicity +forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order - +proc~get_order~2 + -forcad_nurbs_volume::nurbs_volume%get_order +forcad_nurbs_surface::nurbs_surface%get_order - + -proc~get_order->proc~get_multiplicity +proc~get_order~2->proc~get_multiplicity proc~set1 - + -forcad_nurbs_volume::nurbs_volume%set1 +forcad_nurbs_surface::nurbs_surface%set1 - + -proc~set1->proc~get_order +proc~set1->proc~get_order~2 - + -none~set - +none~set~2 + -forcad_nurbs_volume::nurbs_volume%set +forcad_nurbs_surface::nurbs_surface%set - + -none~set->proc~set1 +none~set~2->proc~set1 - + -proc~modify_wc - +proc~modify_wc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Wc +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_xc - +proc~modify_xc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Xc +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -program~example_nurbs_volume - +program~example_nurbs_surface + -example_nurbs_volume +example_nurbs_surface - + -program~example_nurbs_volume->none~set +program~example_nurbs_surface->none~set~2 @@ -545,7 +545,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_multiplicity~2.html b/proc/get_multiplicity~2.html index 10eb29d95..2ade1c255 100644 --- a/proc/get_multiplicity~2.html +++ b/proc/get_multiplicity~2.html @@ -79,20 +79,20 @@

    get_multiplicity
  • 19 statements + title=" 1.3% of total for procedures.">25 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_multiplicity(this, dir) result(m)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(nurbs_surface), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    @@ -218,7 +218,7 @@

    Calls

    proc~get_multiplicity~2 -forcad_nurbs_surface::nurbs_surface%get_multiplicity +forcad_nurbs_volume::nurbs_volume%get_multiplicity @@ -338,95 +338,95 @@

    Called by

    proc~get_multiplicity~2 -forcad_nurbs_surface::nurbs_surface%get_multiplicity +forcad_nurbs_volume::nurbs_volume%get_multiplicity - + -proc~get_order~2 - +proc~get_order~3 + -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~3->proc~get_multiplicity~2 proc~set1~2 - + -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -proc~set1~2->proc~get_order~2 +proc~set1~2->proc~get_order~3 - + -none~set~2 - +none~set~3 + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~2->none~set~2 +proc~modify_wc~3->none~set~3 - + -proc~modify_xc~2 - +proc~modify_xc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~2->none~set~2 +proc~modify_xc~3->none~set~3 - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_volume->none~set~3 @@ -545,7 +545,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_multiplicity~3.html b/proc/get_multiplicity~3.html index 276aa6f0c..9e45ebdbe 100644 --- a/proc/get_multiplicity~3.html +++ b/proc/get_multiplicity~3.html @@ -530,7 +530,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc.html b/proc/get_nc.html index cace85a01..abc201989 100644 --- a/proc/get_nc.html +++ b/proc/get_nc.html @@ -79,20 +79,20 @@

    get_nc
  • 25 statements + title=" 0.3% of total for procedures.">5 statements
  • - Source File + Source File
  • -

    private pure function get_nc(this, dir) result(nc) +

    private pure function get_nc(this) result(nc)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - - - - - - - @@ -192,338 +177,12 @@

    Arguments

    Return Value - - integer + + integer, (3)


    -
    -
    -

    Calls

    -
    -
    -
    - - - - - -proc~~get_nc~~CallsGraph - - - -proc~get_nc - -forcad_nurbs_volume::nurbs_volume%get_nc - - - -proc~compute_multiplicity - - -forcad_utils::compute_multiplicity - - - - - -proc~get_nc->proc~compute_multiplicity - - - - - -
    - Help -
    - -
    -
    -
    -
    -

    Called by

    -
    -
    -
    - - - - - -proc~~get_nc~~CalledByGraph - - - -proc~get_nc - -forcad_nurbs_volume::nurbs_volume%get_nc - - - -proc~set1 - - -forcad_nurbs_volume::nurbs_volume%set1 - - - - - -proc~set1->proc~get_nc - - - - - -proc~set2 - - -forcad_nurbs_volume::nurbs_volume%set2 - - - - - -proc~set2->proc~get_nc - - - - - -none~set - - -forcad_nurbs_volume::nurbs_volume%set - - - - - -none~set->proc~set1 - - - - - -none~set->proc~set2 - - - - - -proc~modify_wc - - -forcad_nurbs_volume::nurbs_volume%modify_Wc - - - - - -proc~modify_wc->none~set - - - - - -proc~modify_xc - - -forcad_nurbs_volume::nurbs_volume%modify_Xc - - - - - -proc~modify_xc->none~set - - - - - -program~example_nurbs_volume - - -example_nurbs_volume - - - - - -program~example_nurbs_volume->none~set - - - - - -
    - Help -
    - -
    -
    -
    @@ -551,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc~2.html b/proc/get_nc~2.html index 6885d7a6e..fc8383455 100644 --- a/proc/get_nc~2.html +++ b/proc/get_nc~2.html @@ -159,7 +159,7 @@

    Arguments

    @@ -174,7 +174,7 @@

    Arguments

    @@ -340,33 +340,33 @@

    Called by

    forcad_nurbs_surface::nurbs_surface%get_nc - + -proc~set1~2 - +proc~set1 + forcad_nurbs_surface::nurbs_surface%set1 - + -proc~set1~2->proc~get_nc~2 +proc~set1->proc~get_nc~2 - + -proc~set2~2 - +proc~set2 + forcad_nurbs_surface::nurbs_surface%set2 - + -proc~set2~2->proc~get_nc~2 +proc~set2->proc~get_nc~2 @@ -379,15 +379,15 @@

    Called by

    - + -none~set~2->proc~set1~2 +none~set~2->proc~set1 - + -none~set~2->proc~set2~2 +none~set~2->proc~set2 @@ -551,7 +551,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc~3.html b/proc/get_nc~3.html index 2e7423b69..72f833621 100644 --- a/proc/get_nc~3.html +++ b/proc/get_nc~3.html @@ -79,20 +79,20 @@

    get_nc
  • 5 statements + title=" 1.3% of total for procedures.">25 statements
  • - Source File + Source File
  • -

    private pure function get_nc(this) result(nc) +

    private pure function get_nc(this, dir) result(nc)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -170,21 +170,6 @@

    Arguments

    this -
    - - integer, - intent(in) - - ::dir -
    - + class(nurbs_surface), intent(in)
    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    + + + + + + + + @@ -183,6 +198,332 @@

    Return Value


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_nc~3~~CallsGraph + + + +proc~get_nc~3 + +forcad_nurbs_volume::nurbs_volume%get_nc + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~3->proc~compute_multiplicity + + + + + +
    + Help +
    + +
    +
    +
    +
    +

    Called by

    +
    +
    +
    + + + + + +proc~~get_nc~3~~CalledByGraph + + + +proc~get_nc~3 + +forcad_nurbs_volume::nurbs_volume%get_nc + + + +proc~set1~2 + + +forcad_nurbs_volume::nurbs_volume%set1 + + + + + +proc~set1~2->proc~get_nc~3 + + + + + +proc~set2~2 + + +forcad_nurbs_volume::nurbs_volume%set2 + + + + + +proc~set2~2->proc~get_nc~3 + + + + + +none~set~3 + + +forcad_nurbs_volume::nurbs_volume%set + + + + + +none~set~3->proc~set1~2 + + + + + +none~set~3->proc~set2~2 + + + + + +proc~modify_wc~3 + + +forcad_nurbs_volume::nurbs_volume%modify_Wc + + + + + +proc~modify_wc~3->none~set~3 + + + + + +proc~modify_xc~3 + + +forcad_nurbs_volume::nurbs_volume%modify_Xc + + + + + +proc~modify_xc~3->none~set~3 + + + + + +program~example_nurbs_volume + + +example_nurbs_volume + + + + + +program~example_nurbs_volume->none~set~3 + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +551,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc~4.html b/proc/get_nc~4.html index 6baf7ce6f..5dbcb681c 100644 --- a/proc/get_nc~4.html +++ b/proc/get_nc~4.html @@ -84,15 +84,15 @@

    get_nc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_nc(this) result(nc)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -170,6 +170,21 @@

    Arguments

    this +
    + + integer, + intent(in) + + ::dir +
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (2) + integer

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc~5.html b/proc/get_nc~5.html index ba36c38e5..a667baa97 100644 --- a/proc/get_nc~5.html +++ b/proc/get_nc~5.html @@ -84,15 +84,15 @@

    get_nc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_nc(this) result(nc)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (3) + integer, (2)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_nc~6.html b/proc/get_nc~6.html index 1548071a7..eb9e9142f 100644 --- a/proc/get_nc~6.html +++ b/proc/get_nc~6.html @@ -331,7 +331,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng.html b/proc/get_ng.html index 47fb87d20..40db91eba 100644 --- a/proc/get_ng.html +++ b/proc/get_ng.html @@ -84,15 +84,15 @@

    get_ng
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_ng(this) result(ng)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng~3.html b/proc/get_ng~3.html index a28235f06..e3f56ebfd 100644 --- a/proc/get_ng~3.html +++ b/proc/get_ng~3.html @@ -84,15 +84,15 @@

    get_ng
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_ng(this) result(ng)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - class(nurbs_volume), + class(bezier_volume), intent(in) @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng~2.html b/proc/get_ng~2.html index 3d1fcdfeb..a58ffc3c3 100644 --- a/proc/get_ng~2.html +++ b/proc/get_ng~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer + integer, (3)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng~4.html b/proc/get_ng~4.html index 31da3a3f4..a1c6c84fc 100644 --- a/proc/get_ng~4.html +++ b/proc/get_ng~4.html @@ -84,15 +84,15 @@

    get_ng
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_ng(this) result(ng)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (2) + integer

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng~5.html b/proc/get_ng~5.html index 7ed8002b8..f8b3941bf 100644 --- a/proc/get_ng~5.html +++ b/proc/get_ng~5.html @@ -84,15 +84,15 @@

    get_ng
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_ng(this) result(ng)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (3) + integer, (2)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_ng~6.html b/proc/get_ng~6.html index a80815f58..599b2aa69 100644 --- a/proc/get_ng~6.html +++ b/proc/get_ng~6.html @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order.html b/proc/get_order.html index 9ba871c52..32be5392d 100644 --- a/proc/get_order.html +++ b/proc/get_order.html @@ -79,20 +79,20 @@

    get_order
  • 11 statements + title=" 0.3% of total for procedures.">5 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_order(this) result(order)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    @@ -177,7 +177,7 @@

    Arguments

    Return Value - + integer, (2)

    @@ -205,18 +205,18 @@

    Calls

    forcad_nurbs_surface::nurbs_surface%get_order - + -proc~get_multiplicity~2 - +proc~get_multiplicity + forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity @@ -229,9 +229,9 @@

    Calls

    - + -proc~get_multiplicity~2->proc~compute_multiplicity +proc~get_multiplicity->proc~compute_multiplicity @@ -344,18 +344,18 @@

    Called by

    forcad_nurbs_surface::nurbs_surface%get_order - + -proc~set1~2 - +proc~set1 + forcad_nurbs_surface::nurbs_surface%set1 - + -proc~set1~2->proc~get_order~2 +proc~set1->proc~get_order~2 @@ -368,9 +368,9 @@

    Called by

    - + -none~set~2->proc~set1~2 +none~set~2->proc~set1 @@ -534,7 +534,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order~3.html b/proc/get_order~3.html index 973c9d1d4..aed6fc1f2 100644 --- a/proc/get_order~3.html +++ b/proc/get_order~3.html @@ -79,20 +79,20 @@

    get_order
  • 5 statements + title=" 0.6% of total for procedures.">11 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_order(this) result(order)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - class(nurbs_volume), + class(bezier_volume), intent(in) @@ -177,336 +177,12 @@

    Arguments

    Return Value - + integer, (3)


    -
    -
    -

    Calls

    -
    -
    -
    - - - - - -proc~~get_order~~CallsGraph - - - -proc~get_order - -forcad_nurbs_volume::nurbs_volume%get_order - - - -proc~get_multiplicity - - -forcad_nurbs_volume::nurbs_volume%get_multiplicity - - - - - -proc~get_order->proc~get_multiplicity - - - - - -proc~compute_multiplicity - - -forcad_utils::compute_multiplicity - - - - - -proc~get_multiplicity->proc~compute_multiplicity - - - - - -
    - Help -
    - -
    -
    -
    -
    -

    Called by

    -
    -
    -
    - - - - - -proc~~get_order~~CalledByGraph - - - -proc~get_order - -forcad_nurbs_volume::nurbs_volume%get_order - - - -proc~set1 - - -forcad_nurbs_volume::nurbs_volume%set1 - - - - - -proc~set1->proc~get_order - - - - - -none~set - - -forcad_nurbs_volume::nurbs_volume%set - - - - - -none~set->proc~set1 - - - - - -proc~modify_wc - - -forcad_nurbs_volume::nurbs_volume%modify_Wc - - - - - -proc~modify_wc->none~set - - - - - -proc~modify_xc - - -forcad_nurbs_volume::nurbs_volume%modify_Xc - - - - - -proc~modify_xc->none~set - - - - - -program~example_nurbs_volume - - -example_nurbs_volume - - - - - -program~example_nurbs_volume->none~set - - - - - -
    - Help -
    - -
    -
    -
    @@ -534,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order~2.html b/proc/get_order~2.html index e84500246..02f8e3ab1 100644 --- a/proc/get_order~2.html +++ b/proc/get_order~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -177,12 +177,336 @@

    Arguments

    Return Value - - integer + + integer, (3)


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_order~3~~CallsGraph + + + +proc~get_order~3 + +forcad_nurbs_volume::nurbs_volume%get_order + + + +proc~get_multiplicity~2 + + +forcad_nurbs_volume::nurbs_volume%get_multiplicity + + + + + +proc~get_order~3->proc~get_multiplicity~2 + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_multiplicity~2->proc~compute_multiplicity + + + + + +
    + Help +
    + +
    +
    +
    +
    +

    Called by

    +
    +
    +
    + + + + + +proc~~get_order~3~~CalledByGraph + + + +proc~get_order~3 + +forcad_nurbs_volume::nurbs_volume%get_order + + + +proc~set1~2 + + +forcad_nurbs_volume::nurbs_volume%set1 + + + + + +proc~set1~2->proc~get_order~3 + + + + + +none~set~3 + + +forcad_nurbs_volume::nurbs_volume%set + + + + + +none~set~3->proc~set1~2 + + + + + +proc~modify_wc~3 + + +forcad_nurbs_volume::nurbs_volume%modify_Wc + + + + + +proc~modify_wc~3->none~set~3 + + + + + +proc~modify_xc~3 + + +forcad_nurbs_volume::nurbs_volume%modify_Xc + + + + + +proc~modify_xc~3->none~set~3 + + + + + +program~example_nurbs_volume + + +example_nurbs_volume + + + + + +program~example_nurbs_volume->none~set~3 + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +534,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order~4.html b/proc/get_order~4.html index 4b9e11129..20915195e 100644 --- a/proc/get_order~4.html +++ b/proc/get_order~4.html @@ -84,15 +84,15 @@

    get_order
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_order(this) result(order)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (2) + integer

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order~5.html b/proc/get_order~5.html index ec6f7146e..780ecffec 100644 --- a/proc/get_order~5.html +++ b/proc/get_order~5.html @@ -84,15 +84,15 @@

    get_order
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_order(this) result(order)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -178,7 +178,7 @@

    Arguments

    Return Value - integer, (3) + integer, (2)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_order~6.html b/proc/get_order~6.html index 4bb9a7f32..9897c8f23 100644 --- a/proc/get_order~6.html +++ b/proc/get_order~6.html @@ -534,7 +534,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc.html b/proc/get_wc.html index 77e33b610..0362e40e5 100644 --- a/proc/get_wc.html +++ b/proc/get_wc.html @@ -84,15 +84,15 @@

    get_Wc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc~3.html b/proc/get_wc~3.html index 24825dae8..84ebd43f0 100644 --- a/proc/get_wc~3.html +++ b/proc/get_wc~3.html @@ -84,15 +84,15 @@

    get_Wc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc~2.html b/proc/get_wc~2.html index 3a17f7a90..c95f2a525 100644 --- a/proc/get_wc~2.html +++ b/proc/get_wc~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc~4.html b/proc/get_wc~4.html index d50ddf664..7a3d66fef 100644 --- a/proc/get_wc~4.html +++ b/proc/get_wc~4.html @@ -84,15 +84,15 @@

    get_Wc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc~5.html b/proc/get_wc~5.html index c7399ed55..733b682af 100644 --- a/proc/get_wc~5.html +++ b/proc/get_wc~5.html @@ -84,15 +84,15 @@

    get_Wc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_wc~6.html b/proc/get_wc~6.html index cf0460ed1..217a1b041 100644 --- a/proc/get_wc~6.html +++ b/proc/get_wc~6.html @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc.html b/proc/get_xc.html index db8aba9d4..2f0e84331 100644 --- a/proc/get_xc.html +++ b/proc/get_xc.html @@ -84,15 +84,15 @@

    get_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc~3.html b/proc/get_xc~3.html index 37a8fe0bf..6b5302a2e 100644 --- a/proc/get_xc~3.html +++ b/proc/get_xc~3.html @@ -84,15 +84,15 @@

    get_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc~2.html b/proc/get_xc~2.html index 455af7883..68b02c1be 100644 --- a/proc/get_xc~2.html +++ b/proc/get_xc~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc~4.html b/proc/get_xc~4.html index 0cdef7d65..d340c59a8 100644 --- a/proc/get_xc~4.html +++ b/proc/get_xc~4.html @@ -84,15 +84,15 @@

    get_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc~5.html b/proc/get_xc~5.html index 3ece55eaa..4da83de5c 100644 --- a/proc/get_xc~5.html +++ b/proc/get_xc~5.html @@ -84,15 +84,15 @@

    get_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xc~6.html b/proc/get_xc~6.html index 9b57da84f..411e41e5e 100644 --- a/proc/get_xc~6.html +++ b/proc/get_xc~6.html @@ -177,7 +177,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg.html b/proc/get_xg.html index 50325c5ea..b8d124bf0 100644 --- a/proc/get_xg.html +++ b/proc/get_xg.html @@ -84,15 +84,15 @@

    get_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg~3.html b/proc/get_xg~3.html index 283526f7f..10e1cfa52 100644 --- a/proc/get_xg~3.html +++ b/proc/get_xg~3.html @@ -84,15 +84,15 @@

    get_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg~2.html b/proc/get_xg~2.html index b14d00a12..3b1c8c0e5 100644 --- a/proc/get_xg~2.html +++ b/proc/get_xg~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg~4.html b/proc/get_xg~4.html index ffdcfa102..bc6be6ace 100644 --- a/proc/get_xg~4.html +++ b/proc/get_xg~4.html @@ -84,15 +84,15 @@

    get_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg~5.html b/proc/get_xg~5.html index bf0fea23b..c4ae06db6 100644 --- a/proc/get_xg~5.html +++ b/proc/get_xg~5.html @@ -84,15 +84,15 @@

    get_Xg
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xg~6.html b/proc/get_xg~6.html index 75f719d68..5d87243a9 100644 --- a/proc/get_xg~6.html +++ b/proc/get_xg~6.html @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt.html b/proc/get_xt.html index 8b6d2be78..e373a36ae 100644 --- a/proc/get_xt.html +++ b/proc/get_xt.html @@ -84,15 +84,15 @@

    get_Xt
  • - Source File + Source File
  • @@ -143,8 +143,6 @@

    private pure function get_Xt(this, dir) result(Xt) -

    Type Bound

    -

    nurbs_volume

    Arguments

    @@ -159,8 +157,8 @@

    Arguments

    @@ -174,7 +174,7 @@

    Arguments

    @@ -225,7 +225,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt~3.html b/proc/get_xt~3.html index 3d469d69d..0f76048d4 100644 --- a/proc/get_xt~3.html +++ b/proc/get_xt~3.html @@ -79,20 +79,20 @@

    get_Xt
  • 8 statements + title=" 1.2% of total for procedures.">22 statements
  • - Source File + Source File
  • -

    private pure function get_Xt(this) result(Xt) +

    private pure function get_Xt(this, dir) result(Xt)

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(in) @@ -225,7 +223,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt~2.html b/proc/get_xt~2.html index 26c41295a..5404a28a9 100644 --- a/proc/get_xt~2.html +++ b/proc/get_xt~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(in)
    - + integer, intent(in)
    @@ -159,8 +159,8 @@

    Arguments

    + + + + + + + + @@ -177,7 +192,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -210,7 +225,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt~4.html b/proc/get_xt~4.html index ebdf531b1..35c89aaed 100644 --- a/proc/get_xt~4.html +++ b/proc/get_xt~4.html @@ -79,20 +79,20 @@

    get_Xt
  • 17 statements + title=" 0.4% of total for procedures.">8 statements
  • - Source File + Source File
  • -

    private pure function get_Xt(this, dir) result(Xt) +

    private pure function get_Xt(this) result(Xt)

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(in) @@ -170,6 +170,21 @@

    Arguments

    this +
    + + integer, + intent(in) + + ::dir +
    @@ -159,8 +159,8 @@

    Arguments

    - - - - - - - - @@ -225,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt~5.html b/proc/get_xt~5.html index 85ba1802f..b879f69b1 100644 --- a/proc/get_xt~5.html +++ b/proc/get_xt~5.html @@ -79,20 +79,20 @@

    get_Xt
  • 22 statements + title=" 0.9% of total for procedures.">17 statements
  • - Source File + Source File
  • @@ -143,6 +143,8 @@

    private pure function get_Xt(this, dir) result(Xt) +

    Type Bound

    +

    bezier_surface

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(in) @@ -170,21 +170,6 @@

    Arguments

    this -
    - - integer, - intent(in) - - ::dir -
    @@ -158,7 +160,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(in) @@ -223,7 +225,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/get_xt~6.html b/proc/get_xt~6.html index 67a09775c..f26af055b 100644 --- a/proc/get_xt~6.html +++ b/proc/get_xt~6.html @@ -210,7 +210,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/kron.html b/proc/kron.html index 412752342..6f794a9ef 100644 --- a/proc/kron.html +++ b/proc/kron.html @@ -221,9 +221,9 @@

    Called by

    proc~create - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_volume::bezier_volume%create @@ -248,27 +248,27 @@

    Called by

    - + -proc~create~4 - - -forcad_bezier_surface::bezier_surface%create +proc~create~3 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create~4->proc~kron +proc~create~3->proc~kron proc~create~5 - + -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create @@ -282,31 +282,31 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~4 - - + + +program~example_bezier_surface->proc~create~5 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create~5 - - + + +program~example_bezier_volume->proc~create + + @@ -327,16 +327,16 @@

    Called by

    program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create - - + + +program~example_nurbs_volume->proc~create~3 + + @@ -449,7 +449,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_wc.html b/proc/modify_wc.html index 7f1cec3ff..13cd5871e 100644 --- a/proc/modify_wc.html +++ b/proc/modify_wc.html @@ -84,15 +84,15 @@

    modify_Wc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine modify_Wc(this, W, num)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -243,33 +243,33 @@

    Calls

    - + -proc~set1~2 - +proc~set1 + forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~2->proc~set1 - + -proc~set2~2 - +proc~set2 + forcad_nurbs_surface::nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~2->proc~set2 @@ -282,9 +282,9 @@

    Calls

    - + -proc~set1~2->proc~get_nc~2 +proc~set1->proc~get_nc~2 @@ -297,9 +297,9 @@

    Calls

    - + -proc~set1~2->proc~get_order~2 +proc~set1->proc~get_order~2 @@ -312,15 +312,15 @@

    Calls

    - + -proc~set2~2->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set2~2->proc~get_nc~2 +proc~set2->proc~get_nc~2 @@ -354,24 +354,24 @@

    Calls

    - + -proc~get_multiplicity~2 - +proc~get_multiplicity + forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity - + -proc~get_multiplicity~2->proc~compute_multiplicity +proc~get_multiplicity->proc~compute_multiplicity @@ -490,7 +490,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_wc~3.html b/proc/modify_wc~3.html index f6321a9b2..f1be75fa6 100644 --- a/proc/modify_wc~3.html +++ b/proc/modify_wc~3.html @@ -84,15 +84,15 @@

    modify_Wc
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private pure subroutine modify_Wc(this, W, num)

    -

    Modify weight of a control point given its index.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(inout) @@ -217,171 +217,35 @@

    Calls

    - - + + proc~~modify_wc~~CallsGraph - + proc~modify_wc - -forcad_nurbs_volume::nurbs_volume%modify_Wc + +forcad_bezier_volume::bezier_volume%modify_Wc - + -none~set - - -forcad_nurbs_volume::nurbs_volume%set +proc~set + + +forcad_bezier_volume::bezier_volume%set - + -proc~modify_wc->none~set - - - - - -proc~set1 - - -forcad_nurbs_volume::nurbs_volume%set1 - - - - - -none~set->proc~set1 - - - - - -proc~set2 - - -forcad_nurbs_volume::nurbs_volume%set2 - - - - - -none~set->proc~set2 - - - - - -proc~get_nc - - -forcad_nurbs_volume::nurbs_volume%get_nc - - - - - -proc~set1->proc~get_nc - - - - - -proc~get_order - - -forcad_nurbs_volume::nurbs_volume%get_order - - - - - -proc~set1->proc~get_order - - - - - -proc~compute_knot_vector - - -forcad_utils::compute_knot_vector - - - - - -proc~set2->proc~compute_knot_vector - - - - - -proc~set2->proc~get_nc - - - - - -proc~repelem - - -forcad_utils::repelem - - - - - -proc~compute_knot_vector->proc~repelem - - - - - -proc~compute_multiplicity - - -forcad_utils::compute_multiplicity - - - - - -proc~get_nc->proc~compute_multiplicity - - - - - -proc~get_multiplicity - - -forcad_nurbs_volume::nurbs_volume%get_multiplicity - - - - - -proc~get_order->proc~get_multiplicity - - - - - -proc~get_multiplicity->proc~compute_multiplicity - - +proc~modify_wc->proc~set + + -
    +

    diff --git a/proc/modify_wc~2.html b/proc/modify_wc~2.html index 32b1bf72e..1d699af61 100644 --- a/proc/modify_wc~2.html +++ b/proc/modify_wc~2.html @@ -159,7 +159,7 @@

    Arguments

    - + class(nurbs_surface), intent(inout)
    @@ -160,8 +159,8 @@

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(inout) @@ -218,35 +217,171 @@

    Calls

    - - + + proc~~modify_wc~3~~CallsGraph - + proc~modify_wc~3 - -forcad_bezier_curve::bezier_curve%modify_Wc + +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~set - - -forcad_bezier_curve::bezier_curve%set +none~set~3 + + +forcad_nurbs_volume::nurbs_volume%set - + -proc~modify_wc~3->proc~set - - +proc~modify_wc~3->none~set~3 + + + + + +proc~set1~2 + + +forcad_nurbs_volume::nurbs_volume%set1 + + + + + +none~set~3->proc~set1~2 + + + + + +proc~set2~2 + + +forcad_nurbs_volume::nurbs_volume%set2 + + + + + +none~set~3->proc~set2~2 + + + + + +proc~get_nc~3 + + +forcad_nurbs_volume::nurbs_volume%get_nc + + + + + +proc~set1~2->proc~get_nc~3 + + + + + +proc~get_order~3 + + +forcad_nurbs_volume::nurbs_volume%get_order + + + + + +proc~set1~2->proc~get_order~3 + + + + + +proc~compute_knot_vector + + +forcad_utils::compute_knot_vector + + + + + +proc~set2~2->proc~compute_knot_vector + + + + + +proc~set2~2->proc~get_nc~3 + + + + + +proc~repelem + + +forcad_utils::repelem + + + + + +proc~compute_knot_vector->proc~repelem + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~3->proc~compute_multiplicity + + + + + +proc~get_multiplicity~2 + + +forcad_nurbs_volume::nurbs_volume%get_multiplicity + + + + + +proc~get_order~3->proc~get_multiplicity~2 + + + + + +proc~get_multiplicity~2->proc~compute_multiplicity + + -
    +

    diff --git a/proc/modify_wc~4.html b/proc/modify_wc~4.html index bf5afabe6..43dbfd7c1 100644 --- a/proc/modify_wc~4.html +++ b/proc/modify_wc~4.html @@ -84,15 +84,15 @@

    modify_Wc
  • - Source File + Source File
  • @@ -145,7 +145,7 @@

    private pure subroutine modify_Wc(this, W, num)

    Modify weight of a control point given its index.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    @@ -160,8 +160,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(inout) @@ -218,31 +218,31 @@

    Calls

    - + proc~~modify_wc~4~~CallsGraph - + proc~modify_wc~4 - -forcad_bezier_surface::bezier_surface%modify_Wc + +forcad_bezier_curve::bezier_curve%modify_Wc proc~set~2 - - -forcad_bezier_surface::bezier_surface%set + + +forcad_bezier_curve::bezier_curve%set proc~modify_wc~4->proc~set~2 - - + + @@ -355,7 +355,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_wc~5.html b/proc/modify_wc~5.html index b4046af94..9c20870f5 100644 --- a/proc/modify_wc~5.html +++ b/proc/modify_wc~5.html @@ -84,15 +84,15 @@

    modify_Wc
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine modify_Wc(this, W, num)

    +

    Modify weight of a control point given its index.

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +161,7 @@

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(inout) @@ -226,14 +227,14 @@

    Calls

    proc~modify_wc~5 -forcad_bezier_volume::bezier_volume%modify_Wc +forcad_bezier_surface::bezier_surface%modify_Wc proc~set~3 - + -forcad_bezier_volume::bezier_volume%set +forcad_bezier_surface::bezier_surface%set @@ -354,7 +355,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_wc~6.html b/proc/modify_wc~6.html index 02a7e16b8..b28f83888 100644 --- a/proc/modify_wc~6.html +++ b/proc/modify_wc~6.html @@ -463,7 +463,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_xc.html b/proc/modify_xc.html index cfc0dffa5..ac1917231 100644 --- a/proc/modify_xc.html +++ b/proc/modify_xc.html @@ -84,15 +84,15 @@

    modify_Xc
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

    private pure subroutine modify_Xc(this, X, num, dir)

    Type Bound

    -

    nurbs_volume

    +

    bezier_volume

    Arguments

    @@ -159,8 +159,8 @@

    Arguments

    @@ -232,171 +232,35 @@

    Calls

    - - + + proc~~modify_xc~~CallsGraph - + proc~modify_xc - -forcad_nurbs_volume::nurbs_volume%modify_Xc + +forcad_bezier_volume::bezier_volume%modify_Xc - + -none~set - - -forcad_nurbs_volume::nurbs_volume%set +proc~set + + +forcad_bezier_volume::bezier_volume%set - + -proc~modify_xc->none~set - - - - - -proc~set1 - - -forcad_nurbs_volume::nurbs_volume%set1 - - - - - -none~set->proc~set1 - - - - - -proc~set2 - - -forcad_nurbs_volume::nurbs_volume%set2 - - - - - -none~set->proc~set2 - - - - - -proc~get_nc - - -forcad_nurbs_volume::nurbs_volume%get_nc - - - - - -proc~set1->proc~get_nc - - - - - -proc~get_order - - -forcad_nurbs_volume::nurbs_volume%get_order - - - - - -proc~set1->proc~get_order - - - - - -proc~compute_knot_vector - - -forcad_utils::compute_knot_vector - - - - - -proc~set2->proc~compute_knot_vector - - - - - -proc~set2->proc~get_nc - - - - - -proc~repelem - - -forcad_utils::repelem - - - - - -proc~compute_knot_vector->proc~repelem - - - - - -proc~compute_multiplicity - - -forcad_utils::compute_multiplicity - - - - - -proc~get_nc->proc~compute_multiplicity - - - - - -proc~get_multiplicity - - -forcad_nurbs_volume::nurbs_volume%get_multiplicity - - - - - -proc~get_order->proc~get_multiplicity - - - - - -proc~get_multiplicity->proc~compute_multiplicity - - +proc~modify_xc->proc~set + + -
    +

    diff --git a/proc/modify_xc~2.html b/proc/modify_xc~2.html index 2145b1891..ee7c869c4 100644 --- a/proc/modify_xc~2.html +++ b/proc/modify_xc~2.html @@ -159,7 +159,7 @@

    Arguments

    @@ -204,7 +204,7 @@

    Arguments

    @@ -258,33 +258,33 @@

    Calls

    - + -proc~set1~2 - +proc~set1 + forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~2->proc~set1 - + -proc~set2~2 - +proc~set2 + forcad_nurbs_surface::nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~2->proc~set2 @@ -297,9 +297,9 @@

    Calls

    - + -proc~set1~2->proc~get_nc~2 +proc~set1->proc~get_nc~2 @@ -312,9 +312,9 @@

    Calls

    - + -proc~set1~2->proc~get_order~2 +proc~set1->proc~get_order~2 @@ -327,15 +327,15 @@

    Calls

    - + -proc~set2~2->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set2~2->proc~get_nc~2 +proc~set2->proc~get_nc~2 @@ -369,24 +369,24 @@

    Calls

    - + -proc~get_multiplicity~2 - +proc~get_multiplicity + forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity - + -proc~get_multiplicity~2->proc~compute_multiplicity +proc~get_multiplicity->proc~compute_multiplicity @@ -505,7 +505,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_xc~3.html b/proc/modify_xc~3.html index 20874f646..0bd6df876 100644 --- a/proc/modify_xc~3.html +++ b/proc/modify_xc~3.html @@ -84,15 +84,15 @@

    modify_Xc
  • - Source File + Source File
  • @@ -142,10 +142,9 @@

    private pure subroutine modify_Xc(this, X, num, dir)

    -

    Modify coordinate of a control point given its index and direction.

    Type Bound

    -

    bezier_curve

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(bezier_volume), intent(inout) @@ -204,7 +204,7 @@

    Arguments

    - + integer, intent(in)
    - + class(nurbs_surface), intent(inout)
    - + integer, intent(in)
    @@ -160,8 +159,8 @@

    Arguments

    @@ -233,35 +232,171 @@

    Calls

    - - + + proc~~modify_xc~3~~CallsGraph - + proc~modify_xc~3 - -forcad_bezier_curve::bezier_curve%modify_Xc + +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~set - - -forcad_bezier_curve::bezier_curve%set +none~set~3 + + +forcad_nurbs_volume::nurbs_volume%set - + -proc~modify_xc~3->proc~set - - +proc~modify_xc~3->none~set~3 + + + + + +proc~set1~2 + + +forcad_nurbs_volume::nurbs_volume%set1 + + + + + +none~set~3->proc~set1~2 + + + + + +proc~set2~2 + + +forcad_nurbs_volume::nurbs_volume%set2 + + + + + +none~set~3->proc~set2~2 + + + + + +proc~get_nc~3 + + +forcad_nurbs_volume::nurbs_volume%get_nc + + + + + +proc~set1~2->proc~get_nc~3 + + + + + +proc~get_order~3 + + +forcad_nurbs_volume::nurbs_volume%get_order + + + + + +proc~set1~2->proc~get_order~3 + + + + + +proc~compute_knot_vector + + +forcad_utils::compute_knot_vector + + + + + +proc~set2~2->proc~compute_knot_vector + + + + + +proc~set2~2->proc~get_nc~3 + + + + + +proc~repelem + + +forcad_utils::repelem + + + + + +proc~compute_knot_vector->proc~repelem + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~3->proc~compute_multiplicity + + + + + +proc~get_multiplicity~2 + + +forcad_nurbs_volume::nurbs_volume%get_multiplicity + + + + + +proc~get_order~3->proc~get_multiplicity~2 + + + + + +proc~get_multiplicity~2->proc~compute_multiplicity + + -
    +

    diff --git a/proc/modify_xc~4.html b/proc/modify_xc~4.html index 86f023ee7..95634fecf 100644 --- a/proc/modify_xc~4.html +++ b/proc/modify_xc~4.html @@ -84,15 +84,15 @@

    modify_Xc
  • - Source File + Source File
  • @@ -145,7 +145,7 @@

    private pure subroutine modify_Xc(this, X, num, dir)

    Modify coordinate of a control point given its index and direction.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(bezier_curve), + + class(nurbs_volume), intent(inout) @@ -205,7 +204,7 @@

    Arguments

    - + integer, intent(in)
    @@ -160,8 +160,8 @@

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(inout) @@ -233,31 +233,31 @@

    Calls

    - + proc~~modify_xc~4~~CallsGraph - + proc~modify_xc~4 - -forcad_bezier_surface::bezier_surface%modify_Xc + +forcad_bezier_curve::bezier_curve%modify_Xc proc~set~2 - - -forcad_bezier_surface::bezier_surface%set + + +forcad_bezier_curve::bezier_curve%set proc~modify_xc~4->proc~set~2 - - + + @@ -370,7 +370,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_xc~5.html b/proc/modify_xc~5.html index 88a0ed8d9..8d043c344 100644 --- a/proc/modify_xc~5.html +++ b/proc/modify_xc~5.html @@ -84,15 +84,15 @@

    modify_Xc
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine modify_Xc(this, X, num, dir)

    +

    Modify coordinate of a control point given its index and direction.

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    @@ -160,7 +161,7 @@

    Arguments

    @@ -244,9 +244,9 @@

    Called by

    proc~create - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_volume::bezier_volume%create @@ -271,27 +271,27 @@

    Called by

    - + -proc~create~4 - - -forcad_bezier_surface::bezier_surface%create +proc~create~3 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create~4->interface~ndgrid - - +proc~create~3->interface~ndgrid + + proc~create~5 - + -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create @@ -305,31 +305,31 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~4 - - + + +program~example_bezier_surface->proc~create~5 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create~5 - - + + +program~example_bezier_volume->proc~create + + @@ -350,16 +350,16 @@

    Called by

    program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create - - + + +program~example_nurbs_volume->proc~create~3 + + @@ -476,7 +476,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/ndgrid3.html b/proc/ndgrid3.html index c3128befc..67223cbdd 100644 --- a/proc/ndgrid3.html +++ b/proc/ndgrid3.html @@ -202,7 +202,7 @@

    Arguments

    @@ -259,9 +259,9 @@

    Called by

    proc~create - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_volume::bezier_volume%create @@ -286,27 +286,27 @@

    Called by

    - + -proc~create~4 - - -forcad_bezier_surface::bezier_surface%create +proc~create~3 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create~4->interface~ndgrid - - +proc~create~3->interface~ndgrid + + proc~create~5 - + -forcad_bezier_volume::bezier_volume%create +forcad_bezier_surface::bezier_surface%create @@ -320,31 +320,31 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~4 - - + + +program~example_bezier_surface->proc~create~5 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create~5 - - + + +program~example_bezier_volume->proc~create + + @@ -365,16 +365,16 @@

    Called by

    program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create - - + + +program~example_nurbs_volume->proc~create~3 + + @@ -491,7 +491,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/repelem.html b/proc/repelem.html index d93f2333d..24079190b 100644 --- a/proc/repelem.html +++ b/proc/repelem.html @@ -242,9 +242,9 @@

    Called by

    proc~set2 - + -forcad_nurbs_volume::nurbs_volume%set2 +forcad_nurbs_surface::nurbs_surface%set2 @@ -257,9 +257,9 @@

    Called by

    proc~set2~2 - + -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 @@ -284,33 +284,33 @@

    Called by

    - + -none~set - +none~set~2 + -forcad_nurbs_volume::nurbs_volume%set +forcad_nurbs_surface::nurbs_surface%set - + -none~set->proc~set2 +none~set~2->proc~set2 - + -none~set~2 - +none~set~3 + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~2 @@ -329,33 +329,33 @@

    Called by

    - + -proc~modify_wc - +proc~modify_wc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Wc +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~2->none~set~2 +proc~modify_wc~3->none~set~3 @@ -374,33 +374,33 @@

    Called by

    - + -proc~modify_xc - +proc~modify_xc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Xc +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -proc~modify_xc~2 - +proc~modify_xc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~2->none~set~2 +proc~modify_xc~3->none~set~3 @@ -438,31 +438,31 @@

    Called by

    program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + program~example_nurbs_surface->none~set~2 - - + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->none~set - - + + +program~example_nurbs_volume->none~set~3 + + @@ -598,7 +598,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set.html b/proc/set.html index 9d7c8961d..cc985acf0 100644 --- a/proc/set.html +++ b/proc/set.html @@ -79,20 +79,20 @@

    set
  • 14 statements + title=" 0.5% of total for procedures.">9 statements
  • - Source File + Source File
  • -

    private pure subroutine set(this, Xc, Wc) +

    private pure subroutine set(this, nc, Xc, Wc)

    Set control points and weights for the Bezier curve object.

    Type Bound

    -

    bezier_curve

    +

    bezier_volume

    Arguments

    - class(bezier_volume), + class(bezier_surface), intent(inout) @@ -241,14 +242,14 @@

    Calls

    proc~modify_xc~5 -forcad_bezier_volume::bezier_volume%modify_Xc +forcad_bezier_surface::bezier_surface%modify_Xc proc~set~3 - + -forcad_bezier_volume::bezier_volume%set +forcad_bezier_surface::bezier_surface%set @@ -369,7 +370,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/modify_xc~6.html b/proc/modify_xc~6.html index 0f36ba1e2..41143e808 100644 --- a/proc/modify_xc~6.html +++ b/proc/modify_xc~6.html @@ -478,7 +478,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/ndgrid2.html b/proc/ndgrid2.html index 72227ca81..2c165eeb1 100644 --- a/proc/ndgrid2.html +++ b/proc/ndgrid2.html @@ -187,7 +187,7 @@

    Arguments

    - + real(kind=rk), intent(out),
    - + real(kind=rk), intent(out),
    @@ -160,8 +160,8 @@

    Arguments

    + + + + + + + + @@ -190,7 +205,7 @@

    Arguments

    @@ -218,76 +233,61 @@

    Called by

    - - + + proc~~set~~CalledByGraph - + proc~set - -forcad_bezier_curve::bezier_curve%set + +forcad_bezier_volume::bezier_volume%set - + -proc~elevate_degree - - -forcad_bezier_curve::bezier_curve%elevate_degree +proc~modify_wc + + +forcad_bezier_volume::bezier_volume%modify_Wc - + -proc~elevate_degree->proc~set - - +proc~modify_wc->proc~set + + - + -proc~modify_wc~3 - - -forcad_bezier_curve::bezier_curve%modify_Wc +proc~modify_xc + + +forcad_bezier_volume::bezier_volume%modify_Xc - + -proc~modify_wc~3->proc~set - - +proc~modify_xc->proc~set + + - + -proc~modify_xc~3 - - -forcad_bezier_curve::bezier_curve%modify_Xc +program~example_bezier_volume + + +example_bezier_volume - + -proc~modify_xc~3->proc~set - - - - - -program~example_bezier_curve - - -example_bezier_curve - - - - - -program~example_bezier_curve->proc~set - - +program~example_bezier_volume->proc~set + + @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set1.html b/proc/set1.html index 30ef03501..4613513e1 100644 --- a/proc/set1.html +++ b/proc/set1.html @@ -79,20 +79,20 @@

    set1
  • 15 statements + title=" 0.7% of total for procedures.">14 statements
  • - Source File + Source File
  • -

    private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) +

    private pure subroutine set1(this, knot1, knot2, Xc, Wc)

    -

    Set control points and weights for the NURBS curve object.

    +

    Set control points and weights for the NURBS surface object.

    Type Bound

    -

    nurbs_volume

    +

    nurbs_surface

    Arguments

    - - class(bezier_curve), + + class(bezier_volume), intent(inout) @@ -175,7 +175,22 @@

    Arguments

    - + + integer, + intent(in) + + ::nc(:) + +
    + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    - - - - - - - - @@ -235,7 +220,7 @@

    Arguments

    @@ -272,35 +257,35 @@

    Calls

    proc~set1 -forcad_nurbs_volume::nurbs_volume%set1 +forcad_nurbs_surface::nurbs_surface%set1 - + -proc~get_nc - +proc~get_nc~2 + -forcad_nurbs_volume::nurbs_volume%get_nc +forcad_nurbs_surface::nurbs_surface%get_nc - + -proc~set1->proc~get_nc +proc~set1->proc~get_nc~2 - + -proc~get_order - +proc~get_order~2 + -forcad_nurbs_volume::nurbs_volume%get_order +forcad_nurbs_surface::nurbs_surface%get_order - + -proc~set1->proc~get_order +proc~set1->proc~get_order~2 @@ -313,24 +298,24 @@

    Calls

    - + -proc~get_nc->proc~compute_multiplicity +proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity - + -forcad_nurbs_volume::nurbs_volume%get_multiplicity +forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order->proc~get_multiplicity +proc~get_order~2->proc~get_multiplicity @@ -447,65 +432,65 @@

    Called by

    proc~set1 -forcad_nurbs_volume::nurbs_volume%set1 +forcad_nurbs_surface::nurbs_surface%set1 - + -none~set - +none~set~2 + -forcad_nurbs_volume::nurbs_volume%set +forcad_nurbs_surface::nurbs_surface%set - + -none~set->proc~set1 +none~set~2->proc~set1 - + -proc~modify_wc - +proc~modify_wc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Wc +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_xc - +proc~modify_xc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Xc +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -program~example_nurbs_volume - +program~example_nurbs_surface + -example_nurbs_volume +example_nurbs_surface - + -program~example_nurbs_volume->none~set +program~example_nurbs_surface->none~set~2 @@ -624,7 +609,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set1~2.html b/proc/set1~2.html index 9cdd84429..6a6030453 100644 --- a/proc/set1~2.html +++ b/proc/set1~2.html @@ -79,20 +79,20 @@

    set1
  • 14 statements + title=" 0.8% of total for procedures.">15 statements
  • - Source File + Source File
  • -

    private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

    private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

    -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the NURBS curve object.

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(nurbs_surface), intent(inout) @@ -205,22 +205,7 @@

    Arguments

    - - real(kind=rk), - intent(in) - - ::knot3(:) - -
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    + + + + + + + + @@ -220,7 +235,7 @@

    Arguments

    @@ -257,35 +272,35 @@

    Calls

    proc~set1~2 -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -proc~get_nc~2 - +proc~get_nc~3 + -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1~2->proc~get_nc~2 +proc~set1~2->proc~get_nc~3 - + -proc~get_order~2 - +proc~get_order~3 + -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1~2->proc~get_order~2 +proc~set1~2->proc~get_order~3 @@ -298,24 +313,24 @@

    Calls

    - + -proc~get_nc~2->proc~compute_multiplicity +proc~get_nc~3->proc~compute_multiplicity proc~get_multiplicity~2 - + -forcad_nurbs_surface::nurbs_surface%get_multiplicity +forcad_nurbs_volume::nurbs_volume%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~3->proc~get_multiplicity~2 @@ -432,65 +447,65 @@

    Called by

    proc~set1~2 -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~2 - +none~set~3 + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set1~2 +none~set~3->proc~set1~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~2->none~set~2 +proc~modify_wc~3->none~set~3 - + -proc~modify_xc~2 - +proc~modify_xc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~2->none~set~2 +proc~modify_xc~3->none~set~3 - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_volume->none~set~3 @@ -609,7 +624,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set1~3.html b/proc/set1~3.html index b84ffe604..8d91822b3 100644 --- a/proc/set1~3.html +++ b/proc/set1~3.html @@ -190,7 +190,7 @@

    Arguments

    @@ -205,7 +205,7 @@

    Arguments

    @@ -573,7 +573,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set2.html b/proc/set2.html index ff73a408b..9c8e634b7 100644 --- a/proc/set2.html +++ b/proc/set2.html @@ -79,20 +79,20 @@

    set2
  • 20 statements + title=" 0.9% of total for procedures.">17 statements
  • - Source File + Source File
  • -

    private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) +

    private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc)

    -

    Set control points and weights for the NURBS curve object.

    +

    Set control points and weights for the NURBS surface object.

    Type Bound

    -

    nurbs_volume

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -205,7 +205,22 @@

    Arguments

    - + + real(kind=rk), + intent(in) + + ::knot3(:) + +
    + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    - - - - - - - - @@ -265,22 +250,7 @@

    Arguments

    - - - - - - - - @@ -295,7 +265,7 @@

    Arguments

    @@ -332,7 +302,7 @@

    Calls

    proc~set2 -forcad_nurbs_volume::nurbs_volume%set2 +forcad_nurbs_surface::nurbs_surface%set2 @@ -349,18 +319,18 @@

    Calls

    - + -proc~get_nc - +proc~get_nc~2 + -forcad_nurbs_volume::nurbs_volume%get_nc +forcad_nurbs_surface::nurbs_surface%get_nc - + -proc~set2->proc~get_nc +proc~set2->proc~get_nc~2 @@ -388,9 +358,9 @@

    Calls

    - + -proc~get_nc->proc~compute_multiplicity +proc~get_nc~2->proc~compute_multiplicity @@ -501,65 +471,65 @@

    Called by

    proc~set2 -forcad_nurbs_volume::nurbs_volume%set2 +forcad_nurbs_surface::nurbs_surface%set2 - + -none~set - +none~set~2 + -forcad_nurbs_volume::nurbs_volume%set +forcad_nurbs_surface::nurbs_surface%set - + -none~set->proc~set2 +none~set~2->proc~set2 - + -proc~modify_wc - +proc~modify_wc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Wc +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc->none~set +proc~modify_wc~2->none~set~2 - + -proc~modify_xc - +proc~modify_xc~2 + -forcad_nurbs_volume::nurbs_volume%modify_Xc +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc->none~set +proc~modify_xc~2->none~set~2 - + -program~example_nurbs_volume - +program~example_nurbs_surface + -example_nurbs_volume +example_nurbs_surface - + -program~example_nurbs_volume->none~set +program~example_nurbs_surface->none~set~2 @@ -678,7 +648,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set2~2.html b/proc/set2~2.html index 82965e7e3..d303ecd03 100644 --- a/proc/set2~2.html +++ b/proc/set2~2.html @@ -79,20 +79,20 @@

    set2
  • 17 statements + title=" 1.1% of total for procedures.">20 statements
  • - Source File + Source File
  • -

    private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) +

    private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc)

    -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the NURBS curve object.

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(nurbs_volume), + + class(nurbs_surface), intent(inout) @@ -205,22 +205,7 @@

    Arguments

    - - real(kind=rk), - intent(in) - - ::Xth_dir3(:) - -
    - + integer, intent(in)
    - - integer, - intent(in) - - ::continuity3(:) - -
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    + + + + + + + + @@ -250,7 +265,22 @@

    Arguments

    + + + + + + + + @@ -265,7 +295,7 @@

    Arguments

    @@ -302,7 +332,7 @@

    Calls

    proc~set2~2 -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 @@ -319,18 +349,18 @@

    Calls

    - + -proc~get_nc~2 - +proc~get_nc~3 + -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set2~2->proc~get_nc~2 +proc~set2~2->proc~get_nc~3 @@ -358,9 +388,9 @@

    Calls

    - + -proc~get_nc~2->proc~compute_multiplicity +proc~get_nc~3->proc~compute_multiplicity @@ -471,65 +501,65 @@

    Called by

    proc~set2~2 -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~2 - +none~set~3 + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set2~2 +none~set~3->proc~set2~2 - + -proc~modify_wc~2 - +proc~modify_wc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~2->none~set~2 +proc~modify_wc~3->none~set~3 - + -proc~modify_xc~2 - +proc~modify_xc~3 + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~2->none~set~2 +proc~modify_xc~3->none~set~3 - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_volume->none~set~3 @@ -648,7 +678,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set2~3.html b/proc/set2~3.html index 435912e40..c6a2ce757 100644 --- a/proc/set2~3.html +++ b/proc/set2~3.html @@ -220,7 +220,7 @@

    Arguments

    @@ -235,7 +235,7 @@

    Arguments

    @@ -584,7 +584,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set~2.html b/proc/set~2.html index da1960afe..78ba921b8 100644 --- a/proc/set~2.html +++ b/proc/set~2.html @@ -79,20 +79,20 @@

    set
  • 9 statements + title=" 0.7% of total for procedures.">14 statements
  • - Source File + Source File
  • -

    private pure subroutine set(this, nc, Xc, Wc) +

    private pure subroutine set(this, Xc, Wc)

    Set control points and weights for the Bezier curve object.

    Type Bound

    -

    bezier_surface

    +

    bezier_curve

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -205,7 +205,22 @@

    Arguments

    - + + real(kind=rk), + intent(in) + + ::Xth_dir3(:) + +
    + integer, intent(in)
    - + + integer, + intent(in) + + ::continuity3(:) + +
    + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    - - - - - - - - @@ -205,7 +190,7 @@

    Arguments

    @@ -233,61 +218,76 @@

    Called by

    - - + + proc~~set~2~~CalledByGraph - + proc~set~2 - -forcad_bezier_surface::bezier_surface%set + +forcad_bezier_curve::bezier_curve%set - + +proc~elevate_degree + + +forcad_bezier_curve::bezier_curve%elevate_degree + + + + + +proc~elevate_degree->proc~set~2 + + + + + proc~modify_wc~4 - - -forcad_bezier_surface::bezier_surface%modify_Wc + + +forcad_bezier_curve::bezier_curve%modify_Wc - + proc~modify_wc~4->proc~set~2 - - + + - + proc~modify_xc~4 - - -forcad_bezier_surface::bezier_surface%modify_Xc + + +forcad_bezier_curve::bezier_curve%modify_Xc - + proc~modify_xc~4->proc~set~2 - - + + - - -program~example_bezier_surface - - -example_bezier_surface + + +program~example_bezier_curve + + +example_bezier_curve - - -program~example_bezier_surface->proc~set~2 - - + + +program~example_bezier_curve->proc~set~2 + + @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/proc/set~3.html b/proc/set~3.html index ae35db8c8..2099f68ac 100644 --- a/proc/set~3.html +++ b/proc/set~3.html @@ -84,15 +84,15 @@

    set
  • - Source File + Source File
  • @@ -145,7 +145,7 @@

    private pure subroutine set(this, nc, Xc, Wc)

    Set control points and weights for the Bezier curve object.

    Type Bound

    -

    bezier_volume

    +

    bezier_surface

    Arguments

    - - class(bezier_surface), + + class(bezier_curve), intent(inout) @@ -175,22 +175,7 @@

    Arguments

    - - integer, - intent(in) - - ::nc(:) - -
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -161,7 +161,7 @@

    Arguments

    @@ -205,7 +205,7 @@

    Arguments

    @@ -242,14 +242,14 @@

    Called by

    proc~set~3 -forcad_bezier_volume::bezier_volume%set +forcad_bezier_surface::bezier_surface%set proc~modify_wc~5 - + -forcad_bezier_volume::bezier_volume%modify_Wc +forcad_bezier_surface::bezier_surface%modify_Wc @@ -262,9 +262,9 @@

    Called by

    proc~modify_xc~5 - + -forcad_bezier_volume::bezier_volume%modify_Xc +forcad_bezier_surface::bezier_surface%modify_Xc @@ -274,18 +274,18 @@

    Called by

    - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~set~3 +program~example_bezier_surface->proc~set~3 @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_bezier_curve.html b/program/example_bezier_curve.html index 64c3ab960..2be14410e 100644 --- a/program/example_bezier_curve.html +++ b/program/example_bezier_curve.html @@ -116,9 +116,9 @@

    Variables

    - Wc - Xc - bezier + Wc + Xc + bezier
    @@ -139,7 +139,7 @@

    Functions

    @@ -460,93 +460,93 @@

    Calls

    example_bezier_curve - + -proc~create~3 - +proc~create~4 + forcad_bezier_curve::bezier_curve%create - + -program~example_bezier_curve->proc~create~3 +program~example_bezier_curve->proc~create~4 - + -proc~export_xc~3 - +proc~export_xc~4 + forcad_bezier_curve::bezier_curve%export_Xc - + -program~example_bezier_curve->proc~export_xc~3 +program~example_bezier_curve->proc~export_xc~4 - + -proc~export_xg~3 - +proc~export_xg~4 + forcad_bezier_curve::bezier_curve%export_Xg - + -program~example_bezier_curve->proc~export_xg~3 +program~example_bezier_curve->proc~export_xg~4 - + -proc~finalize~3 - +proc~finalize~4 + forcad_bezier_curve::bezier_curve%finalize - + -program~example_bezier_curve->proc~finalize~3 +program~example_bezier_curve->proc~finalize~4 - + -proc~generate_xc~3 - +proc~generate_xc~4 + example_bezier_curve::generate_Xc - + -program~example_bezier_curve->proc~generate_xc~3 +program~example_bezier_curve->proc~generate_xc~4 - + -proc~set - +proc~set~2 + forcad_bezier_curve::bezier_curve%set - + -program~example_bezier_curve->proc~set +program~example_bezier_curve->proc~set~2 @@ -559,39 +559,39 @@

    Calls

    - + -proc~create~3->proc~basis_bernstein +proc~create~4->proc~basis_bernstein - + -proc~get_elem_xc~3 - +proc~get_elem_xc~4 + forcad_bezier_curve::bezier_curve%get_elem_Xc - + -proc~export_xc~3->proc~get_elem_xc~3 +proc~export_xc~4->proc~get_elem_xc~4 - + -proc~get_elem_xg~3 - +proc~get_elem_xg~4 + forcad_bezier_curve::bezier_curve%get_elem_Xg - + -proc~export_xg~3->proc~get_elem_xg~3 +proc~export_xg~4->proc~get_elem_xg~4 @@ -604,15 +604,15 @@

    Calls

    - + -proc~get_elem_xc~3->interface~elemconn_c0 +proc~get_elem_xc~4->interface~elemconn_c0 - + -proc~get_elem_xg~3->interface~elemconn_c0 +proc~get_elem_xg~4->interface~elemconn_c0 @@ -764,7 +764,7 @@

    Variables

    @@ -217,7 +217,7 @@

    Components

    @@ -234,7 +234,7 @@

    Components

    @@ -251,7 +251,7 @@

    Components

    @@ -268,7 +268,7 @@

    Components

    @@ -285,7 +285,7 @@

    Components

    @@ -313,7 +313,7 @@

    Type-Bound Procedures

    - +

    procedure, public :: create @@ -329,7 +329,7 @@

    • - private pure subroutine create(this, res, Xt) + private pure subroutine create(this, res, Xt)

      Author
      Seyed Ali Ghasemi
      @@ -471,7 +471,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -487,7 +487,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -550,7 +550,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -566,7 +566,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -629,7 +629,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -645,7 +645,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -693,7 +693,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -709,7 +709,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -762,7 +762,7 @@

              - +

              procedure, public :: get_Xc @@ -778,7 +778,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -831,7 +831,7 @@

                - +

                procedure, public :: get_Xg @@ -847,7 +847,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -916,7 +916,7 @@

                  • - private pure function get_Xt(this) result(Xt) + private pure function get_Xt(this) result(Xt)

                    Author
                    Seyed Ali Ghasemi
                    @@ -969,7 +969,7 @@

                    - +

                    procedure, public :: get_elem_Xc @@ -985,7 +985,7 @@

                    • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1063,7 +1063,7 @@

                      Arguments

                      - +

                      procedure, public :: get_elem_Xg @@ -1079,7 +1079,7 @@

                      • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1157,7 +1157,7 @@

                        Arguments

                        - +

                        procedure, public :: get_nc @@ -1173,7 +1173,7 @@

                        • - private pure function get_nc(this) result(nc) + private pure function get_nc(this) result(nc)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1226,7 +1226,7 @@

                          - +

                          procedure, public :: get_ng @@ -1242,7 +1242,7 @@

                          • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1295,7 +1295,7 @@

                            - +

                            procedure, public :: get_order @@ -1311,7 +1311,7 @@

    @@ -217,7 +217,7 @@

    Components

    @@ -234,7 +234,7 @@

    Components

    @@ -251,7 +251,7 @@

    Components

    @@ -268,7 +268,7 @@

    Components

    @@ -285,7 +285,7 @@

    Components

    @@ -302,7 +302,7 @@

    Components

    @@ -330,7 +330,7 @@

    Type-Bound Procedures

    - +

    procedure, public :: create @@ -346,7 +346,7 @@

    • - private pure subroutine create(this, res1, res2, Xt1, Xt2) + private pure subroutine create(this, res1, res2, Xt1, Xt2)

      Author
      Seyed Ali Ghasemi
      @@ -454,7 +454,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -470,7 +470,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -533,7 +533,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -549,7 +549,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -612,7 +612,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -628,7 +628,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -676,7 +676,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -692,7 +692,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -745,7 +745,7 @@

              - +

              procedure, public :: get_Xc @@ -761,7 +761,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -814,7 +814,7 @@

                - +

                procedure, public :: get_Xg @@ -830,7 +830,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -899,7 +899,7 @@

                  • - private pure function get_Xt(this, dir) result(Xt) + private pure function get_Xt(this, dir) result(Xt)

                    Author
                    Seyed Ali Ghasemi
                    @@ -967,7 +967,7 @@

                    - +

                    procedure, public :: get_elem_Xc @@ -983,7 +983,7 @@

                    • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1061,7 +1061,7 @@

                      Arguments

                      - +

                      procedure, public :: get_elem_Xg @@ -1077,7 +1077,7 @@

                      • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1155,7 +1155,7 @@

                        Arguments

                        - +

                        procedure, public :: get_nc @@ -1171,7 +1171,7 @@

                        • - private pure function get_nc(this) result(nc) + private pure function get_nc(this) result(nc)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1224,7 +1224,7 @@

                          - +

                          procedure, public :: get_ng @@ -1240,7 +1240,7 @@

                          • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1293,7 +1293,7 @@

                            - +

                            procedure, public :: get_order @@ -1309,7 +1309,7 @@

    @@ -223,7 +223,7 @@

    Components

    @@ -240,7 +240,7 @@

    Components

    @@ -257,7 +257,7 @@

    Components

    @@ -274,7 +274,7 @@

    Components

    @@ -291,7 +291,7 @@

    Components

    @@ -308,7 +308,7 @@

    Components

    @@ -325,7 +325,7 @@

    Components

    @@ -353,7 +353,7 @@

    Type-Bound Procedures

    - +

    procedure, public :: create @@ -369,7 +369,7 @@

    • - private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) + private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3)

      Author
      Seyed Ali Ghasemi
      @@ -507,7 +507,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -523,7 +523,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -586,7 +586,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -602,7 +602,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -665,7 +665,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -681,7 +681,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -729,7 +729,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -745,7 +745,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -798,7 +798,7 @@

              - +

              procedure, public :: get_Xc @@ -814,7 +814,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -867,7 +867,7 @@

                - +

                procedure, public :: get_Xg @@ -883,7 +883,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -936,7 +936,7 @@

                  - +

                  procedure, public :: get_elem_Xc @@ -952,7 +952,7 @@

                  • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                    Author
                    Seyed Ali Ghasemi
                    @@ -1030,7 +1030,7 @@

                    Arguments

                    - +

                    procedure, public :: get_elem_Xg @@ -1046,7 +1046,7 @@

                    • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1124,7 +1124,7 @@

                      Arguments

                      - +

                      procedure, public :: get_nc @@ -1140,7 +1140,7 @@

                      • - private pure function get_nc(this) result(nc) + private pure function get_nc(this) result(nc)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1193,7 +1193,7 @@

                        - +

                        procedure, public :: get_ng @@ -1209,7 +1209,7 @@

                        • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1262,7 +1262,7 @@

                          - +

                          procedure, public :: get_order @@ -1278,7 +1278,7 @@

                          • - private pure function get_order(this) result(order) + private pure function get_order(this) result(order)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1331,7 +1331,7 @@

                            - +

                            procedure, public :: modify_Wc @@ -1347,7 +1347,7 @@

                            • - private pure subroutine modify_Wc(this, W, num) + private pure subroutine modify_Wc(this, W, num)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1425,7 +1425,7 @@

                              Arguments

                              - +

                              procedure, public :: modify_Xc @@ -1441,7 +1441,7 @@

                              • - private pure subroutine modify_Xc(this, X, num, dir) + private pure subroutine modify_Xc(this, X, num, dir)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1534,7 +1534,7 @@

                                Arguments

                                - +

                                procedure, public :: set @@ -1550,7 +1550,7 @@

                                • - private pure subroutine set(this, nc, Xc, Wc) + private pure subroutine set(this, nc, Xc, Wc)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1689,7 +1689,7 @@

                                  Source Code

                                  Documentation generated by FORD - on 2024-03-30T00:59:12.067358

                                  + on 2024-03-30T01:06:29.265865


                                diff --git a/type/nurbs_curve.html b/type/nurbs_curve.html index 6c6c6ebc8..c0b912ec6 100644 --- a/type/nurbs_curve.html +++ b/type/nurbs_curve.html @@ -119,8 +119,8 @@

                                Variables

                                - Wc - Xc + Wc + Xc Xg Xt knot @@ -206,7 +206,7 @@

                                Components

    @@ -223,7 +223,7 @@

    Components

    @@ -2234,7 +2234,7 @@

    Arguments

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/type/nurbs_surface.html b/type/nurbs_surface.html index a819f73eb..5d0cfed97 100644 --- a/type/nurbs_surface.html +++ b/type/nurbs_surface.html @@ -119,16 +119,16 @@

    Variables

    - Wc - Xc + Wc + Xc Xg Xt1 Xt2 - knot1 - knot2 + knot1 + knot2 nc ng - order + order
    @@ -162,20 +162,20 @@

    Type-Bound Procedures

    get_Wcget_Xcget_Xg - get_Xt - get_continuity + get_Xt + get_continuityget_elem_Xcget_elem_Xg - get_knot - get_multiplicity + get_knot + get_multiplicityget_ncget_ngget_ordermodify_Wcmodify_Xcset - set1 - set2 + set1 + set2 @@ -208,7 +208,7 @@

    Components

    @@ -225,7 +225,7 @@

    Components

    @@ -293,7 +293,7 @@

    Components

    @@ -310,7 +310,7 @@

    Components

    @@ -361,7 +361,7 @@

    Components

    @@ -942,7 +942,7 @@

    - +

    procedure, public :: get_Xt @@ -1026,7 +1026,7 @@

    - +

    procedure, public :: get_continuity @@ -1042,7 +1042,7 @@

    @@ -227,7 +227,7 @@

    Components

    @@ -244,7 +244,7 @@

    Components

    @@ -261,7 +261,7 @@

    Components

    @@ -278,7 +278,7 @@

    Components

    @@ -295,7 +295,7 @@

    Components

    @@ -312,7 +312,7 @@

    Components

    @@ -329,7 +329,7 @@

    Components

    @@ -363,7 +363,7 @@

    Components

    @@ -380,7 +380,7 @@

    Components

    @@ -397,7 +397,7 @@

    Components

    @@ -425,7 +425,7 @@

    Type-Bound Procedures

    - +

    procedure, public :: create @@ -441,7 +441,7 @@

    • - private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) + private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3)

      Author
      Seyed Ali Ghasemi
      @@ -579,7 +579,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -595,7 +595,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -658,7 +658,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -674,7 +674,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -737,7 +737,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -753,7 +753,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -801,7 +801,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -817,7 +817,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -870,7 +870,7 @@

              - +

              procedure, public :: get_Xc @@ -886,7 +886,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -939,7 +939,7 @@

                - +

                procedure, public :: get_Xg @@ -955,7 +955,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -1008,7 +1008,7 @@

                  - +

                  procedure, public :: get_Xt @@ -1024,7 +1024,7 @@

                  • - private pure function get_Xt(this, dir) result(Xt) + private pure function get_Xt(this, dir) result(Xt)

                    Author
                    Seyed Ali Ghasemi
                    @@ -1092,7 +1092,7 @@

                    - +

                    procedure, public :: get_continuity @@ -1108,7 +1108,7 @@

                    • - private pure function get_continuity(this, dir) result(c) + private pure function get_continuity(this, dir) result(c)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1176,7 +1176,7 @@

                      - +

                      procedure, public :: get_elem_Xc @@ -1192,7 +1192,7 @@

                      • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1270,7 +1270,7 @@

                        Arguments

                        - +

                        procedure, public :: get_elem_Xg @@ -1286,7 +1286,7 @@

                        • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1364,7 +1364,7 @@

                          Arguments

                          - +

                          procedure, public :: get_knot @@ -1380,7 +1380,7 @@

                          • - private pure function get_knot(this, dir) result(knot) + private pure function get_knot(this, dir) result(knot)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1448,7 +1448,7 @@

                            - +

                            procedure, public :: get_multiplicity @@ -1464,7 +1464,7 @@

                            • - private pure function get_multiplicity(this, dir) result(m) + private pure function get_multiplicity(this, dir) result(m)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1532,7 +1532,7 @@

                              - +

                              procedure, public :: get_nc @@ -1548,7 +1548,7 @@

                              • - private pure function get_nc(this, dir) result(nc) + private pure function get_nc(this, dir) result(nc)

                                Author
                                Seyed Ali Ghasemi
                                @@ -1616,7 +1616,7 @@

                                - +

                                procedure, public :: get_ng @@ -1632,7 +1632,7 @@

                                • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1685,7 +1685,7 @@

                                  - +

                                  procedure, public :: get_order @@ -1701,7 +1701,7 @@

                                  • - private pure function get_order(this) result(order) + private pure function get_order(this) result(order)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1754,7 +1754,7 @@

                                    - +

                                    procedure, public :: modify_Wc @@ -1770,7 +1770,7 @@

                                    • - private pure subroutine modify_Wc(this, W, num) + private pure subroutine modify_Wc(this, W, num)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1848,7 +1848,7 @@

                                      Arguments

                                      - +

                                      procedure, public :: modify_Xc @@ -1864,7 +1864,7 @@

                                      • - private pure subroutine modify_Xc(this, X, num, dir) + private pure subroutine modify_Xc(this, X, num, dir)

                                        Author
                                        Seyed Ali Ghasemi
                                        @@ -1957,17 +1957,17 @@

                                        Arguments

                                        - +

                                        generic, public :: - set => set1, set2 + set => set1, set2

                                        • - private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -2085,7 +2085,7 @@

                                          Arguments

                                        • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -2268,7 +2268,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: set1 @@ -2284,7 +2284,7 @@

                                          • - private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -2407,7 +2407,7 @@

                                            Arguments

                                            - +

                                            procedure, public :: set2 @@ -2423,7 +2423,7 @@

                                            • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -2621,7 +2621,7 @@

                                              Arguments

                                              Documentation generated by FORD - on 2024-03-30T00:59:12.067358

                                              + on 2024-03-30T01:06:29.265865


    - class(bezier_volume), + class(bezier_surface), intent(inout) @@ -190,7 +190,7 @@

    Arguments

    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    - + real(kind=rk), @@ -780,7 +780,7 @@

    Variables

    - + real(kind=rk), @@ -796,7 +796,7 @@

    Variables

    - + type(bezier_curve) @@ -824,7 +824,7 @@

    Variables

    Functions

    -

    function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points) +

    function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points)

    @@ -1005,7 +1005,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_bezier_surface.html b/program/example_bezier_surface.html index 631d61f2e..ba84fc74c 100644 --- a/program/example_bezier_surface.html +++ b/program/example_bezier_surface.html @@ -116,8 +116,8 @@

    Variables

    - Wc - Xc + Wc + Xc bezier
    @@ -460,63 +460,63 @@

    Calls

    example_bezier_surface - + -proc~create~4 - +proc~create~5 + forcad_bezier_surface::bezier_surface%create - + -program~example_bezier_surface->proc~create~4 +program~example_bezier_surface->proc~create~5 - + -proc~export_xc~4 - +proc~export_xc~5 + forcad_bezier_surface::bezier_surface%export_Xc - + -program~example_bezier_surface->proc~export_xc~4 +program~example_bezier_surface->proc~export_xc~5 - + -proc~export_xg~4 - +proc~export_xg~5 + forcad_bezier_surface::bezier_surface%export_Xg - + -program~example_bezier_surface->proc~export_xg~4 +program~example_bezier_surface->proc~export_xg~5 - + -proc~finalize~4 - +proc~finalize~5 + forcad_bezier_surface::bezier_surface%finalize - + -program~example_bezier_surface->proc~finalize~4 +program~example_bezier_surface->proc~finalize~5 @@ -535,18 +535,18 @@

    Calls

    - + -proc~set~2 - +proc~set~3 + forcad_bezier_surface::bezier_surface%set - + -program~example_bezier_surface->proc~set~2 +program~example_bezier_surface->proc~set~3 @@ -559,9 +559,9 @@

    Calls

    - + -proc~create~4->interface~ndgrid +proc~create~5->interface~ndgrid @@ -574,9 +574,9 @@

    Calls

    - + -proc~create~4->proc~basis_bernstein +proc~create~5->proc~basis_bernstein @@ -589,39 +589,39 @@

    Calls

    - + -proc~create~4->proc~kron +proc~create~5->proc~kron - + -proc~get_elem_xc~4 - +proc~get_elem_xc~5 + forcad_bezier_surface::bezier_surface%get_elem_Xc - + -proc~export_xc~4->proc~get_elem_xc~4 +proc~export_xc~5->proc~get_elem_xc~5 - + -proc~get_elem_xg~4 - +proc~get_elem_xg~5 + forcad_bezier_surface::bezier_surface%get_elem_Xg - + -proc~export_xg~4->proc~get_elem_xg~4 +proc~export_xg~5->proc~get_elem_xg~5 @@ -664,15 +664,15 @@

    Calls

    - + -proc~get_elem_xc~4->interface~elemconn_c0 +proc~get_elem_xc~5->interface~elemconn_c0 - + -proc~get_elem_xg~4->interface~elemconn_c0 +proc~get_elem_xg~5->interface~elemconn_c0 @@ -824,7 +824,7 @@

    Variables

    - + real(kind=rk), @@ -840,7 +840,7 @@

    Variables

    - + real(kind=rk), @@ -1053,7 +1053,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_bezier_volume.html b/program/example_bezier_volume.html index 98430f003..861b40aa9 100644 --- a/program/example_bezier_volume.html +++ b/program/example_bezier_volume.html @@ -116,9 +116,9 @@

    Variables

    - Wc - Xc - bezier + Wc + Xc + bezier
    @@ -139,7 +139,7 @@

    Functions

    @@ -460,93 +460,93 @@

    Calls

    example_bezier_volume - + -proc~create~5 - +proc~create + forcad_bezier_volume::bezier_volume%create - + -program~example_bezier_volume->proc~create~5 +program~example_bezier_volume->proc~create - + -proc~export_xc~5 - +proc~export_xc + forcad_bezier_volume::bezier_volume%export_Xc - + -program~example_bezier_volume->proc~export_xc~5 +program~example_bezier_volume->proc~export_xc - + -proc~export_xg~5 - +proc~export_xg + forcad_bezier_volume::bezier_volume%export_Xg - + -program~example_bezier_volume->proc~export_xg~5 +program~example_bezier_volume->proc~export_xg - + -proc~finalize~5 - +proc~finalize + forcad_bezier_volume::bezier_volume%finalize - + -program~example_bezier_volume->proc~finalize~5 +program~example_bezier_volume->proc~finalize - + -proc~generate_xc~5 - +proc~generate_xc~3 + example_bezier_volume::generate_Xc - + -program~example_bezier_volume->proc~generate_xc~5 +program~example_bezier_volume->proc~generate_xc~3 - + -proc~set~3 - +proc~set + forcad_bezier_volume::bezier_volume%set - + -program~example_bezier_volume->proc~set~3 +program~example_bezier_volume->proc~set @@ -559,9 +559,9 @@

    Calls

    - + -proc~create~5->interface~ndgrid +proc~create->interface~ndgrid @@ -574,9 +574,9 @@

    Calls

    - + -proc~create~5->proc~basis_bernstein +proc~create->proc~basis_bernstein @@ -589,39 +589,39 @@

    Calls

    - + -proc~create~5->proc~kron +proc~create->proc~kron - + -proc~get_elem_xc~5 - +proc~get_elem_xc + forcad_bezier_volume::bezier_volume%get_elem_Xc - + -proc~export_xc~5->proc~get_elem_xc~5 +proc~export_xc->proc~get_elem_xc - + -proc~get_elem_xg~5 - +proc~get_elem_xg + forcad_bezier_volume::bezier_volume%get_elem_Xg - + -proc~export_xg~5->proc~get_elem_xg~5 +proc~export_xg->proc~get_elem_xg @@ -664,15 +664,15 @@

    Calls

    - + -proc~get_elem_xc~5->interface~elemconn_c0 +proc~get_elem_xc->interface~elemconn_c0 - + -proc~get_elem_xg~5->interface~elemconn_c0 +proc~get_elem_xg->interface~elemconn_c0 @@ -824,7 +824,7 @@

    Variables

    - + real(kind=rk), @@ -840,7 +840,7 @@

    Variables

    - + real(kind=rk), @@ -856,7 +856,7 @@

    Variables

    - + type(bezier_volume) @@ -884,7 +884,7 @@

    Variables

    Functions

    -

    function generate_Xc(L) result(control_points) +

    function generate_Xc(L) result(control_points)

    @@ -1018,7 +1018,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_nurbs_curve.html b/program/example_nurbs_curve.html index b30c5110b..15f8a66cb 100644 --- a/program/example_nurbs_curve.html +++ b/program/example_nurbs_curve.html @@ -116,9 +116,9 @@

    Variables

    - Wc - Xc - knot + Wc + Xc + knot nurbs
    @@ -836,7 +836,7 @@

    Variables

    - + real(kind=rk), @@ -852,7 +852,7 @@

    Variables

    - + real(kind=rk), @@ -868,7 +868,7 @@

    Variables

    - + real(kind=rk) @@ -983,7 +983,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_nurbs_surface.html b/program/example_nurbs_surface.html index 1bcaaacc0..56083cf13 100644 --- a/program/example_nurbs_surface.html +++ b/program/example_nurbs_surface.html @@ -116,11 +116,11 @@

    Variables

    - Wc - Xc - knot1 - knot2 - nurbs + Wc + Xc + knot1 + knot2 + nurbs
    @@ -141,7 +141,7 @@

    Functions

    @@ -537,48 +537,48 @@

    Calls

    - + -proc~generate_xc~2 - +proc~generate_xc~5 + example_nurbs_surface::generate_Xc - + -program~example_nurbs_surface->proc~generate_xc~2 +program~example_nurbs_surface->proc~generate_xc~5 - + -proc~set1~2 - +proc~set1 + forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~2->proc~set1~2 +none~set~2->proc~set1 - + -proc~set2~2 - +proc~set2 + forcad_nurbs_surface::nurbs_surface%set2 - + -none~set~2->proc~set2~2 +none~set~2->proc~set2 @@ -717,9 +717,9 @@

    Calls

    - + -proc~set1~2->proc~get_nc~2 +proc~set1->proc~get_nc~2 @@ -732,9 +732,9 @@

    Calls

    - + -proc~set1~2->proc~get_order~2 +proc~set1->proc~get_order~2 @@ -747,15 +747,15 @@

    Calls

    - + -proc~set2~2->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector - + -proc~set2~2->proc~get_nc~2 +proc~set2->proc~get_nc~2 @@ -834,24 +834,24 @@

    Calls

    - + -proc~get_multiplicity~2 - +proc~get_multiplicity + forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity - + -proc~get_multiplicity~2->proc~compute_multiplicity +proc~get_multiplicity->proc~compute_multiplicity @@ -958,7 +958,7 @@

    Variables

    - + real(kind=rk), @@ -974,7 +974,7 @@

    Variables

    - + real(kind=rk), @@ -990,7 +990,7 @@

    Variables

    - + real(kind=rk) @@ -1006,7 +1006,7 @@

    Variables

    - + real(kind=rk) @@ -1022,7 +1022,7 @@

    Variables

    - + type(nurbs_surface) @@ -1050,7 +1050,7 @@

    Variables

    Functions

    -

    function generate_Xc(num_rows, num_cols, peak_height) result(control_points) +

    function generate_Xc(num_rows, num_cols, peak_height) result(control_points)

    @@ -1226,7 +1226,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/program/example_nurbs_volume.html b/program/example_nurbs_volume.html index 67022e02b..4a746b211 100644 --- a/program/example_nurbs_volume.html +++ b/program/example_nurbs_volume.html @@ -116,12 +116,12 @@

    Variables

    - Wc - Xc - knot1 - knot2 + Wc + Xc + knot1 + knot2 knot3 - nurbs + nurbs
    @@ -142,7 +142,7 @@

    Functions

    @@ -463,123 +463,123 @@

    Calls

    example_nurbs_volume - + -none~set - +none~set~3 + forcad_nurbs_volume::nurbs_volume%set - + -program~example_nurbs_volume->none~set +program~example_nurbs_volume->none~set~3 - + -proc~create - +proc~create~3 + forcad_nurbs_volume::nurbs_volume%create - + -program~example_nurbs_volume->proc~create +program~example_nurbs_volume->proc~create~3 - + -proc~export_xc - +proc~export_xc~3 + forcad_nurbs_volume::nurbs_volume%export_Xc - + -program~example_nurbs_volume->proc~export_xc +program~example_nurbs_volume->proc~export_xc~3 - + -proc~export_xg - +proc~export_xg~3 + forcad_nurbs_volume::nurbs_volume%export_Xg - + -program~example_nurbs_volume->proc~export_xg +program~example_nurbs_volume->proc~export_xg~3 - + -proc~finalize - +proc~finalize~3 + forcad_nurbs_volume::nurbs_volume%finalize - + -program~example_nurbs_volume->proc~finalize +program~example_nurbs_volume->proc~finalize~3 - + -proc~generate_xc~4 - +proc~generate_xc~2 + example_nurbs_volume::generate_Xc - + -program~example_nurbs_volume->proc~generate_xc~4 +program~example_nurbs_volume->proc~generate_xc~2 - + -proc~set1 - +proc~set1~2 + forcad_nurbs_volume::nurbs_volume%set1 - + -none~set->proc~set1 +none~set~3->proc~set1~2 - + -proc~set2 - +proc~set2~2 + forcad_nurbs_volume::nurbs_volume%set2 - + -none~set->proc~set2 +none~set~3->proc~set2~2 @@ -592,9 +592,9 @@

    Calls

    - + -proc~create->interface~ndgrid +proc~create~3->interface~ndgrid @@ -607,9 +607,9 @@

    Calls

    - + -proc~create->proc~basis_bspline +proc~create~3->proc~basis_bspline @@ -622,39 +622,39 @@

    Calls

    - + -proc~create->proc~kron +proc~create~3->proc~kron - + -proc~get_elem_xc - +proc~get_elem_xc~3 + forcad_nurbs_volume::nurbs_volume%get_elem_Xc - + -proc~export_xc->proc~get_elem_xc +proc~export_xc~3->proc~get_elem_xc~3 - + -proc~get_elem_xg - +proc~get_elem_xg~3 + forcad_nurbs_volume::nurbs_volume%get_elem_Xg - + -proc~export_xg->proc~get_elem_xg +proc~export_xg~3->proc~get_elem_xg~3 @@ -697,45 +697,45 @@

    Calls

    - + -proc~get_elem_xc->interface~elemconn_c0 +proc~get_elem_xc~3->interface~elemconn_c0 - + -proc~get_elem_xg->interface~elemconn_c0 +proc~get_elem_xg~3->interface~elemconn_c0 - + -proc~get_nc - +proc~get_nc~3 + forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1->proc~get_nc +proc~set1~2->proc~get_nc~3 - + -proc~get_order - +proc~get_order~3 + forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1->proc~get_order +proc~set1~2->proc~get_order~3 @@ -748,15 +748,15 @@

    Calls

    - + -proc~set2->proc~compute_knot_vector +proc~set2~2->proc~compute_knot_vector - + -proc~set2->proc~get_nc +proc~set2~2->proc~get_nc~3 @@ -829,30 +829,30 @@

    Calls

    - + -proc~get_nc->proc~compute_multiplicity +proc~get_nc~3->proc~compute_multiplicity - + -proc~get_multiplicity - +proc~get_multiplicity~2 + forcad_nurbs_volume::nurbs_volume%get_multiplicity - + -proc~get_order->proc~get_multiplicity +proc~get_order~3->proc~get_multiplicity~2 - + -proc~get_multiplicity->proc~compute_multiplicity +proc~get_multiplicity~2->proc~compute_multiplicity @@ -959,7 +959,7 @@

    Variables

    - + real(kind=rk), @@ -975,7 +975,7 @@

    Variables

    - + real(kind=rk), @@ -991,7 +991,7 @@

    Variables

    - + real(kind=rk) @@ -1007,7 +1007,7 @@

    Variables

    - + real(kind=rk) @@ -1039,7 +1039,7 @@

    Variables

    - + type(nurbs_volume) @@ -1067,7 +1067,7 @@

    Variables

    Functions

    -

    function generate_Xc(L) result(control_points) +

    function generate_Xc(L) result(control_points)

    @@ -1207,7 +1207,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/search.html b/search.html index ef5263f82..c81d0fdf3 100644 --- a/search.html +++ b/search.html @@ -98,7 +98,7 @@

    Search Results

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/bezier_curve.f90.html b/sourcefile/bezier_curve.f90.html index 0c385cff4..fad82fac7 100644 --- a/sourcefile/bezier_curve.f90.html +++ b/sourcefile/bezier_curve.f90.html @@ -472,7 +472,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/bezier_surface.f90.html b/sourcefile/bezier_surface.f90.html index ff9078b60..8f36da5f2 100644 --- a/sourcefile/bezier_surface.f90.html +++ b/sourcefile/bezier_surface.f90.html @@ -475,7 +475,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/bezier_volume.f90.html b/sourcefile/bezier_volume.f90.html index 9ea7eef41..5d20b507a 100644 --- a/sourcefile/bezier_volume.f90.html +++ b/sourcefile/bezier_volume.f90.html @@ -470,7 +470,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad.f90.html b/sourcefile/forcad.f90.html index a0a944585..b47c1cef5 100644 --- a/sourcefile/forcad.f90.html +++ b/sourcefile/forcad.f90.html @@ -569,7 +569,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_bezier_curve.f90.html b/sourcefile/forcad_bezier_curve.f90.html index a74a8f93c..843b28c11 100644 --- a/sourcefile/forcad_bezier_curve.f90.html +++ b/sourcefile/forcad_bezier_curve.f90.html @@ -908,7 +908,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_bezier_surface.f90.html b/sourcefile/forcad_bezier_surface.f90.html index b8d16af3c..77e40e8a9 100644 --- a/sourcefile/forcad_bezier_surface.f90.html +++ b/sourcefile/forcad_bezier_surface.f90.html @@ -855,7 +855,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_bezier_volume.f90.html b/sourcefile/forcad_bezier_volume.f90.html index f1a86a1b6..4b4ad94a1 100644 --- a/sourcefile/forcad_bezier_volume.f90.html +++ b/sourcefile/forcad_bezier_volume.f90.html @@ -876,7 +876,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_nurbs_curve.f90.html b/sourcefile/forcad_nurbs_curve.f90.html index a0138d726..ce8369965 100644 --- a/sourcefile/forcad_nurbs_curve.f90.html +++ b/sourcefile/forcad_nurbs_curve.f90.html @@ -918,7 +918,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_nurbs_surface.f90.html b/sourcefile/forcad_nurbs_surface.f90.html index c19a99ba0..3f4fde6d0 100644 --- a/sourcefile/forcad_nurbs_surface.f90.html +++ b/sourcefile/forcad_nurbs_surface.f90.html @@ -1022,7 +1022,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_nurbs_volume.f90.html b/sourcefile/forcad_nurbs_volume.f90.html index ad31789ac..8a8fd0711 100644 --- a/sourcefile/forcad_nurbs_volume.f90.html +++ b/sourcefile/forcad_nurbs_volume.f90.html @@ -1089,7 +1089,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/forcad_utils.f90.html b/sourcefile/forcad_utils.f90.html index 2418b5ead..9db247e76 100644 --- a/sourcefile/forcad_utils.f90.html +++ b/sourcefile/forcad_utils.f90.html @@ -765,7 +765,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/nurbs_curve.f90.html b/sourcefile/nurbs_curve.f90.html index fd800012e..3aa3aced5 100644 --- a/sourcefile/nurbs_curve.f90.html +++ b/sourcefile/nurbs_curve.f90.html @@ -456,7 +456,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/nurbs_surface.f90.html b/sourcefile/nurbs_surface.f90.html index c16736879..064525c1c 100644 --- a/sourcefile/nurbs_surface.f90.html +++ b/sourcefile/nurbs_surface.f90.html @@ -481,7 +481,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/sourcefile/nurbs_volume.f90.html b/sourcefile/nurbs_volume.f90.html index 6ca6523c9..3172ef006 100644 --- a/sourcefile/nurbs_volume.f90.html +++ b/sourcefile/nurbs_volume.f90.html @@ -475,7 +475,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T00:59:12.067358

    + on 2024-03-30T01:06:29.265865


    diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index 833356a86..1f28979fd 100644 --- a/tipuesearch/tipuesearch_content.js +++ b/tipuesearch/tipuesearch_content.js @@ -1 +1 @@ -var tipuesearch = {"pages":[{"title":" ForCAD ","text":"ForCAD ForCAD : A Fortran library for Geometric Modeling. ForCAD supports B-Spline , NURBS , Bezier , and Rational Bezier curves, surfaces, and volumes. fpm dependency If you want to use ForCAD as a dependency in your own fpm project,\nyou can easily include it by adding the following line to your fpm.toml file: [dependencies] forcad = { git = \"https://github.com/gha3mi/forcad.git\" } How to run examples To get started, follow these steps: Clone the repository: Clone the ForCAD repository from GitHub: git clone https://github.com/gha3mi/forcad.git cd forcad Using fpm fpm run --example --all API documentation The most up-to-date API documentation for the master branch is available here .\nTo generate the API documentation for ForCAD using ford run the following\ncommand: ford ford.yml ToDo [ ] Add method insert_knot() for B-splines and NURBS. [ ] Add method remove_knot() for B-splines and NURBS. [ ] Add method elevate_degree() for Bezier, Rational Bezier, B-splines, and NURBS. [ ] Add method reduce_degree() for Bezier, Rational Bezier, B-splines, and NURBS. Contributing Contributions to ForCAD are welcome!\nIf you find any issues or would like to suggest improvements, please open an issue. References The NURBS Book by Les Piegl, Wayne Tiller An Introduction to NURBS by David F. Rogers Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"nurbs_volume – ForCAD ","text":"type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector real(kind=rk), private, allocatable :: knot3 (:) knot vector integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction integer, private :: order (3) degree of the first direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the NURBS curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the curve private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_knot Get knot vector private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_volume.html"},{"title":"nurbs_surface – ForCAD ","text":"type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction integer, private :: order (2) degree of each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the NURBS surface object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the surface private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_knot Get knot vector private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_surface.html"},{"title":"bezier_curve – ForCAD ","text":"type, public :: bezier_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights real(kind=rk), private, allocatable :: Xc (:,:) Control points real(kind=rk), private, allocatable :: Xg (:,:) Geometry points real(kind=rk), private, allocatable :: Xt (:) Parameter values integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Generate geometry points of the Bezier curve. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) procedure, public :: elevate_degree Elevate the degree of the Bezier curve private pure subroutine elevate_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Elevate the degree of the Bezier curve by one. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export control points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export geometry points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Finalize the Bezier curve object by deallocating memory. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for control points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for geometry points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/bezier_curve.html"},{"title":"bezier_surface – ForCAD ","text":"type, public :: bezier_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier surface object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_order Get order of the Bezier surface private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/bezier_surface.html"},{"title":"bezier_volume – ForCAD ","text":"type, public :: bezier_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier volume object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_order Get order of the Bezier surface private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Source Code type bezier_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier volume object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type bezier_volume","tags":"","loc":"type/bezier_volume.html"},{"title":"nurbs_curve – ForCAD ","text":"type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt (:) evaluation points real(kind=rk), private, allocatable :: knot (:) knot vector integer, private :: nc number of control points integer, private :: ng number of geometry points integer, private :: order order of the curve Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the curve private pure function get_continuity (this) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_knot Get knot vector private pure function get_knot (this) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_curve.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~~CallsGraph proc~get_continuity forcad_nurbs_volume::nurbs_volume%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this, dir) result(knot) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~~CallsGraph proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~~CalledByGraph proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~get_order->proc~get_multiplicity proc~set1 forcad_nurbs_volume::nurbs_volume%set1 proc~set1->proc~get_order none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set1 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this, dir) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~~CallsGraph proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_nc~~CalledByGraph proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set1 forcad_nurbs_volume::nurbs_volume%set1 proc~set1->proc~get_nc proc~set2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2->proc~get_nc none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set1 none~set->proc~set2 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Calls proc~~get_order~~CallsGraph proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order->proc~get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~~CalledByGraph proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~set1 forcad_nurbs_volume::nurbs_volume%set1 proc~set1->proc~get_order none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set1 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) Calls proc~~create~~CallsGraph proc~create forcad_nurbs_volume::nurbs_volume%create interface~ndgrid forcad_utils::ndgrid proc~create->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create->proc~basis_bspline proc~kron forcad_utils::kron proc~create->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~~CalledByGraph proc~create forcad_nurbs_volume::nurbs_volume%create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~~CalledByGraph proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~~CalledByGraph proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~finalize Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~~CallsGraph proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~~CalledByGraph proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc->proc~get_elem_xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~~CallsGraph proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~~CalledByGraph proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg->proc~get_elem_xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~~CallsGraph proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc none~set forcad_nurbs_volume::nurbs_volume%set proc~modify_wc->none~set proc~set1 forcad_nurbs_volume::nurbs_volume%set1 none~set->proc~set1 proc~set2 forcad_nurbs_volume::nurbs_volume%set2 none~set->proc~set2 proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set1->proc~get_nc proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~~CallsGraph proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc none~set forcad_nurbs_volume::nurbs_volume%set proc~modify_xc->none~set proc~set1 forcad_nurbs_volume::nurbs_volume%set1 none~set->proc~set1 proc~set2 forcad_nurbs_volume::nurbs_volume%set2 none~set->proc~set2 proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set1->proc~get_nc proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) Set control points and weights for the NURBS curve object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~~CallsGraph proc~set1 forcad_nurbs_volume::nurbs_volume%set1 proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set1->proc~get_nc proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~set1->proc~get_order proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~~CalledByGraph proc~set1 forcad_nurbs_volume::nurbs_volume%set1 none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set1 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Set control points and weights for the NURBS curve object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~~CallsGraph proc~set2 forcad_nurbs_volume::nurbs_volume%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set2->proc~get_nc proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~~CalledByGraph proc~set2 forcad_nurbs_volume::nurbs_volume%set2 none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set2 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~2.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~2.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~2.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~2.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~2~~CallsGraph proc~get_continuity~2 forcad_nurbs_surface::nurbs_surface%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity~2.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this, dir) result(knot) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot~2.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~2~~CallsGraph proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~2~~CalledByGraph proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~2->proc~get_multiplicity~2 proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~2->proc~get_order~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity~2.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this, dir) result(nc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~2~~CallsGraph proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_nc~2~~CalledByGraph proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~2->proc~get_nc~2 proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~2->proc~get_nc~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc~2.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_ng~2.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Calls proc~~get_order~2~~CallsGraph proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity~2 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~2~~CalledByGraph proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~2->proc~get_order~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order~2.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) Calls proc~~create~2~~CallsGraph proc~create~2 forcad_nurbs_surface::nurbs_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~2->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~2->proc~basis_bspline proc~kron forcad_utils::kron proc~create~2->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~2~~CalledByGraph proc~create~2 forcad_nurbs_surface::nurbs_surface%create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~2.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~2~~CallsGraph proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~2~~CalledByGraph proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~2.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~2~~CallsGraph proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~2~~CalledByGraph proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~2.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this Called by proc~~finalize~2~~CalledByGraph proc~finalize~2 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~finalize~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~2.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~2~~CallsGraph proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~2~~CalledByGraph proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~2.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~2~~CallsGraph proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~2~~CalledByGraph proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~2.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~2~~CallsGraph proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc none~set~2 forcad_nurbs_surface::nurbs_surface%set proc~modify_wc~2->none~set~2 proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2~2 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~2->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~2.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~2~~CallsGraph proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc none~set~2 forcad_nurbs_surface::nurbs_surface%set proc~modify_xc~2->none~set~2 proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2~2 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~2->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~2.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, Xc, Wc) Set control points and weights for the NURBS surface object. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~2~~CallsGraph proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~2->proc~get_order~2 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~2~~CalledByGraph proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1~2.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Set control points and weights for the NURBS surface object. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~2~~CallsGraph proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set2~2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~2~~CalledByGraph proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2~2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2~2.html"},{"title":"basis_bernstein – ForCAD","text":"public pure function basis_bernstein(Xt, nc) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bernstein~~CalledByGraph proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3 forcad_bezier_curve::bezier_curve%create proc~create~3->proc~basis_bernstein proc~create~4 forcad_bezier_surface::bezier_surface%create proc~create~4->proc~basis_bernstein proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->proc~basis_bernstein proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~3 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~create~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/basis_bernstein.html"},{"title":"basis_bspline – ForCAD","text":"public pure function basis_bspline(Xt, knot, nc, order) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in) :: knot (:) integer, intent(in) :: nc integer, intent(in) :: order Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bspline~~CalledByGraph proc~basis_bspline forcad_utils::basis_bspline proc~create forcad_nurbs_volume::nurbs_volume%create proc~create->proc~basis_bspline proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->proc~basis_bspline proc~create~6 forcad_nurbs_curve::nurbs_curve%create proc~create~6->proc~basis_bspline program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/basis_bspline.html"},{"title":"compute_knot_vector – ForCAD","text":"public pure function compute_knot_vector(Xth_dir, order, continuity) result(knot) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_knot_vector~~CallsGraph proc~compute_knot_vector forcad_utils::compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~compute_knot_vector~~CalledByGraph proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2~2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/compute_knot_vector.html"},{"title":"compute_multiplicity – ForCAD","text":"public pure function compute_multiplicity(knot) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: knot (:) Return Value integer, dimension(:), allocatable Called by proc~~compute_multiplicity~~CalledByGraph proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity forcad_nurbs_volume::nurbs_volume%get_continuity proc~get_continuity->proc~compute_multiplicity proc~get_continuity~2 forcad_nurbs_surface::nurbs_surface%get_continuity proc~get_continuity~2->proc~compute_multiplicity proc~get_continuity~3 forcad_nurbs_curve::nurbs_curve%get_continuity proc~get_continuity~3->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_multiplicity->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~get_nc->proc~compute_multiplicity proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~get_nc~2->proc~compute_multiplicity proc~get_nc~6 forcad_nurbs_curve::nurbs_curve%get_nc proc~get_nc~6->proc~compute_multiplicity proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~get_order->proc~get_multiplicity proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~2->proc~get_multiplicity~2 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_order~6->proc~get_multiplicity~3 proc~set1 forcad_nurbs_volume::nurbs_volume%set1 proc~set1->proc~get_nc proc~set1->proc~get_order proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~2->proc~get_nc~2 proc~set1~2->proc~get_order~2 proc~set2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2->proc~get_nc proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~2->proc~get_nc~2 none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set1 none~set->proc~set2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/compute_multiplicity.html"},{"title":"kron – ForCAD","text":"public pure function kron(u, v) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: u real(kind=rk), intent(in), dimension(:), contiguous :: v Return Value real(kind=rk), dimension(size(u)*size(v)) Called by proc~~kron~~CalledByGraph proc~kron forcad_utils::kron proc~create forcad_nurbs_volume::nurbs_volume%create proc~create->proc~kron proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->proc~kron proc~create~4 forcad_bezier_surface::bezier_surface%create proc~create~4->proc~kron proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->proc~kron program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/kron.html"},{"title":"cmp_elemConn_C0_L – ForCAD","text":"private pure function cmp_elemConn_C0_L(nnode, p) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_l~~CalledByGraph proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 program~example_bezier_curve->proc~export_xg~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 program~example_bezier_surface->proc~export_xg~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 program~example_bezier_volume->proc~export_xg~5 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_l.html"},{"title":"cmp_elemConn_C0_S – ForCAD","text":"private pure function cmp_elemConn_C0_S(nnode1, nnode2, p1, p2) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_s~~CalledByGraph proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 program~example_bezier_curve->proc~export_xg~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 program~example_bezier_surface->proc~export_xg~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 program~example_bezier_volume->proc~export_xg~5 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_s.html"},{"title":"cmp_elemConn_C0_V – ForCAD","text":"private pure function cmp_elemConn_C0_V(nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_v~~CalledByGraph proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 program~example_bezier_curve->proc~export_xg~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 program~example_bezier_surface->proc~export_xg~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 program~example_bezier_volume->proc~export_xg~5 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_v.html"},{"title":"repelem – ForCAD","text":"private pure function repelem(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: a integer, intent(in), dimension(:), contiguous :: b Return Value real(kind=rk), dimension(sum(b)) Called by proc~~repelem~~CalledByGraph proc~repelem forcad_utils::repelem proc~compute_knot_vector forcad_utils::compute_knot_vector proc~compute_knot_vector->proc~repelem proc~set2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2->proc~compute_knot_vector proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set forcad_nurbs_volume::nurbs_volume%set none~set->proc~set2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2~2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function repelem ( a , b ) result ( c ) real ( rk ), dimension (:), intent ( in ), contiguous :: a integer , dimension (:), intent ( in ), contiguous :: b real ( rk ), dimension ( sum ( b )) :: c integer :: i , l , n l = 0 do i = 1 , size ( a ) n = b ( i ) c ( l + 1 : l + n ) = a ( i ) l = l + n end do end function repelem","tags":"","loc":"proc/repelem.html"},{"title":"ndgrid2 – ForCAD","text":"private pure subroutine ndgrid2(X_dir1, X_dir2, Xt) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Called by proc~~ndgrid2~~CalledByGraph proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid forcad_utils::ndgrid interface~ndgrid->proc~ndgrid2 proc~create forcad_nurbs_volume::nurbs_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~4 forcad_bezier_surface::bezier_surface%create proc~create~4->interface~ndgrid proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ndgrid2.html"},{"title":"ndgrid3 – ForCAD","text":"private pure subroutine ndgrid3(X_dir1, X_dir2, X_dir3, Xt) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Called by proc~~ndgrid3~~CalledByGraph proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid forcad_utils::ndgrid interface~ndgrid->proc~ndgrid3 proc~create forcad_nurbs_volume::nurbs_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~4 forcad_bezier_surface::bezier_surface%create proc~create~4->interface~ndgrid proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ndgrid3.html"},{"title":"elemConn_C0 – ForCAD","text":"public interface elemConn_C0 Calls interface~~elemconn_c0~~CallsGraph interface~elemconn_c0 forcad_utils::elemConn_C0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by interface~~elemconn_c0~~CalledByGraph interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 program~example_bezier_curve->proc~export_xg~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 program~example_bezier_surface->proc~export_xg~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 program~example_bezier_volume->proc~export_xg~5 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc program~example_nurbs_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable","tags":"","loc":"interface/elemconn_c0.html"},{"title":"ndgrid – ForCAD","text":"public interface ndgrid Calls interface~~ndgrid~~CallsGraph interface~ndgrid forcad_utils::ndgrid proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by interface~~ndgrid~~CalledByGraph interface~ndgrid forcad_utils::ndgrid proc~create forcad_nurbs_volume::nurbs_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~4 forcad_bezier_surface::bezier_surface%create proc~create~4->interface~ndgrid proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt","tags":"","loc":"interface/ndgrid.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~3.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~3.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~3.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this) result(Xt) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~3.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_nc~3.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_ng~3.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_order~3.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res, Xt) Generate geometry points of the Bezier curve. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) Calls proc~~create~3~~CallsGraph proc~create~3 forcad_bezier_curve::bezier_curve%create proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3->proc~basis_bernstein Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~3~~CalledByGraph proc~create~3 forcad_bezier_curve::bezier_curve%create proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~3 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~3.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this) Elevate the degree of the Bezier curve by one. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this Calls proc~~elevate_degree~~CallsGraph proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~create~3 forcad_bezier_curve::bezier_curve%create proc~elevate_degree->proc~create~3 proc~set forcad_bezier_curve::bezier_curve%set proc~elevate_degree->proc~set proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3->proc~basis_bernstein Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/elevate_degree.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Export control points to a VTK file. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~3~~CallsGraph proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~3~~CalledByGraph proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~3.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Export geometry points to a VTK file. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~3~~CallsGraph proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~3~~CalledByGraph proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~3.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Finalize the Bezier curve object by deallocating memory. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this Called by proc~~finalize~3~~CalledByGraph proc~finalize~3 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~finalize~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~3.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Generate connectivity for control points. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xc~3~~CallsGraph proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~3~~CalledByGraph proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~3->proc~get_elem_xc~3 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~3.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Generate connectivity for geometry points. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xg~3~~CallsGraph proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~3~~CalledByGraph proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~3->proc~get_elem_xg~3 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~3.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Modify weight of a control point given its index. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~3~~CallsGraph proc~modify_wc~3 forcad_bezier_curve::bezier_curve%modify_Wc proc~set forcad_bezier_curve::bezier_curve%set proc~modify_wc~3->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~3.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Modify coordinate of a control point given its index and direction. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~3~~CallsGraph proc~modify_xc~3 forcad_bezier_curve::bezier_curve%modify_Xc proc~set forcad_bezier_curve::bezier_curve%set proc~modify_xc~3->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~3.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~~CalledByGraph proc~set forcad_bezier_curve::bezier_curve%set proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~set proc~modify_wc~3 forcad_bezier_curve::bezier_curve%modify_Wc proc~modify_wc~3->proc~set proc~modify_xc~3 forcad_bezier_curve::bezier_curve%modify_Xc proc~modify_xc~3->proc~set program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~~CalledByGraph proc~generate_xc example_bezier_surface::generate_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~generate_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~4.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~4.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~4.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~4.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_nc~4.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_ng~4.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_order~4.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) Calls proc~~create~4~~CallsGraph proc~create~4 forcad_bezier_surface::bezier_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~4->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~4->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~4->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~4~~CalledByGraph proc~create~4 forcad_bezier_surface::bezier_surface%create program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! Rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine create","tags":"","loc":"proc/create~4.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~4~~CallsGraph proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~4~~CalledByGraph proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~4.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~4~~CallsGraph proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~4~~CalledByGraph proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xg~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~4.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this Called by proc~~finalize~4~~CalledByGraph proc~finalize~4 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~finalize~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~4.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~4~~CallsGraph proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~4~~CalledByGraph proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~4.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~4~~CallsGraph proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~4~~CalledByGraph proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xg~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~4.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Modify weight of a control point given its index. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~4~~CallsGraph proc~modify_wc~4 forcad_bezier_surface::bezier_surface%modify_Wc proc~set~2 forcad_bezier_surface::bezier_surface%set proc~modify_wc~4->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~4.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Modify coordinate of a control point given its index and direction. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~4~~CallsGraph proc~modify_xc~4 forcad_bezier_surface::bezier_surface%modify_Xc proc~set~2 forcad_bezier_surface::bezier_surface%set proc~modify_xc~4->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~4.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, nc, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~2~~CalledByGraph proc~set~2 forcad_bezier_surface::bezier_surface%set proc~modify_wc~4 forcad_bezier_surface::bezier_surface%modify_Wc proc~modify_wc~4->proc~set~2 proc~modify_xc~4 forcad_bezier_surface::bezier_surface%modify_Xc proc~modify_xc~4->proc~set~2 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set~2.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~5.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~5.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~5.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~5.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_nc~5.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng~5.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_order~5.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) Calls proc~~create~5~~CallsGraph proc~create~5 forcad_bezier_volume::bezier_volume%create interface~ndgrid forcad_utils::ndgrid proc~create~5->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~5->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~5->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~5~~CalledByGraph proc~create~5 forcad_bezier_volume::bezier_volume%create program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~5.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~5~~CallsGraph proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~5~~CalledByGraph proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~5.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~5~~CallsGraph proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~5~~CalledByGraph proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xg~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~5.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this Called by proc~~finalize~5~~CalledByGraph proc~finalize~5 forcad_bezier_volume::bezier_volume%finalize program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~finalize~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~5.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~5~~CallsGraph proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~5~~CalledByGraph proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc~5->proc~get_elem_xc~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~5.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~5~~CallsGraph proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~5~~CalledByGraph proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg~5->proc~get_elem_xg~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xg~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~5.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~5~~CallsGraph proc~modify_wc~5 forcad_bezier_volume::bezier_volume%modify_Wc proc~set~3 forcad_bezier_volume::bezier_volume%set proc~modify_wc~5->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~5.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~5~~CallsGraph proc~modify_xc~5 forcad_bezier_volume::bezier_volume%modify_Xc proc~set~3 forcad_bezier_volume::bezier_volume%set proc~modify_xc~5->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~5.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, nc, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~3~~CalledByGraph proc~set~3 forcad_bezier_volume::bezier_volume%set proc~modify_wc~5 forcad_bezier_volume::bezier_volume%modify_Wc proc~modify_wc~5->proc~set~3 proc~modify_xc~5 forcad_bezier_volume::bezier_volume%modify_Xc proc~modify_xc~5->proc~set~3 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set~3.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~2~~CalledByGraph proc~generate_xc~2 example_nurbs_surface::generate_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~generate_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~2.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_coils real(kind=rk), intent(in) :: radius real(kind=rk), intent(in) :: height integer, intent(in) :: num_points_per_coil Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~3~~CalledByGraph proc~generate_xc~3 example_bezier_curve::generate_Xc program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~generate_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~3.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~4~~CalledByGraph proc~generate_xc~4 example_nurbs_volume::generate_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~generate_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~4.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~5~~CalledByGraph proc~generate_xc~5 example_bezier_volume::generate_Xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~generate_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~5.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~6.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~6.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~6.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this) result(Xt) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~6.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this) result(c) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_continuity~3~~CallsGraph proc~get_continuity~3 forcad_nurbs_curve::nurbs_curve%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity~3.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this) result(knot) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot~3.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this) result(m) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~3~~CallsGraph proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~3~~CalledByGraph proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_order~6->proc~get_multiplicity~3 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity~3.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Calls proc~~get_nc~6~~CallsGraph proc~get_nc~6 forcad_nurbs_curve::nurbs_curve%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~6->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc~6.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_ng~6.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Calls proc~~get_order~6~~CallsGraph proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~6~~CalledByGraph proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order~6.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res, Xt) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) Calls proc~~create~6~~CallsGraph proc~create~6 forcad_nurbs_curve::nurbs_curve%create proc~basis_bspline forcad_utils::basis_bspline proc~create~6->proc~basis_bspline Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~6~~CalledByGraph proc~create~6 forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~6.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~6~~CallsGraph proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~6~~CalledByGraph proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~6.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~6~~CallsGraph proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~6~~CalledByGraph proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~6.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~6~~CalledByGraph proc~finalize~6 forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~finalize~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~6.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xc~6~~CallsGraph proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~6~~CalledByGraph proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~6.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xg~6~~CallsGraph proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~6~~CalledByGraph proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~6.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~6~~CallsGraph proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc none~set~6 forcad_nurbs_curve::nurbs_curve%set proc~modify_wc~6->none~set~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~6.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~6~~CallsGraph proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc none~set~6 forcad_nurbs_curve::nurbs_curve%set proc~modify_xc~6->none~set~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~6.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~3~~CallsGraph proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~3~~CalledByGraph proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1~3.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir, order, continuity, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~3~~CallsGraph proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~3~~CalledByGraph proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2~3.html"},{"title":"forcad_nurbs_volume – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_volume~~UsesGraph module~forcad_nurbs_volume forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_volume~~UsedByGraph module~forcad_nurbs_volume forcad_nurbs_volume module~forcad forcad module~forcad->module~forcad_nurbs_volume program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector real(kind=rk), private, allocatable :: knot3 (:) knot vector integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction integer, private :: order (3) degree of the first direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the NURBS curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the curve Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Subroutines private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_volume.html"},{"title":"forcad_nurbs_surface – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_surface~~UsesGraph module~forcad_nurbs_surface forcad_nurbs_surface module~forcad_utils forcad_utils module~forcad_nurbs_surface->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_surface~~UsedByGraph module~forcad_nurbs_surface forcad_nurbs_surface module~forcad forcad module~forcad->module~forcad_nurbs_surface program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction integer, private :: order (2) degree of each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the NURBS surface object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the surface Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Subroutines private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_surface.html"},{"title":"forcad_utils – ForCAD","text":"Used by module~~forcad_utils~~UsedByGraph module~forcad_utils forcad_utils module~forcad forcad module~forcad->module~forcad_utils module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Visibility Attributes Name Initial integer, public, parameter :: rk = kind(1.0d0) Interfaces public interface elemConn_C0 private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable public interface ndgrid private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Functions public pure function basis_bernstein (Xt, nc) result(B) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) public pure function basis_bspline (Xt, knot, nc, order) result(B) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in) :: knot (:) integer, intent(in) :: nc integer, intent(in) :: order Return Value real(kind=rk), allocatable, (:) public pure function compute_knot_vector (Xth_dir, order, continuity) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) Return Value real(kind=rk), allocatable, (:) public pure function compute_multiplicity (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: knot (:) Return Value integer, dimension(:), allocatable public pure function kron (u, v) result(w) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: u real(kind=rk), intent(in), dimension(:), contiguous :: v Return Value real(kind=rk), dimension(size(u)*size(v)) private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable private pure function repelem (a, b) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: a integer, intent(in), dimension(:), contiguous :: b Return Value real(kind=rk), dimension(sum(b)) Subroutines private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt","tags":"","loc":"module/forcad_utils.html"},{"title":"forcad_bezier_curve – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_curve~~UsesGraph module~forcad_bezier_curve forcad_bezier_curve module~forcad_utils forcad_utils module~forcad_bezier_curve->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_curve~~UsedByGraph module~forcad_bezier_curve forcad_bezier_curve module~forcad forcad module~forcad->module~forcad_bezier_curve program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights real(kind=rk), private, allocatable :: Xc (:,:) Control points real(kind=rk), private, allocatable :: Xg (:,:) Geometry points real(kind=rk), private, allocatable :: Xt (:) Parameter values integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: elevate_degree Elevate the degree of the Bezier curve Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer Subroutines private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Generate geometry points of the Bezier curve. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) private pure subroutine elevate_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Elevate the degree of the Bezier curve by one. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export control points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export geometry points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Finalize the Bezier curve object by deallocating memory. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for control points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for geometry points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_curve.html"},{"title":"forcad – ForCAD","text":"Uses forcad_bezier_curve forcad_bezier_volume forcad_nurbs_surface forcad_bezier_surface forcad_utils forcad_nurbs_curve forcad_nurbs_volume module~~forcad~~UsesGraph module~forcad forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad~~UsedByGraph module~forcad forcad program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"module/forcad.html"},{"title":"forcad_bezier_surface – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_surface~~UsesGraph module~forcad_bezier_surface forcad_bezier_surface module~forcad_utils forcad_utils module~forcad_bezier_surface->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_surface~~UsedByGraph module~forcad_bezier_surface forcad_bezier_surface module~forcad forcad module~forcad->module~forcad_bezier_surface program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier surface object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier surface Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) Subroutines private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_surface.html"},{"title":"forcad_bezier_volume – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_volume~~UsesGraph module~forcad_bezier_volume forcad_bezier_volume module~forcad_utils forcad_utils module~forcad_bezier_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_volume~~UsedByGraph module~forcad_bezier_volume forcad_bezier_volume module~forcad forcad module~forcad->module~forcad_bezier_volume program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier volume object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier surface Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) Subroutines private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_volume.html"},{"title":"forcad_nurbs_curve – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_curve~~UsesGraph module~forcad_nurbs_curve forcad_nurbs_curve module~forcad_utils forcad_utils module~forcad_nurbs_curve->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_curve~~UsedByGraph module~forcad_nurbs_curve forcad_nurbs_curve module~forcad forcad module~forcad->module~forcad_nurbs_curve program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt (:) evaluation points real(kind=rk), private, allocatable :: knot (:) knot vector integer, private :: nc number of control points integer, private :: ng number of geometry points integer, private :: order order of the curve Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the curve Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) private pure function get_knot (this) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Subroutines private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_curve.html"},{"title":"example_bezier_surface – ForCAD","text":"Uses forcad program~~example_bezier_surface~~UsesGraph program~example_bezier_surface example_bezier_surface module~forcad forcad program~example_bezier_surface->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier surface object to create, and finalize a Bezier surface.\nIt sets up control points and weights, generates the surface, and exports the control points\nand the surface to VTK files at various stages. Define control points for the Bezier surface Define weights for the control points Set control points and weights for the bezier surface object Export initial control points to a VTK file Generate the Bezier surface with a resolution of 100x100 Export the generated surface to a VTK file Finalize the Bezier surface object Calls program~~example_bezier_surface~~CallsGraph program~example_bezier_surface example_bezier_surface proc~create~4 forcad_bezier_surface::bezier_surface%create program~example_bezier_surface->proc~create~4 proc~export_xc~4 forcad_bezier_surface::bezier_surface%export_Xc program~example_bezier_surface->proc~export_xc~4 proc~export_xg~4 forcad_bezier_surface::bezier_surface%export_Xg program~example_bezier_surface->proc~export_xg~4 proc~finalize~4 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface->proc~finalize~4 proc~generate_xc example_bezier_surface::generate_Xc program~example_bezier_surface->proc~generate_xc proc~set~2 forcad_bezier_surface::bezier_surface%set program~example_bezier_surface->proc~set~2 interface~ndgrid forcad_utils::ndgrid proc~create~4->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~4->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~4->proc~kron proc~get_elem_xc~4 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~get_elem_xg~4 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_surface ) :: bezier Declare a bezier surface object Functions function generate_Xc (num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_surface use forcad , only : rk , bezier_surface implicit none type ( bezier_surface ) :: bezier !! Declare a bezier surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier surface !----------------------------------------------------------------------------- !> Define control points for the Bezier surface Xc = generate_Xc ( 10 , 10 , 1.5_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier surface object call bezier % set ([ 10 , 10 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier surface !----------------------------------------------------------------------------- !> Generate the Bezier surface with a resolution of 100x100 call bezier % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call bezier % export_Xg ( 'vtk/bezier_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier surface object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_bezier_surface","tags":"","loc":"program/example_bezier_surface.html"},{"title":"example_nurbs_curve – ForCAD","text":"Uses forcad program~~example_nurbs_curve~~UsesGraph program~example_nurbs_curve example_nurbs_curve module~forcad forcad program~example_nurbs_curve->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) curve object to create and finalize a NURBS curve.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the curve, and exports the control points and the curve to VTK files. Calls program~~example_nurbs_curve~~CallsGraph program~example_nurbs_curve example_nurbs_curve none~set~6 forcad_nurbs_curve::nurbs_curve%set program~example_nurbs_curve->none~set~6 proc~create~6 forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve->proc~create~6 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc~6 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg~6 proc~finalize~6 forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve->proc~finalize~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~basis_bspline forcad_utils::basis_bspline proc~create~6->proc~basis_bspline proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg~6->interface~elemconn_c0 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot (5) Array for knot vector type( nurbs_curve ) :: nurbs Declare a NURBS curve object Source Code program example_nurbs_curve use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: nurbs !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 5 ) !! Array for knot vector !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- ! Define control points for the NURBS curve allocate ( Xc ( 3 , 3 )) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.0_rk , 5.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 1 0.0_rk , 1 0.0_rk , 0.0_rk ] ! Define weights for the control points allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.0_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.5_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights for the NURBS curve object call nurbs % set ( knot , Xc , Wc ) ! Export control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- ! Generate the NURBS curve with a resolution of 100 call nurbs % create ( res = 1000 ) ! Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- ! Finalize the NURBS curve object call nurbs % finalize () end program example_nurbs_curve","tags":"","loc":"program/example_nurbs_curve.html"},{"title":"example_nurbs_surface – ForCAD","text":"Uses forcad program~~example_nurbs_surface~~UsesGraph program~example_nurbs_surface example_nurbs_surface module~forcad forcad program~example_nurbs_surface->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) surface object to create and finalize a NURBS surface.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the surface, and exports the control points and the surface to VTK files. Define control points for the NURBS surface Define weights for the control points\nDefine knot vectors for both dimensions\nSet knot vectors, control points, and weights for the NURBS surface object Export the control points to a VTK file Generate the NURBS surface with resolutions of 30 in both dimensions Export the generated surface to a VTK file Finalize the NURBS surface object Calls program~~example_nurbs_surface~~CallsGraph program~example_nurbs_surface example_nurbs_surface none~set~2 forcad_nurbs_surface::nurbs_surface%set program~example_nurbs_surface->none~set~2 proc~create~2 forcad_nurbs_surface::nurbs_surface%create program~example_nurbs_surface->proc~create~2 proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface->proc~export_xc~2 proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface->proc~export_xg~2 proc~finalize~2 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface->proc~finalize~2 proc~generate_xc~2 example_nurbs_surface::generate_Xc program~example_nurbs_surface->proc~generate_xc~2 proc~set1~2 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2~2 interface~ndgrid forcad_utils::ndgrid proc~create~2->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~2->proc~basis_bspline proc~kron forcad_utils::kron proc~create~2->proc~kron proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xg~2->interface~elemconn_c0 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~2->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~2 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot1 (6) Arrays for knot vectors in both dimensions real(kind=rk) :: knot2 (6) Arrays for knot vectors in both dimensions type( nurbs_surface ) :: nurbs Declare a NURBS surface object Functions function generate_Xc (num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_nurbs_surface use forcad implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 6 ), knot2 ( 6 ) !! Arrays for knot vectors in both dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS surface Xc = generate_Xc ( 3 , 3 , 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 ))) Wc = 1.0_rk !> Define knot vectors for both dimensions knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS surface object call nurbs % set ( knot1 , knot2 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call nurbs % create ( 30 , 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_nurbs_surface","tags":"","loc":"program/example_nurbs_surface.html"},{"title":"example_bezier_curve – ForCAD","text":"Uses forcad program~~example_bezier_curve~~UsesGraph program~example_bezier_curve example_bezier_curve module~forcad forcad program~example_bezier_curve->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier curve object to create, and finalize a Bezier curve.\nIt sets up control points and weights, generates the curve, and exports the control points\nand the curve to VTK files at various stages. Define control points for the Bezier curve Define weights for the control points Set control points and weights for the bezier curve object Export initial control points to a VTK file Generate the Bezier curve with a resolution of 1000 Export the generated curve to a VTK file Finalize the Bezier curve object Calls program~~example_bezier_curve~~CallsGraph program~example_bezier_curve example_bezier_curve proc~create~3 forcad_bezier_curve::bezier_curve%create program~example_bezier_curve->proc~create~3 proc~export_xc~3 forcad_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve->proc~export_xc~3 proc~export_xg~3 forcad_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve->proc~export_xg~3 proc~finalize~3 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve->proc~finalize~3 proc~generate_xc~3 example_bezier_curve::generate_Xc program~example_bezier_curve->proc~generate_xc~3 proc~set forcad_bezier_curve::bezier_curve%set program~example_bezier_curve->proc~set proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3->proc~basis_bernstein proc~get_elem_xc~3 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~get_elem_xg~3 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xg~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_curve ) :: bezier Declare a bezier curve object Functions function generate_Xc (num_coils, radius, height, num_points_per_coil) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_coils real(kind=rk), intent(in) :: radius real(kind=rk), intent(in) :: height integer, intent(in) :: num_points_per_coil Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_curve use forcad , only : rk , bezier_curve implicit none type ( bezier_curve ) :: bezier !! Declare a bezier curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier curve !----------------------------------------------------------------------------- !> Define control points for the Bezier curve Xc = generate_Xc ( 5 , 1.0_rk , 2.0_rk , 20 ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier curve object call bezier % set ( Xc = Xc , Wc = Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier curve !----------------------------------------------------------------------------- !> Generate the Bezier curve with a resolution of 1000 call bezier % create ( res = 500 ) !> Export the generated curve to a VTK file call bezier % export_Xg ( 'vtk/bezier_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier curve object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_coils , radius , height , num_points_per_coil ) result ( control_points ) integer , intent ( in ) :: num_coils , num_points_per_coil real ( rk ), intent ( in ) :: radius , height real ( rk ), dimension (:,:), allocatable :: control_points integer :: coil , i real ( rk ) :: theta , coil_height allocate ( control_points ( num_coils * num_points_per_coil , 3 )) do coil = 1 , num_coils coil_height = height * ( coil - 1 ) / real ( num_coils - 1 , rk ) theta = 0.0_rk do i = 1 , num_points_per_coil theta = theta + 2.0_rk * acos ( - 1.0_rk ) / real ( num_points_per_coil , rk ) control_points (( coil - 1 ) * num_points_per_coil + i , 1 ) = radius * cos ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 2 ) = radius * sin ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 3 ) = coil_height end do end do end function !----------------------------------------------------------------------------- end program example_bezier_curve","tags":"","loc":"program/example_bezier_curve.html"},{"title":"example_nurbs_volume – ForCAD","text":"Uses forcad program~~example_nurbs_volume~~UsesGraph program~example_nurbs_volume example_nurbs_volume module~forcad forcad program~example_nurbs_volume->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) volume object to create and finalize a NURBS volume.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the volume, and exports the control points and the volume to VTK files. Define the control points for the NURBS volume Define weights for the control points Define knot vectors for all three dimensions\nSet knot vectors, control points, and weights for the NURBS volume object Export the control points to a VTK file Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions Export the generated volume to a VTK file Finalize the NURBS volume object Calls program~~example_nurbs_volume~~CallsGraph program~example_nurbs_volume example_nurbs_volume none~set forcad_nurbs_volume::nurbs_volume%set program~example_nurbs_volume->none~set proc~create forcad_nurbs_volume::nurbs_volume%create program~example_nurbs_volume->proc~create proc~export_xc forcad_nurbs_volume::nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc proc~export_xg forcad_nurbs_volume::nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg proc~finalize forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume->proc~finalize proc~generate_xc~4 example_nurbs_volume::generate_Xc program~example_nurbs_volume->proc~generate_xc~4 proc~set1 forcad_nurbs_volume::nurbs_volume%set1 none~set->proc~set1 proc~set2 forcad_nurbs_volume::nurbs_volume%set2 none~set->proc~set2 interface~ndgrid forcad_utils::ndgrid proc~create->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create->proc~basis_bspline proc~kron forcad_utils::kron proc~create->proc~kron proc~get_elem_xc forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc proc~get_elem_xg forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xg->interface~elemconn_c0 proc~get_nc forcad_nurbs_volume::nurbs_volume%get_nc proc~set1->proc~get_nc proc~get_order forcad_nurbs_volume::nurbs_volume%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot1 (4) Arrays for knot vectors in all three dimensions real(kind=rk) :: knot2 (4) Arrays for knot vectors in all three dimensions real(kind=rk) :: knot3 (4) Arrays for knot vectors in all three dimensions type( nurbs_volume ) :: nurbs Declare a NURBS volume object Functions function generate_Xc (L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_nurbs_volume use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: nurbs !! Declare a NURBS volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 4 ), knot2 ( 4 ), knot3 ( 4 ) !! Arrays for knot vectors in all three dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define the control points for the NURBS volume Xc = generate_Xc ( 5.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Define knot vectors for all three dimensions knot1 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot3 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS volume object call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_nurbs_volume","tags":"","loc":"program/example_nurbs_volume.html"},{"title":"example_bezier_volume – ForCAD","text":"Uses forcad program~~example_bezier_volume~~UsesGraph program~example_bezier_volume example_bezier_volume module~forcad forcad program~example_bezier_volume->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier volume object to create, and finalize a Bezier volume.\nIt sets up control points and weights, generates the volume, and exports the control points\nand the volume to VTK files at various stages. Define control points for the Bezier volume Define weights for the control points Set control points and weights for the bezier volume object Export initial control points to a VTK file Generate the Bezier volume with a resolution of 10x10x10 Export the generated volume to a VTK file Finalize the Bezier volume object Calls program~~example_bezier_volume~~CallsGraph program~example_bezier_volume example_bezier_volume proc~create~5 forcad_bezier_volume::bezier_volume%create program~example_bezier_volume->proc~create~5 proc~export_xc~5 forcad_bezier_volume::bezier_volume%export_Xc program~example_bezier_volume->proc~export_xc~5 proc~export_xg~5 forcad_bezier_volume::bezier_volume%export_Xg program~example_bezier_volume->proc~export_xg~5 proc~finalize~5 forcad_bezier_volume::bezier_volume%finalize program~example_bezier_volume->proc~finalize~5 proc~generate_xc~5 example_bezier_volume::generate_Xc program~example_bezier_volume->proc~generate_xc~5 proc~set~3 forcad_bezier_volume::bezier_volume%set program~example_bezier_volume->proc~set~3 interface~ndgrid forcad_utils::ndgrid proc~create~5->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~5->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~5->proc~kron proc~get_elem_xc~5 forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~get_elem_xg~5 forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_volume ) :: bezier Declare a bezier volume object Functions function generate_Xc (L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_volume use forcad , only : rk , bezier_volume implicit none type ( bezier_volume ) :: bezier !! Declare a bezier volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier volume !----------------------------------------------------------------------------- !> Define control points for the Bezier volume Xc = generate_Xc ( 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier volume object call bezier % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier volume !----------------------------------------------------------------------------- !> Generate the Bezier volume with a resolution of 10x10x10 call bezier % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call bezier % export_Xg ( 'vtk/bezier_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier volume object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_bezier_volume","tags":"","loc":"program/example_bezier_volume.html"},{"title":"forcad_nurbs_volume.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_volume.f90~~EfferentGraph sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_volume.f90~~AfferentGraph sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_volume use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector implicit none private public nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction real ( rk ), allocatable , private :: knot1 (:) !! knot vector real ( rk ), allocatable , private :: knot2 (:) !! knot vector real ( rk ), allocatable , private :: knot3 (:) !! knot vector integer , private :: order ( 3 ) !! degree of the first direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the NURBS curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the curve procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS curve object. pure subroutine set1 ( this , knot1 , knot2 , knot3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot1 (:), knot2 (:), knot3 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot1 = knot1 this % knot2 = knot2 this % knot3 = knot3 this % order = this % get_order () this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % nc ( 3 ) = this % get_nc ( 3 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS curve object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , Xth_dir3 , order , continuity1 , continuity2 , continuity3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir1 (:), Xth_dir2 (:), Xth_dir3 (:) integer , intent ( in ) :: order (:) integer , intent ( in ) :: continuity1 (:), continuity2 (:), continuity3 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) integer :: nc ( 3 ) this % knot1 = compute_knot_vector ( Xth_dir1 , order ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , order ( 2 ), continuity2 ) this % knot3 = compute_knot_vector ( Xth_dir3 , order ( 3 ), continuity3 ) this % order ( 1 ) = order ( 1 ) this % order ( 2 ) = order ( 2 ) this % order ( 3 ) = order ( 3 ) this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % nc ( 3 ) = this % get_nc ( 3 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:), Xt3 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc3 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set parameter values if ( present ( Xt3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) this % Xt3 = Xt3 elseif ( present ( res3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) allocate ( this % Xt3 ( res3 )) this % Xt3 = [( real ( i - 1 , rk ) / real ( res3 - 1 , rk ), i = 1 , res3 )] ! else ! this%Xt3 = this%Xt3 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) this % ng ( 3 ) = size ( this % Xt3 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , this % Xt3 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! NURBS volume do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % order ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % order ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_volume ), intent ( in ) :: this integer :: ng ( 3 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_volume ), intent ( in ) :: this integer :: order ( 3 ) integer , allocatable :: m1 (:), m2 (:), m3 (:) m1 = this % get_multiplicity ( 1 ) m2 = this % get_multiplicity ( 2 ) m3 = this % get_multiplicity ( 3 ) order ( 1 ) = m1 ( 1 ) - 1 order ( 2 ) = m2 ( 1 ) - 1 order ( 3 ) = m3 ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this , dir ) result ( knot ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: knot (:) if ( dir == 1 ) then if ( allocated ( this % knot1 )) then knot = this % knot1 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % knot3 )) then knot = this % knot3 else ! print*, 'Error: Knot vector is not set.' end if else ! print*, 'Error: Invalid direction for knot vector.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_volume ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , knot3 = this % knot3 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , knot3 = this % knot3 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The NURBS surface is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this , dir ) result ( m ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: m (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot3 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this , dir ) result ( c ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: c (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 3 ) - compute_multiplicity ( this % knot3 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this , dir ) result ( nc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: nc if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot3 )) - this % order ( 3 ) - 1 end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_volume","tags":"","loc":"sourcefile/forcad_nurbs_volume.f90.html"},{"title":"forcad_nurbs_surface.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_surface.f90~~EfferentGraph sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_surface.f90~~AfferentGraph sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_surface use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector implicit none private public nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_surface real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: knot1 (:) !! knot vector real ( rk ), allocatable , private :: knot2 (:) !! knot vector integer , private :: order ( 2 ) !! degree of each direction integer , private :: nc ( 2 ) !! number of control points in each direction integer , private :: ng ( 2 ) !! number of geometry points in each direction contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the NURBS surface object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the surface procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS surface object. pure subroutine set1 ( this , knot1 , knot2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot1 (:) real ( rk ), intent ( in ) :: knot2 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot1 = knot1 this % knot2 = knot2 this % order = this % get_order () this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS surface object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , order , continuity1 , continuity2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir1 (:), Xth_dir2 (:) integer , intent ( in ) :: order (:) integer , intent ( in ) :: continuity1 (:), continuity2 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) integer :: nc ( 2 ) this % knot1 = compute_knot_vector ( Xth_dir1 , order ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , order ( 2 ), continuity2 ) this % order ( 1 ) = order ( 1 ) this % order ( 2 ) = order ( 2 ) this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! NURBS surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_surface ), intent ( in ) :: this integer :: ng ( 2 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_surface ), intent ( in ) :: this integer :: order ( 2 ) integer , allocatable :: m1 (:), m2 (:) m1 = this % get_multiplicity ( 1 ) m2 = this % get_multiplicity ( 2 ) order ( 1 ) = m1 ( 1 ) - 1 order ( 2 ) = m2 ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this , dir ) result ( knot ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: knot (:) if ( dir == 1 ) then if ( allocated ( this % knot1 )) then knot = this % knot1 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else ! print*, 'Error: Knot vector is not set.' end if else ! print*, 'Error: Invalid direction for knot vector.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_surface ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The NURBS surface is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this , dir ) result ( m ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: m (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot2 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this , dir ) result ( c ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: c (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this , dir ) result ( nc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: nc if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_surface","tags":"","loc":"sourcefile/forcad_nurbs_surface.f90.html"},{"title":"forcad_utils.f90 – ForCAD","text":"Files dependent on this one sourcefile~~forcad_utils.f90~~AfferentGraph sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_utils implicit none private public :: rk , basis_bernstein , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector integer , parameter :: rk = kind ( 1.0d0 ) !=============================================================================== interface elemConn_C0 module procedure cmp_elemConn_C0_L module procedure cmp_elemConn_C0_S module procedure cmp_elemConn_C0_V end interface !=============================================================================== !=============================================================================== interface ndgrid module procedure ndgrid2 module procedure ndgrid3 end interface !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bspline ( Xt , knot , nc , order ) result ( B ) integer , intent ( in ) :: order real ( rk ), intent ( in ) :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 real ( rk ), allocatable :: Nt (:,:) integer :: i , p real ( rk ), allocatable :: B (:) temp = abs ( Xt - knot ( size ( knot ))) allocate ( Nt ( nc , 0 : order ), source = 0.0_rk ) do p = 0 , order do i = 1 , nc Xth_i = knot ( i ) Xth_i1 = knot ( i + 1 ) Xth_ip = knot ( i + p ) Xth_ip1 = knot ( i + p + 1 ) if ( temp /= tiny ( 0.0_rk ) . and . Xt >= Xth_i . and . Xt <= Xth_i1 ) Nt ( i , 0 ) = 1.0_rk if ( Xth_ip /= Xth_i ) Nt ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * Nt ( i , p - 1 ) if ( Xth_ip1 /= Xth_i1 ) Nt ( i , p ) = Nt ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * Nt ( i + 1 , p - 1 ) end do end do B = Nt (:, order ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bernstein ( Xt , nc ) result ( B ) real ( rk ), intent ( in ) :: Xt integer , intent ( in ) :: nc real ( rk ), allocatable :: B (:) integer :: i allocate ( B ( nc ), source = 0.0_rk ) do concurrent ( i = 0 : nc - 1 ) B ( i + 1 ) = gamma ( real ( nc , kind = rk )) / ( gamma ( real ( i + 1 , kind = rk )) * gamma ( real ( nc - i , kind = rk ))) if ( Xt == 0.0_rk . and . i == 0 ) then B ( i + 1 ) = B ( i + 1 ) * ( 1.0_rk - Xt ) ** ( nc - 1 - i ) else if ( 1.0_rk - Xt == 0.0_rk . and . nc - 1 - i == 0 ) then B ( i + 1 ) = B ( i + 1 ) * ( Xt ** i ) else B ( i + 1 ) = B ( i + 1 ) * ( Xt ** i ) * ( 1.0_rk - Xt ) ** ( nc - 1 - i ) end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function kron ( u , v ) result ( w ) real ( rk ), dimension (:), intent ( in ), contiguous :: u , v real ( rk ), dimension ( size ( u ) * size ( v )) :: w integer :: i , j , m , n m = size ( u ) n = size ( v ) do i = 1 , m do j = 1 , n w (( i - 1 ) * n + j ) = u ( i ) * v ( j ) end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid2 ( X_dir1 , X_dir2 , Xt ) real ( rk ), dimension (:), intent ( in ), contiguous :: X_dir1 , X_dir2 real ( rk ), dimension (:,:), allocatable , intent ( out ) :: Xt integer :: s1 , s2 , i , j , n s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) allocate ( Xt ( s1 * s2 , 2 )) n = 0 do j = 1 , s2 do i = 1 , s1 n = n + 1 Xt ( n , 1 ) = X_dir1 ( i ) Xt ( n , 2 ) = X_dir2 ( j ) end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid3 ( X_dir1 , X_dir2 , X_dir3 , Xt ) real ( rk ), dimension (:), intent ( in ), contiguous :: X_dir1 , X_dir2 , X_dir3 real ( rk ), dimension (:,:), allocatable , intent ( out ) :: Xt integer :: s1 , s2 , s3 , i , j , k , n s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) s3 = size ( X_dir3 ) allocate ( Xt ( s1 * s2 * s3 , 3 )) n = 0 do k = 1 , s3 do j = 1 , s2 do i = 1 , s1 n = n + 1 Xt ( n , 1 ) = X_dir1 ( i ) Xt ( n , 2 ) = X_dir2 ( j ) Xt ( n , 3 ) = X_dir3 ( k ) end do end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function repelem ( a , b ) result ( c ) real ( rk ), dimension (:), intent ( in ), contiguous :: a integer , dimension (:), intent ( in ), contiguous :: b real ( rk ), dimension ( sum ( b )) :: c integer :: i , l , n l = 0 do i = 1 , size ( a ) n = b ( i ) c ( l + 1 : l + n ) = a ( i ) l = l + n end do end function repelem !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_L ( nnode , p ) result ( elemConn ) integer , intent ( in ) :: nnode integer , intent ( in ) :: p integer , dimension (:,:), allocatable :: elemConn integer :: i , j , l integer , dimension (:), allocatable :: nodes allocate ( elemConn ( (( nnode - p ) / p ) , 2 )) nodes = [( i , i = 1 , nnode )] l = 0 do i = 1 , nnode - p , p l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p ),[( p + 1 )]) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_S ( nnode1 , nnode2 , p1 , p2 ) result ( elemConn ) integer , intent ( in ) :: nnode1 , nnode2 integer , intent ( in ) :: p1 , p2 integer , dimension (:,:), allocatable :: elemConn integer :: i , j , l integer , dimension (:,:), allocatable :: nodes allocate ( elemConn ( (( nnode1 - p1 ) / p1 ) * (( nnode2 - p2 ) / p2 ) , 4 )) nodes = reshape ([( i , i = 1 , nnode1 * nnode2 )], [ nnode1 , nnode2 ]) l = 0 do j = 1 , nnode2 - p2 , p2 do i = 1 , nnode1 - p1 , p1 l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p1 , j : j + p2 ),[( p1 + 1 ) * ( p2 + 1 )]) end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_V ( nnode1 , nnode2 , nnode3 , p1 , p2 , p3 ) result ( elemConn ) integer , intent ( in ) :: nnode1 , nnode2 , nnode3 integer , intent ( in ) :: p1 , p2 , p3 integer , dimension (:,:), allocatable :: elemConn integer :: i , j , k , l integer , dimension (:,:,:), allocatable :: nodes allocate ( elemConn ( (( nnode1 - p1 ) / p1 ) * (( nnode2 - p2 ) / p2 ) * (( nnode3 - p3 ) / p3 ) , 8 )) nodes = reshape ([( i , i = 1 , nnode1 * nnode2 * nnode3 )], [ nnode1 , nnode2 , nnode3 ]) l = 0 do k = 1 , nnode3 - p3 , p3 do j = 1 , nnode2 - p2 , p2 do i = 1 , nnode1 - p1 , p1 l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p1 , j : j + p2 , k : k + p3 ),[( p1 + 1 ) * ( p2 + 1 ) * ( p3 + 1 )]) end do end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_multiplicity ( knot ) result ( multiplicity ) real ( rk ), intent ( in ) :: knot (:) integer , dimension (:), allocatable :: multiplicity integer :: i , count count = 1 do i = 2 , size ( knot ) if ( knot ( i ) /= knot ( i - 1 )) count = count + 1 end do allocate ( multiplicity ( count )) multiplicity ( 1 ) = 1 count = 1 do i = 2 , size ( knot ) if ( knot ( i ) /= knot ( i - 1 )) then count = count + 1 multiplicity ( count ) = 1 else multiplicity ( count ) = multiplicity ( count ) + 1 end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_knot_vector ( Xth_dir , order , continuity ) result ( knot ) real ( rk ), intent ( in ) :: Xth_dir (:) integer , intent ( in ) :: order integer , intent ( in ) :: continuity (:) real ( rk ), allocatable :: knot (:) knot = repelem ( Xth_dir , ( order - continuity )) end function !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.f90.html"},{"title":"forcad_bezier_curve.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_curve.f90~~EfferentGraph sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_curve.f90~~AfferentGraph sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_curve use forcad_utils , only : rk , basis_bernstein , elemConn_C0 implicit none private public bezier_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_curve real ( rk ), allocatable , private :: Xc (:,:) !! Control points real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points real ( rk ), allocatable , private :: Wc (:) !! Weights real ( rk ), allocatable , private :: Xt (:) !! Parameter values integer , private :: nc !! Number of control points integer , private :: ng !! Number of geometry points contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the Bezier curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: elevate_degree !!> Elevate the degree of the Bezier curve end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , Xc , Wc ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate geometry points of the Bezier curve. pure subroutine create ( this , res , Xt ) class ( bezier_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), optional :: Xt (:) real ( rk ), allocatable :: Tgc (:) integer :: i , j ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) this % Xt = Xt elseif ( present ( res )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) allocate ( this % Xt ( res )) this % Xt = [( real ( i - 1 , rk ) / real ( res - 1 , rk ), i = 1 , res )] ! else ! this%Xt = this%Xt end if ! Set number of geometry points this % ng = size ( this % Xt , 1 ) ! Allocate memory for geometry points if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng , size ( this % Xc , 2 ))) ! Compute geometry points if ( allocated ( this % Wc )) then ! Rational Bezier curve do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bernstein ( this % Xt ( i ), this % nc ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier curve do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bernstein ( this % Xt ( i ), this % nc ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this ) result ( Xt ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xt (:) if ( allocated ( this % Xt )) then Xt = this % Xt else ! print*, 'Error: Parameter values are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_curve ), intent ( in ) :: this integer :: nc nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_curve ), intent ( in ) :: this integer :: ng ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_curve ), intent ( in ) :: this integer :: order order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Finalize the Bezier curve object by deallocating memory. pure subroutine finalize ( this ) class ( bezier_curve ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt )) deallocate ( this % Xt ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate connectivity for control points. pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % nc , p ) else elemConn = elemConn_C0 ( this % nc , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate connectivity for geometry points. pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % ng , p ) else elemConn = elemConn_C0 ( this % ng , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Export control points to a VTK file. impure subroutine export_Xc ( this , filename ) class ( bezier_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Export geometry points to a VTK file. impure subroutine export_Xg ( this , filename ) class ( bezier_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify coordinate of a control point given its index and direction. pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify weight of a control point given its index. pure subroutine modify_Wc ( this , W , num ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Elevate the degree of the Bezier curve by one. pure subroutine elevate_degree ( this ) class ( bezier_curve ), intent ( inout ) :: this integer :: nc_new , j , i real ( rk ), allocatable :: Xc_new (:,:) real ( rk ), allocatable :: Wc_new (:) ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if if ( allocated ( this % Wc )) then ! Rational Bezier curve ! Calculate the new number of control points nc_new = this % nc + 1 allocate ( Xc_new ( nc_new , size ( this % Xc , 2 ))) allocate ( Wc_new ( nc_new )) ! Compute new control points Xc_new ( 1 ,:) = this % Xc ( 1 ,:) * this % Wc ( 1 ) Wc_new ( 1 ) = this % Wc ( 1 ) Xc_new ( nc_new ,:) = this % Xc ( this % nc ,:) * this % Wc ( this % nc ) Wc_new ( nc_new ) = this % Wc ( this % nc ) do concurrent ( j = 2 : this % nc ) do i = 1 , size ( this % Xc , 2 ) Xc_new ( j , i ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Xc ( j - 1 , i ) * this % Wc ( j - 1 ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Xc ( j , i ) * this % Wc ( j ) end do Wc_new ( j ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Wc ( j - 1 ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Wc ( j ) end do ! Normalize the new control points do concurrent ( i = 1 : size ( this % Xc , 2 )) Xc_new (:, i ) = Xc_new (:, i ) / Wc_new (:) end do ! Update geometry points deallocate ( this % Xc , this % Wc ) call this % set ( Xc = Xc_new , Wc = Wc_new ) call this % create ( Xt = this % Xt ) else ! Non-rational Bezier curve ! Calculate the new number of control points nc_new = this % nc + 1 allocate ( Xc_new ( nc_new , size ( this % Xc , 2 ))) ! Compute new control points Xc_new ( 1 ,:) = this % Xc ( 1 ,:) Xc_new ( nc_new ,:) = this % Xc ( this % nc ,:) do concurrent ( j = 2 : this % nc ) do i = 1 , size ( this % Xc , 2 ) Xc_new ( j , i ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Xc ( j - 1 , i ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Xc ( j , i ) end do end do ! Update geometry points call this % set ( Xc = Xc_new ) call this % create ( Xt = this % Xt ) end if end subroutine !=============================================================================== end module forcad_bezier_curve","tags":"","loc":"sourcefile/forcad_bezier_curve.f90.html"},{"title":"forcad.f90 – ForCAD","text":"This file depends on sourcefile~~forcad.f90~~EfferentGraph sourcefile~forcad.f90 forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad.f90~~AfferentGraph sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad use forcad_utils use forcad_bezier_curve use forcad_bezier_surface use forcad_bezier_volume use forcad_nurbs_curve use forcad_nurbs_surface use forcad_nurbs_volume private public rk ,& bezier_curve , bezier_surface , bezier_volume ,& nurbs_curve , nurbs_surface , nurbs_volume end module forcad","tags":"","loc":"sourcefile/forcad.f90.html"},{"title":"bezier_surface.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_surface.f90~~EfferentGraph sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier surface object to create, and finalize a Bezier surface. !> It sets up control points and weights, generates the surface, and exports the control points !> and the surface to VTK files at various stages. program example_bezier_surface use forcad , only : rk , bezier_surface implicit none type ( bezier_surface ) :: bezier !! Declare a bezier surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier surface !----------------------------------------------------------------------------- !> Define control points for the Bezier surface Xc = generate_Xc ( 10 , 10 , 1.5_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier surface object call bezier % set ([ 10 , 10 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier surface !----------------------------------------------------------------------------- !> Generate the Bezier surface with a resolution of 100x100 call bezier % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call bezier % export_Xg ( 'vtk/bezier_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier surface object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_bezier_surface","tags":"","loc":"sourcefile/bezier_surface.f90.html"},{"title":"forcad_bezier_surface.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_surface.f90~~EfferentGraph sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_surface.f90~~AfferentGraph sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_surface use forcad_utils , only : rk , basis_bernstein , elemConn_C0 , kron , ndgrid implicit none private public bezier_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_surface real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction integer , private :: nc ( 2 ) !! number of control points in each direction integer , private :: ng ( 2 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier surface object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , nc , Xc , Wc ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ) :: nc (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = nc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! Rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine create !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( bezier_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_surface ), intent ( in ) :: this integer :: nc ( 2 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_surface ), intent ( in ) :: this integer :: ng ( 2 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_surface ), intent ( in ) :: this integer :: order ( 2 ) order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( bezier_surface ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( bezier_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( bezier_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify coordinate of a control point given its index and direction. pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify weight of a control point given its index. pure subroutine modify_Wc ( this , W , num ) class ( bezier_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== end module forcad_bezier_surface","tags":"","loc":"sourcefile/forcad_bezier_surface.f90.html"},{"title":"forcad_bezier_volume.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_volume.f90~~EfferentGraph sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_volume.f90~~AfferentGraph sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_volume use forcad_utils , only : rk , basis_bernstein , elemConn_C0 , kron , ndgrid implicit none private public bezier_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier volume object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type bezier_volume !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , nc , Xc , Wc ) class ( bezier_volume ), intent ( inout ) :: this integer , intent ( in ) :: nc (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = nc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:), Xt3 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc3 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt integer , intent ( in ), optional :: res1 , res2 , res3 ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set parameter values if ( present ( Xt3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) this % Xt3 = Xt3 elseif ( present ( res3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) allocate ( this % Xt3 ( res3 )) this % Xt3 = [( real ( i - 1 , rk ) / real ( res3 - 1 , rk ), i = 1 , res3 )] ! else ! this%Xt3 = this%Xt3 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) this % ng ( 3 ) = size ( this % Xt3 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , this % Xt3 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc3 = basis_bernstein ( Xt ( i , 3 ), this % nc ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc3 = basis_bernstein ( Xt ( i , 3 ), this % nc ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( bezier_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_volume ), intent ( in ) :: this integer :: nc ( 3 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_volume ), intent ( in ) :: this integer :: ng ( 3 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_volume ), intent ( in ) :: this integer :: order ( 3 ) order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( bezier_volume ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( bezier_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( bezier_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== end module forcad_bezier_volume","tags":"","loc":"sourcefile/forcad_bezier_volume.f90.html"},{"title":"nurbs_curve.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_curve.f90~~EfferentGraph sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) curve object to create and finalize a NURBS curve. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the curve, and exports the control points and the curve to VTK files. program example_nurbs_curve use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: nurbs !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 5 ) !! Array for knot vector !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- ! Define control points for the NURBS curve allocate ( Xc ( 3 , 3 )) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.0_rk , 5.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 1 0.0_rk , 1 0.0_rk , 0.0_rk ] ! Define weights for the control points allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.0_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.5_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights for the NURBS curve object call nurbs % set ( knot , Xc , Wc ) ! Export control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- ! Generate the NURBS curve with a resolution of 100 call nurbs % create ( res = 1000 ) ! Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- ! Finalize the NURBS curve object call nurbs % finalize () end program example_nurbs_curve","tags":"","loc":"sourcefile/nurbs_curve.f90.html"},{"title":"nurbs_surface.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_surface.f90~~EfferentGraph sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) surface object to create and finalize a NURBS surface. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the surface, and exports the control points and the surface to VTK files. program example_nurbs_surface use forcad implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 6 ), knot2 ( 6 ) !! Arrays for knot vectors in both dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS surface Xc = generate_Xc ( 3 , 3 , 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 ))) Wc = 1.0_rk !> Define knot vectors for both dimensions knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS surface object call nurbs % set ( knot1 , knot2 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call nurbs % create ( 30 , 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_nurbs_surface","tags":"","loc":"sourcefile/nurbs_surface.f90.html"},{"title":"bezier_curve.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_curve.f90~~EfferentGraph sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier curve object to create, and finalize a Bezier curve. !> It sets up control points and weights, generates the curve, and exports the control points !> and the curve to VTK files at various stages. program example_bezier_curve use forcad , only : rk , bezier_curve implicit none type ( bezier_curve ) :: bezier !! Declare a bezier curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier curve !----------------------------------------------------------------------------- !> Define control points for the Bezier curve Xc = generate_Xc ( 5 , 1.0_rk , 2.0_rk , 20 ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier curve object call bezier % set ( Xc = Xc , Wc = Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier curve !----------------------------------------------------------------------------- !> Generate the Bezier curve with a resolution of 1000 call bezier % create ( res = 500 ) !> Export the generated curve to a VTK file call bezier % export_Xg ( 'vtk/bezier_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier curve object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_coils , radius , height , num_points_per_coil ) result ( control_points ) integer , intent ( in ) :: num_coils , num_points_per_coil real ( rk ), intent ( in ) :: radius , height real ( rk ), dimension (:,:), allocatable :: control_points integer :: coil , i real ( rk ) :: theta , coil_height allocate ( control_points ( num_coils * num_points_per_coil , 3 )) do coil = 1 , num_coils coil_height = height * ( coil - 1 ) / real ( num_coils - 1 , rk ) theta = 0.0_rk do i = 1 , num_points_per_coil theta = theta + 2.0_rk * acos ( - 1.0_rk ) / real ( num_points_per_coil , rk ) control_points (( coil - 1 ) * num_points_per_coil + i , 1 ) = radius * cos ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 2 ) = radius * sin ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 3 ) = coil_height end do end do end function !----------------------------------------------------------------------------- end program example_bezier_curve","tags":"","loc":"sourcefile/bezier_curve.f90.html"},{"title":"nurbs_volume.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_volume.f90~~EfferentGraph sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) volume object to create and finalize a NURBS volume. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the volume, and exports the control points and the volume to VTK files. program example_nurbs_volume use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: nurbs !! Declare a NURBS volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 4 ), knot2 ( 4 ), knot3 ( 4 ) !! Arrays for knot vectors in all three dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define the control points for the NURBS volume Xc = generate_Xc ( 5.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Define knot vectors for all three dimensions knot1 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot3 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS volume object call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_nurbs_volume","tags":"","loc":"sourcefile/nurbs_volume.f90.html"},{"title":"bezier_volume.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_volume.f90~~EfferentGraph sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier volume object to create, and finalize a Bezier volume. !> It sets up control points and weights, generates the volume, and exports the control points !> and the volume to VTK files at various stages. program example_bezier_volume use forcad , only : rk , bezier_volume implicit none type ( bezier_volume ) :: bezier !! Declare a bezier volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier volume !----------------------------------------------------------------------------- !> Define control points for the Bezier volume Xc = generate_Xc ( 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier volume object call bezier % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier volume !----------------------------------------------------------------------------- !> Generate the Bezier volume with a resolution of 10x10x10 call bezier % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call bezier % export_Xg ( 'vtk/bezier_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier volume object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_bezier_volume","tags":"","loc":"sourcefile/bezier_volume.f90.html"},{"title":"forcad_nurbs_curve.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_curve.f90~~EfferentGraph sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_curve.f90~~AfferentGraph sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_curve use forcad_utils , only : rk , basis_bspline , elemConn_C0 , compute_multiplicity , compute_knot_vector implicit none private public nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_curve real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt (:) !! evaluation points real ( rk ), allocatable , private :: knot (:) !! knot vector integer , private :: order !! order of the curve integer , private :: nc !! number of control points integer , private :: ng !! number of geometry points contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the Bezier curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the curve procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set1 ( this , knot , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot = knot this % order = this % get_order () this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set2 ( this , Xth_dir , order , continuity , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir (:) integer , intent ( in ) :: order integer , intent ( in ) :: continuity (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot = compute_knot_vector ( Xth_dir , order , continuity ) this % order = order this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res , Xt ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), optional :: Xt (:) real ( rk ), allocatable :: Tgc (:) integer :: i , j ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) this % Xt = Xt elseif ( present ( res )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) allocate ( this % Xt ( res )) this % Xt = [( real ( i - 1 , rk ) / real ( res - 1 , rk ), i = 1 , res )] ! else ! this%Xt = this%Xt end if ! Set number of geometry points this % ng = size ( this % Xt ) ! Allocate memory for geometry points if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng , size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bspline ( this % Xt ( i ), this % knot , this % nc , this % order ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bspline ( this % Xt ( i ), this % knot , this % nc , this % order ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this ) result ( Xt ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xt (:) if ( allocated ( this % Xt )) then Xt = this % Xt else ! print*, 'Error: Parameter values are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_curve ), intent ( in ) :: this integer :: ng ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_curve ), intent ( in ) :: this integer :: order integer , allocatable :: m (:) m = this % get_multiplicity () order = m ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this ) result ( knot ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: knot (:) if ( allocated ( this % knot )) then knot = this % knot else ! print*, 'Error: Knot vector is not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_curve ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot )) deallocate ( this % knot ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % nc , p ) else elemConn = elemConn_C0 ( this % nc , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % ng , p ) else elemConn = elemConn_C0 ( this % ng , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot = this % knot , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot = this % knot , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this ) result ( m ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: m (:) ! check if (. not . allocated ( this % knot )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this ) result ( c ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: c (:) ! check if (. not . allocated ( this % knot )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order - compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( nurbs_curve ), intent ( in ) :: this integer :: nc nc = sum ( compute_multiplicity ( this % knot )) - this % order - 1 end function !=============================================================================== end module forcad_nurbs_curve","tags":"","loc":"sourcefile/forcad_nurbs_curve.f90.html"}]} \ No newline at end of file +var tipuesearch = {"pages":[{"title":" ForCAD ","text":"ForCAD ForCAD : A Fortran library for Geometric Modeling. ForCAD supports B-Spline , NURBS , Bezier , and Rational Bezier curves, surfaces, and volumes. fpm dependency If you want to use ForCAD as a dependency in your own fpm project,\nyou can easily include it by adding the following line to your fpm.toml file: [dependencies] forcad = { git = \"https://github.com/gha3mi/forcad.git\" } How to run examples To get started, follow these steps: Clone the repository: Clone the ForCAD repository from GitHub: git clone https://github.com/gha3mi/forcad.git cd forcad Using fpm fpm run --example --all API documentation The most up-to-date API documentation for the master branch is available here .\nTo generate the API documentation for ForCAD using ford run the following\ncommand: ford ford.yml ToDo [ ] Add method insert_knot() for B-splines and NURBS. [ ] Add method remove_knot() for B-splines and NURBS. [ ] Add method elevate_degree() for Bezier, Rational Bezier, B-splines, and NURBS. [ ] Add method reduce_degree() for Bezier, Rational Bezier, B-splines, and NURBS. Contributing Contributions to ForCAD are welcome!\nIf you find any issues or would like to suggest improvements, please open an issue. References The NURBS Book by Les Piegl, Wayne Tiller An Introduction to NURBS by David F. Rogers Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"bezier_volume – ForCAD ","text":"type, public :: bezier_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier volume object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_order Get order of the Bezier surface private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Source Code type bezier_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier volume object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type bezier_volume","tags":"","loc":"type/bezier_volume.html"},{"title":"nurbs_surface – ForCAD ","text":"type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction integer, private :: order (2) degree of each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the NURBS surface object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the surface private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_knot Get knot vector private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_surface.html"},{"title":"nurbs_volume – ForCAD ","text":"type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector real(kind=rk), private, allocatable :: knot3 (:) knot vector integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction integer, private :: order (3) degree of the first direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the NURBS curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the curve private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_knot Get knot vector private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_volume.html"},{"title":"bezier_curve – ForCAD ","text":"type, public :: bezier_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights real(kind=rk), private, allocatable :: Xc (:,:) Control points real(kind=rk), private, allocatable :: Xg (:,:) Geometry points real(kind=rk), private, allocatable :: Xt (:) Parameter values integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Generate geometry points of the Bezier curve. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) procedure, public :: elevate_degree Elevate the degree of the Bezier curve private pure subroutine elevate_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Elevate the degree of the Bezier curve by one. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export control points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export geometry points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Finalize the Bezier curve object by deallocating memory. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for control points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for geometry points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/bezier_curve.html"},{"title":"bezier_surface – ForCAD ","text":"type, public :: bezier_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier surface object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) procedure, public :: get_nc Get number of control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: get_order Get order of the Bezier surface private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir procedure, public :: set Set control points and weights private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/bezier_surface.html"},{"title":"nurbs_curve – ForCAD ","text":"type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt (:) evaluation points real(kind=rk), private, allocatable :: knot (:) knot vector integer, private :: nc number of control points integer, private :: ng number of geometry points integer, private :: order order of the curve Type-Bound Procedures procedure, public :: create Generate geometry points private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) procedure, public :: export_Xc Export control points to VTK file private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: export_Xg Export geometry points to VTK file private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename procedure, public :: finalize Finalize the Bezier curve object private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this procedure, public :: get_Wc Get weights private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_Xc Get control points private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xg Get geometry points private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) procedure, public :: get_Xt Get parameter values private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_continuity Get continuity of the curve private pure function get_continuity (this) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) procedure, public :: get_elem_Xc Generate connectivity for control points private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_elem_Xg Generate connectivity for geometry points private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p procedure, public :: get_knot Get knot vector private pure function get_knot (this) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) procedure, public :: get_multiplicity Get multiplicity of the knot vector private pure function get_multiplicity (this) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) procedure, public :: get_nc Get number of required control points private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: get_ng Get number of geometry points private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: get_order Get order of the Bezier curve private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer procedure, public :: modify_Wc Modify weights private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num procedure, public :: modify_Xc Modify control points private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir generic, public :: set => set1 , set2 private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set1 Set control points and weights private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) procedure, public :: set2 Set control points and weights private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"type/nurbs_curve.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_nc.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_order.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) Calls proc~~create~~CallsGraph proc~create forcad_bezier_volume::bezier_volume%create interface~ndgrid forcad_utils::ndgrid proc~create->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create->proc~basis_bernstein proc~kron forcad_utils::kron proc~create->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~~CalledByGraph proc~create forcad_bezier_volume::bezier_volume%create program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~~CalledByGraph proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~~CalledByGraph proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize forcad_bezier_volume::bezier_volume%finalize program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~finalize Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~~CallsGraph proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~~CalledByGraph proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~~CallsGraph proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~~CalledByGraph proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xg Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~~CallsGraph proc~modify_wc forcad_bezier_volume::bezier_volume%modify_Wc proc~set forcad_bezier_volume::bezier_volume%set proc~modify_wc->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~~CallsGraph proc~modify_xc forcad_bezier_volume::bezier_volume%modify_Xc proc~set forcad_bezier_volume::bezier_volume%set proc~modify_xc->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, nc, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_volume Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~~CalledByGraph proc~set forcad_bezier_volume::bezier_volume%set proc~modify_wc forcad_bezier_volume::bezier_volume%modify_Wc proc~modify_wc->proc~set proc~modify_xc forcad_bezier_volume::bezier_volume%modify_Xc proc~modify_xc->proc~set program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~set Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~2.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~2.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~2.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~2.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~~CallsGraph proc~get_continuity forcad_nurbs_surface::nurbs_surface%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this, dir) result(knot) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~~CallsGraph proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~~CalledByGraph proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~2->proc~get_multiplicity proc~set1 forcad_nurbs_surface::nurbs_surface%set1 proc~set1->proc~get_order~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this, dir) result(nc) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~2~~CallsGraph proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_nc~2~~CalledByGraph proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1 forcad_nurbs_surface::nurbs_surface%set1 proc~set1->proc~get_nc~2 proc~set2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2->proc~get_nc~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1 none~set~2->proc~set2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc~2.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_ng~2.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Calls proc~~get_order~2~~CallsGraph proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~2~~CalledByGraph proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1 forcad_nurbs_surface::nurbs_surface%set1 proc~set1->proc~get_order~2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order~2.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) Calls proc~~create~2~~CallsGraph proc~create~2 forcad_nurbs_surface::nurbs_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~2->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~2->proc~basis_bspline proc~kron forcad_utils::kron proc~create~2->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~2~~CalledByGraph proc~create~2 forcad_nurbs_surface::nurbs_surface%create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~2.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~2~~CallsGraph proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~2~~CalledByGraph proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~2.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~2~~CallsGraph proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~2~~CalledByGraph proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~2.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this Called by proc~~finalize~2~~CalledByGraph proc~finalize~2 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~finalize~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~2.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~2~~CallsGraph proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~2~~CalledByGraph proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~2.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~2~~CallsGraph proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~2->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~2~~CalledByGraph proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xg~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~2.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~2~~CallsGraph proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc none~set~2 forcad_nurbs_surface::nurbs_surface%set proc~modify_wc~2->none~set~2 proc~set1 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1 proc~set2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~2.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~2~~CallsGraph proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc none~set~2 forcad_nurbs_surface::nurbs_surface%set proc~modify_xc~2->none~set~2 proc~set1 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1 proc~set2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~2.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, Xc, Wc) Set control points and weights for the NURBS surface object. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~~CallsGraph proc~set1 forcad_nurbs_surface::nurbs_surface%set1 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1->proc~get_order~2 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~~CalledByGraph proc~set1 forcad_nurbs_surface::nurbs_surface%set1 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Set control points and weights for the NURBS surface object. Type Bound nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~~CallsGraph proc~set2 forcad_nurbs_surface::nurbs_surface%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set2->proc~get_nc~2 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~~CalledByGraph proc~set2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~3.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~3.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~3.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~3.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this, dir) result(c) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_continuity~2~~CallsGraph proc~get_continuity~2 forcad_nurbs_volume::nurbs_volume%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity~2.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this, dir) result(knot) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot~2.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this, dir) result(m) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~2~~CallsGraph proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~2~~CalledByGraph proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~get_order~3->proc~get_multiplicity~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_order~3 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set1~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity~2.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this, dir) result(nc) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~3~~CallsGraph proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_nc~3~~CalledByGraph proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_nc~3 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~get_nc~3 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set1~2 none~set~3->proc~set2~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc~3.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng~3.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Calls proc~~get_order~3~~CallsGraph proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3->proc~get_multiplicity~2 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~3~~CalledByGraph proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_order~3 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set1~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order~3.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) Calls proc~~create~3~~CallsGraph proc~create~3 forcad_nurbs_volume::nurbs_volume%create interface~ndgrid forcad_utils::ndgrid proc~create~3->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~3->proc~basis_bspline proc~kron forcad_utils::kron proc~create~3->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~3~~CalledByGraph proc~create~3 forcad_nurbs_volume::nurbs_volume%create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~3.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~3~~CallsGraph proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~3~~CalledByGraph proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~3.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~3~~CallsGraph proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~3~~CalledByGraph proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~3.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~3~~CalledByGraph proc~finalize~3 forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~finalize~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~3.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~3~~CallsGraph proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~3~~CalledByGraph proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~3.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~3~~CallsGraph proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~3->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~3~~CalledByGraph proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~3.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~3~~CallsGraph proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc none~set~3 forcad_nurbs_volume::nurbs_volume%set proc~modify_wc~3->none~set~3 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~3->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~3->proc~set2~2 proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~3 proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~set1~2->proc~get_order~3 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~3 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~3.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~3~~CallsGraph proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc none~set~3 forcad_nurbs_volume::nurbs_volume%set proc~modify_xc~3->none~set~3 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~3->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~3->proc~set2~2 proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~3 proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~set1~2->proc~get_order~3 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~3 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~3.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot1, knot2, knot3, Xc, Wc) Set control points and weights for the NURBS curve object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~2~~CallsGraph proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~3 proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~set1~2->proc~get_order~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~2~~CalledByGraph proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set1~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1~2.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Set control points and weights for the NURBS curve object. Type Bound nurbs_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~2~~CallsGraph proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set2~2->proc~get_nc~3 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~2~~CalledByGraph proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set2~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2~2.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~~CalledByGraph proc~generate_xc example_bezier_surface::generate_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~generate_xc Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc.html"},{"title":"basis_bernstein – ForCAD","text":"public pure function basis_bernstein(Xt, nc) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bernstein~~CalledByGraph proc~basis_bernstein forcad_utils::basis_bernstein proc~create forcad_bezier_volume::bezier_volume%create proc~create->proc~basis_bernstein proc~create~4 forcad_bezier_curve::bezier_curve%create proc~create~4->proc~basis_bernstein proc~create~5 forcad_bezier_surface::bezier_surface%create proc~create~5->proc~basis_bernstein proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~4 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~create~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/basis_bernstein.html"},{"title":"basis_bspline – ForCAD","text":"public pure function basis_bspline(Xt, knot, nc, order) result(B) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in) :: knot (:) integer, intent(in) :: nc integer, intent(in) :: order Return Value real(kind=rk), allocatable, (:) Called by proc~~basis_bspline~~CalledByGraph proc~basis_bspline forcad_utils::basis_bspline proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->proc~basis_bspline proc~create~3 forcad_nurbs_volume::nurbs_volume%create proc~create~3->proc~basis_bspline proc~create~6 forcad_nurbs_curve::nurbs_curve%create proc~create~6->proc~basis_bspline program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/basis_bspline.html"},{"title":"compute_knot_vector – ForCAD","text":"public pure function compute_knot_vector(Xth_dir, order, continuity) result(knot) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) Return Value real(kind=rk), allocatable, (:) Calls proc~~compute_knot_vector~~CallsGraph proc~compute_knot_vector forcad_utils::compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~compute_knot_vector~~CalledByGraph proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2->proc~compute_knot_vector proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set2~2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/compute_knot_vector.html"},{"title":"compute_multiplicity – ForCAD","text":"public pure function compute_multiplicity(knot) result(multiplicity) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: knot (:) Return Value integer, dimension(:), allocatable Called by proc~~compute_multiplicity~~CalledByGraph proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity forcad_nurbs_surface::nurbs_surface%get_continuity proc~get_continuity->proc~compute_multiplicity proc~get_continuity~2 forcad_nurbs_volume::nurbs_volume%get_continuity proc~get_continuity~2->proc~compute_multiplicity proc~get_continuity~3 forcad_nurbs_curve::nurbs_curve%get_continuity proc~get_continuity~3->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_multiplicity->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_multiplicity~2->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~get_nc~2->proc~compute_multiplicity proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~get_nc~3->proc~compute_multiplicity proc~get_nc~6 forcad_nurbs_curve::nurbs_curve%get_nc proc~get_nc~6->proc~compute_multiplicity proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~2->proc~get_multiplicity proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~get_order~3->proc~get_multiplicity~2 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_order~6->proc~get_multiplicity~3 proc~set1 forcad_nurbs_surface::nurbs_surface%set1 proc~set1->proc~get_nc~2 proc~set1->proc~get_order~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_nc~3 proc~set1~2->proc~get_order~3 proc~set2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2->proc~get_nc~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~get_nc~3 none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set1 none~set~2->proc~set2 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set1~2 none~set~3->proc~set2~2 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/compute_multiplicity.html"},{"title":"kron – ForCAD","text":"public pure function kron(u, v) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: u real(kind=rk), intent(in), dimension(:), contiguous :: v Return Value real(kind=rk), dimension(size(u)*size(v)) Called by proc~~kron~~CalledByGraph proc~kron forcad_utils::kron proc~create forcad_bezier_volume::bezier_volume%create proc~create->proc~kron proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->proc~kron proc~create~3 forcad_nurbs_volume::nurbs_volume%create proc~create~3->proc~kron proc~create~5 forcad_bezier_surface::bezier_surface%create proc~create~5->proc~kron program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/kron.html"},{"title":"cmp_elemConn_C0_L – ForCAD","text":"private pure function cmp_elemConn_C0_L(nnode, p) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_l~~CalledByGraph proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 program~example_bezier_curve->proc~export_xg~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 program~example_bezier_surface->proc~export_xg~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc program~example_bezier_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_l.html"},{"title":"cmp_elemConn_C0_S – ForCAD","text":"private pure function cmp_elemConn_C0_S(nnode1, nnode2, p1, p2) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_s~~CalledByGraph proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 program~example_bezier_curve->proc~export_xg~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 program~example_bezier_surface->proc~export_xg~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc program~example_bezier_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_s.html"},{"title":"cmp_elemConn_C0_V – ForCAD","text":"private pure function cmp_elemConn_C0_V(nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable Called by proc~~cmp_elemconn_c0_v~~CalledByGraph proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0 forcad_utils::elemConn_C0 interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 program~example_bezier_curve->proc~export_xg~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 program~example_bezier_surface->proc~export_xg~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc program~example_bezier_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/cmp_elemconn_c0_v.html"},{"title":"repelem – ForCAD","text":"private pure function repelem(a, b) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: a integer, intent(in), dimension(:), contiguous :: b Return Value real(kind=rk), dimension(sum(b)) Called by proc~~repelem~~CalledByGraph proc~repelem forcad_utils::repelem proc~compute_knot_vector forcad_utils::compute_knot_vector proc~compute_knot_vector->proc~repelem proc~set2 forcad_nurbs_surface::nurbs_surface%set2 proc~set2->proc~compute_knot_vector proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~compute_knot_vector proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~set2~3->proc~compute_knot_vector none~set~2 forcad_nurbs_surface::nurbs_surface%set none~set~2->proc~set2 none~set~3 forcad_nurbs_volume::nurbs_volume%set none~set~3->proc~set2~2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc~2 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~3 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~3->none~set~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~2 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~3 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~3->none~set~3 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function repelem ( a , b ) result ( c ) real ( rk ), dimension (:), intent ( in ), contiguous :: a integer , dimension (:), intent ( in ), contiguous :: b real ( rk ), dimension ( sum ( b )) :: c integer :: i , l , n l = 0 do i = 1 , size ( a ) n = b ( i ) c ( l + 1 : l + n ) = a ( i ) l = l + n end do end function repelem","tags":"","loc":"proc/repelem.html"},{"title":"ndgrid2 – ForCAD","text":"private pure subroutine ndgrid2(X_dir1, X_dir2, Xt) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Called by proc~~ndgrid2~~CalledByGraph proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid forcad_utils::ndgrid interface~ndgrid->proc~ndgrid2 proc~create forcad_bezier_volume::bezier_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~3 forcad_nurbs_volume::nurbs_volume%create proc~create~3->interface~ndgrid proc~create~5 forcad_bezier_surface::bezier_surface%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ndgrid2.html"},{"title":"ndgrid3 – ForCAD","text":"private pure subroutine ndgrid3(X_dir1, X_dir2, X_dir3, Xt) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Called by proc~~ndgrid3~~CalledByGraph proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid forcad_utils::ndgrid interface~ndgrid->proc~ndgrid3 proc~create forcad_bezier_volume::bezier_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~3 forcad_nurbs_volume::nurbs_volume%create proc~create~3->interface~ndgrid proc~create~5 forcad_bezier_surface::bezier_surface%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/ndgrid3.html"},{"title":"elemConn_C0 – ForCAD","text":"public interface elemConn_C0 Calls interface~~elemconn_c0~~CallsGraph interface~elemconn_c0 forcad_utils::elemConn_C0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by interface~~elemconn_c0~~CalledByGraph interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~4->interface~elemconn_c0 proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~5->interface~elemconn_c0 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 program~example_bezier_curve->proc~export_xg~4 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 program~example_bezier_surface->proc~export_xg~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~export_xc program~example_bezier_volume->proc~export_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 program~example_nurbs_curve->proc~export_xg~6 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~2 program~example_nurbs_surface->proc~export_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~3 program~example_nurbs_volume->proc~export_xg~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable","tags":"","loc":"interface/elemconn_c0.html"},{"title":"ndgrid – ForCAD","text":"public interface ndgrid Calls interface~~ndgrid~~CallsGraph interface~ndgrid forcad_utils::ndgrid proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by interface~~ndgrid~~CalledByGraph interface~ndgrid forcad_utils::ndgrid proc~create forcad_bezier_volume::bezier_volume%create proc~create->interface~ndgrid proc~create~2 forcad_nurbs_surface::nurbs_surface%create proc~create~2->interface~ndgrid proc~create~3 forcad_nurbs_volume::nurbs_volume%create proc~create~3->interface~ndgrid proc~create~5 forcad_bezier_surface::bezier_surface%create proc~create~5->interface~ndgrid program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~create~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt","tags":"","loc":"interface/ndgrid.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~2~~CalledByGraph proc~generate_xc~2 example_nurbs_volume::generate_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~generate_xc~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~2.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~4.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~4.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~4.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this) result(Xt) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~4.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_nc~4.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_ng~4.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_order~4.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res, Xt) Generate geometry points of the Bezier curve. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) Calls proc~~create~4~~CallsGraph proc~create~4 forcad_bezier_curve::bezier_curve%create proc~basis_bernstein forcad_utils::basis_bernstein proc~create~4->proc~basis_bernstein Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~4~~CalledByGraph proc~create~4 forcad_bezier_curve::bezier_curve%create proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~4 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~create~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~4.html"},{"title":"elevate_degree – ForCAD","text":"private pure subroutine elevate_degree(this) Elevate the degree of the Bezier curve by one. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this Calls proc~~elevate_degree~~CallsGraph proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~create~4 forcad_bezier_curve::bezier_curve%create proc~elevate_degree->proc~create~4 proc~set~2 forcad_bezier_curve::bezier_curve%set proc~elevate_degree->proc~set~2 proc~basis_bernstein forcad_utils::basis_bernstein proc~create~4->proc~basis_bernstein Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/elevate_degree.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Export control points to a VTK file. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~4~~CallsGraph proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~4~~CalledByGraph proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~4.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Export geometry points to a VTK file. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~4~~CallsGraph proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~4~~CalledByGraph proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xg~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~4.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Finalize the Bezier curve object by deallocating memory. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this Called by proc~~finalize~4~~CalledByGraph proc~finalize~4 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~finalize~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~4.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Generate connectivity for control points. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xc~4~~CallsGraph proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~4~~CalledByGraph proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~4->proc~get_elem_xc~4 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~4.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Generate connectivity for geometry points. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xg~4~~CallsGraph proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~4~~CalledByGraph proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~4->proc~get_elem_xg~4 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~export_xg~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~4.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Modify weight of a control point given its index. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~4~~CallsGraph proc~modify_wc~4 forcad_bezier_curve::bezier_curve%modify_Wc proc~set~2 forcad_bezier_curve::bezier_curve%set proc~modify_wc~4->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~4.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Modify coordinate of a control point given its index and direction. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~4~~CallsGraph proc~modify_xc~4 forcad_bezier_curve::bezier_curve%modify_Xc proc~set~2 forcad_bezier_curve::bezier_curve%set proc~modify_xc~4->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~4.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_curve Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~2~~CalledByGraph proc~set~2 forcad_bezier_curve::bezier_curve%set proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~set~2 proc~modify_wc~4 forcad_bezier_curve::bezier_curve%modify_Wc proc~modify_wc~4->proc~set~2 proc~modify_xc~4 forcad_bezier_curve::bezier_curve%modify_Xc proc~modify_xc~4->proc~set~2 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~set~2 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set~2.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~5.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~5.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~5.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this, dir) result(Xt) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~5.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_nc~5.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_ng~5.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2)","tags":"","loc":"proc/get_order~5.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res1, res2, Xt1, Xt2) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) Calls proc~~create~5~~CallsGraph proc~create~5 forcad_bezier_surface::bezier_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~5->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~5->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~5->proc~kron proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~5~~CalledByGraph proc~create~5 forcad_bezier_surface::bezier_surface%create program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! Rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine create","tags":"","loc":"proc/create~5.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~5~~CallsGraph proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~5~~CalledByGraph proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~5.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~5~~CallsGraph proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~5~~CalledByGraph proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xg~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~5.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this Called by proc~~finalize~5~~CalledByGraph proc~finalize~5 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~finalize~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~5.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xc~5~~CallsGraph proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~5~~CalledByGraph proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~5->proc~get_elem_xc~5 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~5.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) Calls proc~~get_elem_xg~5~~CallsGraph proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~5~~CalledByGraph proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~5->proc~get_elem_xg~5 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xg~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~5.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Modify weight of a control point given its index. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~5~~CallsGraph proc~modify_wc~5 forcad_bezier_surface::bezier_surface%modify_Wc proc~set~3 forcad_bezier_surface::bezier_surface%set proc~modify_wc~5->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~5.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Modify coordinate of a control point given its index and direction. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~5~~CallsGraph proc~modify_xc~5 forcad_bezier_surface::bezier_surface%modify_Xc proc~set~3 forcad_bezier_surface::bezier_surface%set proc~modify_xc~5->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~5.html"},{"title":"set – ForCAD","text":"private pure subroutine set(this, nc, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Called by proc~~set~3~~CalledByGraph proc~set~3 forcad_bezier_surface::bezier_surface%set proc~modify_wc~5 forcad_bezier_surface::bezier_surface%modify_Wc proc~modify_wc~5->proc~set~3 proc~modify_xc~5 forcad_bezier_surface::bezier_surface%modify_Xc proc~modify_xc~5->proc~set~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~set~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set~3.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~3~~CalledByGraph proc~generate_xc~3 example_bezier_volume::generate_Xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->proc~generate_xc~3 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~3.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_coils, radius, height, num_points_per_coil) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_coils real(kind=rk), intent(in) :: radius real(kind=rk), intent(in) :: height integer, intent(in) :: num_points_per_coil Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~4~~CalledByGraph proc~generate_xc~4 example_bezier_curve::generate_Xc program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~generate_xc~4 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~4.html"},{"title":"get_Wc – ForCAD","text":"private pure function get_Wc(this) result(Wc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_wc~6.html"},{"title":"get_Xc – ForCAD","text":"private pure function get_Xc(this) result(Xc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xc~6.html"},{"title":"get_Xg – ForCAD","text":"private pure function get_Xg(this) result(Xg) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:)","tags":"","loc":"proc/get_xg~6.html"},{"title":"get_Xt – ForCAD","text":"private pure function get_Xt(this) result(Xt) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_xt~6.html"},{"title":"get_continuity – ForCAD","text":"private pure function get_continuity(this) result(c) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_continuity~3~~CallsGraph proc~get_continuity~3 forcad_nurbs_curve::nurbs_curve%get_continuity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_continuity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_continuity~3.html"},{"title":"get_knot – ForCAD","text":"private pure function get_knot(this) result(knot) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"proc/get_knot~3.html"},{"title":"get_multiplicity – ForCAD","text":"private pure function get_multiplicity(this) result(m) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) Calls proc~~get_multiplicity~3~~CallsGraph proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_multiplicity~3~~CalledByGraph proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_order~6->proc~get_multiplicity~3 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_multiplicity~3.html"},{"title":"get_nc – ForCAD","text":"private pure function get_nc(this) result(nc) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Calls proc~~get_nc~6~~CallsGraph proc~get_nc~6 forcad_nurbs_curve::nurbs_curve%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~6->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_nc~6.html"},{"title":"get_ng – ForCAD","text":"private pure function get_ng(this) result(ng) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer","tags":"","loc":"proc/get_ng~6.html"},{"title":"get_order – ForCAD","text":"private pure function get_order(this) result(order) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Calls proc~~get_order~6~~CallsGraph proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_order~6~~CalledByGraph proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~set1~3->proc~get_order~6 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_order~6.html"},{"title":"create – ForCAD","text":"private pure subroutine create(this, res, Xt) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) Calls proc~~create~6~~CallsGraph proc~create~6 forcad_nurbs_curve::nurbs_curve%create proc~basis_bspline forcad_utils::basis_bspline proc~create~6->proc~basis_bspline Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~create~6~~CalledByGraph proc~create~6 forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/create~6.html"},{"title":"export_Xc – ForCAD","text":"private impure subroutine export_Xc(this, filename) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~6~~CallsGraph proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xc~6~~CalledByGraph proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xc~6.html"},{"title":"export_Xg – ForCAD","text":"private impure subroutine export_Xg(this, filename) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~6~~CallsGraph proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~export_xg~6~~CalledByGraph proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/export_xg~6.html"},{"title":"finalize – ForCAD","text":"private pure subroutine finalize(this) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~6~~CalledByGraph proc~finalize~6 forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~finalize~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/finalize~6.html"},{"title":"get_elem_Xc – ForCAD","text":"private pure subroutine get_elem_Xc(this, elemConn, p) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xc~6~~CallsGraph proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xc~6~~CalledByGraph proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xc~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xc~6.html"},{"title":"get_elem_Xg – ForCAD","text":"private pure subroutine get_elem_Xg(this, elemConn, p) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p Calls proc~~get_elem_xg~6~~CallsGraph proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xg~6->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~get_elem_xg~6~~CalledByGraph proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~export_xg~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/get_elem_xg~6.html"},{"title":"modify_Wc – ForCAD","text":"private pure subroutine modify_Wc(this, W, num) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num Calls proc~~modify_wc~6~~CallsGraph proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc none~set~6 forcad_nurbs_curve::nurbs_curve%set proc~modify_wc~6->none~set~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_wc~6.html"},{"title":"modify_Xc – ForCAD","text":"private pure subroutine modify_Xc(this, X, num, dir) Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir Calls proc~~modify_xc~6~~CallsGraph proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc none~set~6 forcad_nurbs_curve::nurbs_curve%set proc~modify_xc~6->none~set~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/modify_xc~6.html"},{"title":"set1 – ForCAD","text":"private pure subroutine set1(this, knot, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set1~3~~CallsGraph proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set1~3~~CalledByGraph proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set1~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set1~3.html"},{"title":"set2 – ForCAD","text":"private pure subroutine set2(this, Xth_dir, order, continuity, Xc, Wc) Set control points and weights for the Bezier curve object. Type Bound nurbs_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) Calls proc~~set2~3~~CallsGraph proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~set2~3~~CalledByGraph proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6 forcad_nurbs_curve::nurbs_curve%set none~set~6->proc~set2~3 proc~modify_wc~6 forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc~6->none~set~6 proc~modify_xc~6 forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc~6->none~set~6 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set~6 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/set2~3.html"},{"title":"generate_Xc – ForCAD","text":"function generate_Xc(num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Called by proc~~generate_xc~5~~CalledByGraph proc~generate_xc~5 example_nurbs_surface::generate_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~generate_xc~5 Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"proc/generate_xc~5.html"},{"title":"forcad_bezier_volume – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_volume~~UsesGraph module~forcad_bezier_volume forcad_bezier_volume module~forcad_utils forcad_utils module~forcad_bezier_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_volume~~UsedByGraph module~forcad_bezier_volume forcad_bezier_volume module~forcad forcad module~forcad->module~forcad_bezier_volume program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier volume object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier surface Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this Return Value integer, (3) Subroutines private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_volume ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_volume.html"},{"title":"forcad_nurbs_surface – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_surface~~UsesGraph module~forcad_nurbs_surface forcad_nurbs_surface module~forcad_utils forcad_utils module~forcad_nurbs_surface->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_surface~~UsedByGraph module~forcad_nurbs_surface forcad_nurbs_surface module~forcad forcad module~forcad->module~forcad_nurbs_surface program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction integer, private :: order (2) degree of each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the NURBS surface object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the surface Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(in) :: dir Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this Return Value integer, (2) Subroutines private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot1, knot2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS surface object. Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_surface.html"},{"title":"forcad – ForCAD","text":"Uses forcad_bezier_volume forcad_bezier_surface forcad_utils forcad_nurbs_surface forcad_bezier_curve forcad_nurbs_volume forcad_nurbs_curve module~~forcad~~UsesGraph module~forcad forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad~~UsedByGraph module~forcad forcad program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs.","tags":"","loc":"module/forcad.html"},{"title":"forcad_nurbs_volume – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_volume~~UsesGraph module~forcad_nurbs_volume forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_volume~~UsedByGraph module~forcad_nurbs_volume forcad_nurbs_volume module~forcad forcad module~forcad->module~forcad_nurbs_volume program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_volume Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction real(kind=rk), private, allocatable :: Xt3 (:) parameter values in the third direction real(kind=rk), private, allocatable :: knot1 (:) knot vector real(kind=rk), private, allocatable :: knot2 (:) knot vector real(kind=rk), private, allocatable :: knot3 (:) knot vector integer, private :: nc (3) number of control points in each direction integer, private :: ng (3) number of geometry points in each direction integer, private :: order (3) degree of the first direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the NURBS curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the curve Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this, dir) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_knot (this, dir) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this, dir) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer, allocatable, (:) private pure function get_nc (this, dir) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3) Subroutines private pure subroutine create (this, res1, res2, res3, Xt1, Xt2, Xt3) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 integer, intent(in), optional :: res3 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) real(kind=rk), intent(in), optional :: Xt3 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot1, knot2, knot3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: knot1 (:) real(kind=rk), intent(in) :: knot2 (:) real(kind=rk), intent(in) :: knot3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir1, Xth_dir2, Xth_dir3, order, continuity1, continuity2, continuity3, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the NURBS curve object. Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir1 (:) real(kind=rk), intent(in) :: Xth_dir2 (:) real(kind=rk), intent(in) :: Xth_dir3 (:) integer, intent(in) :: order (:) integer, intent(in) :: continuity1 (:) integer, intent(in) :: continuity2 (:) integer, intent(in) :: continuity3 (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_volume.html"},{"title":"forcad_utils – ForCAD","text":"Used by module~~forcad_utils~~UsedByGraph module~forcad_utils forcad_utils module~forcad forcad module~forcad->module~forcad_utils module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Visibility Attributes Name Initial integer, public, parameter :: rk = kind(1.0d0) Interfaces public interface elemConn_C0 private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable public interface ndgrid private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt Functions public pure function basis_bernstein (Xt, nc) result(B) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt integer, intent(in) :: nc Return Value real(kind=rk), allocatable, (:) public pure function basis_bspline (Xt, knot, nc, order) result(B) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xt real(kind=rk), intent(in) :: knot (:) integer, intent(in) :: nc integer, intent(in) :: order Return Value real(kind=rk), allocatable, (:) public pure function compute_knot_vector (Xth_dir, order, continuity) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) Return Value real(kind=rk), allocatable, (:) public pure function compute_multiplicity (knot) result(multiplicity) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: knot (:) Return Value integer, dimension(:), allocatable public pure function kron (u, v) result(w) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: u real(kind=rk), intent(in), dimension(:), contiguous :: v Return Value real(kind=rk), dimension(size(u)*size(v)) private pure function cmp_elemConn_C0_L (nnode, p) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode integer, intent(in) :: p Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_S (nnode1, nnode2, p1, p2) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: p1 integer, intent(in) :: p2 Return Value integer, dimension(:,:), allocatable private pure function cmp_elemConn_C0_V (nnode1, nnode2, nnode3, p1, p2, p3) result(elemConn) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name integer, intent(in) :: nnode1 integer, intent(in) :: nnode2 integer, intent(in) :: nnode3 integer, intent(in) :: p1 integer, intent(in) :: p2 integer, intent(in) :: p3 Return Value integer, dimension(:,:), allocatable private pure function repelem (a, b) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: a integer, intent(in), dimension(:), contiguous :: b Return Value real(kind=rk), dimension(sum(b)) Subroutines private pure subroutine ndgrid2 (X_dir1, X_dir2, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt private pure subroutine ndgrid3 (X_dir1, X_dir2, X_dir3, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), dimension(:), contiguous :: X_dir1 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir2 real(kind=rk), intent(in), dimension(:), contiguous :: X_dir3 real(kind=rk), intent(out), dimension(:,:), allocatable :: Xt","tags":"","loc":"module/forcad_utils.html"},{"title":"forcad_bezier_curve – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_curve~~UsesGraph module~forcad_bezier_curve forcad_bezier_curve module~forcad_utils forcad_utils module~forcad_bezier_curve->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_curve~~UsedByGraph module~forcad_bezier_curve forcad_bezier_curve module~forcad forcad module~forcad->module~forcad_bezier_curve program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) Weights real(kind=rk), private, allocatable :: Xc (:,:) Control points real(kind=rk), private, allocatable :: Xg (:,:) Geometry points real(kind=rk), private, allocatable :: Xt (:) Parameter values integer, private :: nc Number of control points integer, private :: ng Number of geometry points Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: elevate_degree Elevate the degree of the Bezier curve Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this Return Value integer Subroutines private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Generate geometry points of the Bezier curve. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) private pure subroutine elevate_degree (this) Author Seyed Ali Ghasemi License BSD 3-Clause Elevate the degree of the Bezier curve by one. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export control points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Export geometry points to a VTK file. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Finalize the Bezier curve object by deallocating memory. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for control points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Generate connectivity for geometry points. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_curve.html"},{"title":"forcad_bezier_surface – ForCAD","text":"Uses forcad_utils module~~forcad_bezier_surface~~UsesGraph module~forcad_bezier_surface forcad_bezier_surface module~forcad_utils forcad_utils module~forcad_bezier_surface->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_bezier_surface~~UsedByGraph module~forcad_bezier_surface forcad_bezier_surface module~forcad forcad module~forcad->module~forcad_bezier_surface program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: bezier_surface Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt1 (:) parameter values in the first direction real(kind=rk), private, allocatable :: Xt2 (:) parameter values in the second direction integer, private :: nc (2) number of control points in each direction integer, private :: ng (2) number of geometry points in each direction Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier surface object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_nc Get number of control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier surface Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… procedure, public :: set Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this, dir) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(in) :: dir Return Value real(kind=rk), allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this Return Value integer, (2) Subroutines private pure subroutine create (this, res1, res2, Xt1, Xt2) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in), optional :: res1 integer, intent(in), optional :: res2 real(kind=rk), intent(in), optional :: Xt1 (:) real(kind=rk), intent(in), optional :: Xt2 (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p (:) private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Modify weight of a control point given its index. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Modify coordinate of a control point given its index and direction. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set (this, nc, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this integer, intent(in) :: nc (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_bezier_surface.html"},{"title":"forcad_nurbs_curve – ForCAD","text":"Uses forcad_utils module~~forcad_nurbs_curve~~UsesGraph module~forcad_nurbs_curve forcad_nurbs_curve module~forcad_utils forcad_utils module~forcad_nurbs_curve->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~forcad_nurbs_curve~~UsedByGraph module~forcad_nurbs_curve forcad_nurbs_curve module~forcad forcad module~forcad->module~forcad_nurbs_curve program~example_bezier_curve example_bezier_curve program~example_bezier_curve->module~forcad program~example_bezier_surface example_bezier_surface program~example_bezier_surface->module~forcad program~example_bezier_volume example_bezier_volume program~example_bezier_volume->module~forcad program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->module~forcad program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->module~forcad program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->module~forcad Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Derived Types type, public :: nurbs_curve Components Type Visibility Attributes Name Initial real(kind=rk), private, allocatable :: Wc (:) weights real(kind=rk), private, allocatable :: Xc (:,:) control points real(kind=rk), private, allocatable :: Xg (:,:) geometry points real(kind=rk), private, allocatable :: Xt (:) evaluation points real(kind=rk), private, allocatable :: knot (:) knot vector integer, private :: nc number of control points integer, private :: ng number of geometry points integer, private :: order order of the curve Type-Bound Procedures procedure, public :: create Generate geometry points Read more… procedure, public :: export_Xc Export control points to VTK file Read more… procedure, public :: export_Xg Export geometry points to VTK file Read more… procedure, public :: finalize Finalize the Bezier curve object Read more… procedure, public :: get_Wc Get weights Read more… procedure, public :: get_Xc Get control points Read more… procedure, public :: get_Xg Get geometry points Read more… procedure, public :: get_Xt Get parameter values Read more… procedure, public :: get_continuity Get continuity of the curve Read more… procedure, public :: get_elem_Xc Generate connectivity for control points Read more… procedure, public :: get_elem_Xg Generate connectivity for geometry points Read more… procedure, public :: get_knot Get knot vector Read more… procedure, public :: get_multiplicity Get multiplicity of the knot vector Read more… procedure, public :: get_nc Get number of required control points Read more… procedure, public :: get_ng Get number of geometry points Read more… procedure, public :: get_order Get order of the Bezier curve Read more… procedure, public :: modify_Wc Modify weights Read more… procedure, public :: modify_Xc Modify control points Read more… generic, public :: set => set1 , set2 procedure, public :: set1 Set control points and weights Read more… procedure, public :: set2 Set control points and weights Read more… Functions private pure function get_Wc (this) result(Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_Xc (this) result(Xc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xg (this) result(Xg) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:,:) private pure function get_Xt (this) result(Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_continuity (this) result(c) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) private pure function get_knot (this) result(knot) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value real(kind=rk), allocatable, (:) private pure function get_multiplicity (this) result(m) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer, allocatable, (:) private pure function get_nc (this) result(nc) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer private pure function get_ng (this) result(ng) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer private pure function get_order (this) result(order) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this Return Value integer Subroutines private pure subroutine create (this, res, Xt) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this integer, intent(in), optional :: res real(kind=rk), intent(in), optional :: Xt (:) private impure subroutine export_Xc (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename private impure subroutine export_Xg (this, filename) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename private pure subroutine finalize (this) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this private pure subroutine get_elem_Xc (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine get_elem_Xg (this, elemConn, p) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this integer, intent(out), dimension(:,:), allocatable :: elemConn integer, intent(in), optional :: p private pure subroutine modify_Wc (this, W, num) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: W integer, intent(in) :: num private pure subroutine modify_Xc (this, X, num, dir) Author Seyed Ali Ghasemi License BSD 3-Clause Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: X integer, intent(in) :: num integer, intent(in) :: dir private pure subroutine set1 (this, knot, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: knot (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:) private pure subroutine set2 (this, Xth_dir, order, continuity, Xc, Wc) Author Seyed Ali Ghasemi License BSD 3-Clause Set control points and weights for the Bezier curve object. Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this real(kind=rk), intent(in) :: Xth_dir (:) integer, intent(in) :: order integer, intent(in) :: continuity (:) real(kind=rk), intent(in) :: Xc (:,:) real(kind=rk), intent(in), optional :: Wc (:)","tags":"","loc":"module/forcad_nurbs_curve.html"},{"title":"example_nurbs_curve – ForCAD","text":"Uses forcad program~~example_nurbs_curve~~UsesGraph program~example_nurbs_curve example_nurbs_curve module~forcad forcad program~example_nurbs_curve->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) curve object to create and finalize a NURBS curve.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the curve, and exports the control points and the curve to VTK files. Calls program~~example_nurbs_curve~~CallsGraph program~example_nurbs_curve example_nurbs_curve none~set~6 forcad_nurbs_curve::nurbs_curve%set program~example_nurbs_curve->none~set~6 proc~create~6 forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve->proc~create~6 proc~export_xc~6 forcad_nurbs_curve::nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc~6 proc~export_xg~6 forcad_nurbs_curve::nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg~6 proc~finalize~6 forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve->proc~finalize~6 proc~set1~3 forcad_nurbs_curve::nurbs_curve%set1 none~set~6->proc~set1~3 proc~set2~3 forcad_nurbs_curve::nurbs_curve%set2 none~set~6->proc~set2~3 proc~basis_bspline forcad_utils::basis_bspline proc~create~6->proc~basis_bspline proc~get_elem_xc~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~get_elem_xg~6 forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg~6->interface~elemconn_c0 proc~get_order~6 forcad_nurbs_curve::nurbs_curve%get_order proc~set1~3->proc~get_order~6 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity~3 forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_order~6->proc~get_multiplicity~3 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot (5) Array for knot vector type( nurbs_curve ) :: nurbs Declare a NURBS curve object Source Code program example_nurbs_curve use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: nurbs !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 5 ) !! Array for knot vector !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- ! Define control points for the NURBS curve allocate ( Xc ( 3 , 3 )) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.0_rk , 5.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 1 0.0_rk , 1 0.0_rk , 0.0_rk ] ! Define weights for the control points allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.0_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.5_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights for the NURBS curve object call nurbs % set ( knot , Xc , Wc ) ! Export control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- ! Generate the NURBS curve with a resolution of 100 call nurbs % create ( res = 1000 ) ! Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- ! Finalize the NURBS curve object call nurbs % finalize () end program example_nurbs_curve","tags":"","loc":"program/example_nurbs_curve.html"},{"title":"example_bezier_surface – ForCAD","text":"Uses forcad program~~example_bezier_surface~~UsesGraph program~example_bezier_surface example_bezier_surface module~forcad forcad program~example_bezier_surface->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier surface object to create, and finalize a Bezier surface.\nIt sets up control points and weights, generates the surface, and exports the control points\nand the surface to VTK files at various stages. Define control points for the Bezier surface Define weights for the control points Set control points and weights for the bezier surface object Export initial control points to a VTK file Generate the Bezier surface with a resolution of 100x100 Export the generated surface to a VTK file Finalize the Bezier surface object Calls program~~example_bezier_surface~~CallsGraph program~example_bezier_surface example_bezier_surface proc~create~5 forcad_bezier_surface::bezier_surface%create program~example_bezier_surface->proc~create~5 proc~export_xc~5 forcad_bezier_surface::bezier_surface%export_Xc program~example_bezier_surface->proc~export_xc~5 proc~export_xg~5 forcad_bezier_surface::bezier_surface%export_Xg program~example_bezier_surface->proc~export_xg~5 proc~finalize~5 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface->proc~finalize~5 proc~generate_xc example_bezier_surface::generate_Xc program~example_bezier_surface->proc~generate_xc proc~set~3 forcad_bezier_surface::bezier_surface%set program~example_bezier_surface->proc~set~3 interface~ndgrid forcad_utils::ndgrid proc~create~5->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~5->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~5->proc~kron proc~get_elem_xc~5 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 proc~get_elem_xg~5 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~5->interface~elemconn_c0 proc~get_elem_xg~5->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_surface ) :: bezier Declare a bezier surface object Functions function generate_Xc (num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_surface use forcad , only : rk , bezier_surface implicit none type ( bezier_surface ) :: bezier !! Declare a bezier surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier surface !----------------------------------------------------------------------------- !> Define control points for the Bezier surface Xc = generate_Xc ( 10 , 10 , 1.5_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier surface object call bezier % set ([ 10 , 10 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier surface !----------------------------------------------------------------------------- !> Generate the Bezier surface with a resolution of 100x100 call bezier % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call bezier % export_Xg ( 'vtk/bezier_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier surface object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_bezier_surface","tags":"","loc":"program/example_bezier_surface.html"},{"title":"example_nurbs_volume – ForCAD","text":"Uses forcad program~~example_nurbs_volume~~UsesGraph program~example_nurbs_volume example_nurbs_volume module~forcad forcad program~example_nurbs_volume->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) volume object to create and finalize a NURBS volume.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the volume, and exports the control points and the volume to VTK files. Define the control points for the NURBS volume Define weights for the control points Define knot vectors for all three dimensions\nSet knot vectors, control points, and weights for the NURBS volume object Export the control points to a VTK file Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions Export the generated volume to a VTK file Finalize the NURBS volume object Calls program~~example_nurbs_volume~~CallsGraph program~example_nurbs_volume example_nurbs_volume none~set~3 forcad_nurbs_volume::nurbs_volume%set program~example_nurbs_volume->none~set~3 proc~create~3 forcad_nurbs_volume::nurbs_volume%create program~example_nurbs_volume->proc~create~3 proc~export_xc~3 forcad_nurbs_volume::nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc~3 proc~export_xg~3 forcad_nurbs_volume::nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg~3 proc~finalize~3 forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume->proc~finalize~3 proc~generate_xc~2 example_nurbs_volume::generate_Xc program~example_nurbs_volume->proc~generate_xc~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~3->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~3->proc~set2~2 interface~ndgrid forcad_utils::ndgrid proc~create~3->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~3->proc~basis_bspline proc~kron forcad_utils::kron proc~create~3->proc~kron proc~get_elem_xc~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~get_elem_xg~3 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xg~3->interface~elemconn_c0 proc~get_nc~3 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~3 proc~get_order~3 forcad_nurbs_volume::nurbs_volume%get_order proc~set1~2->proc~get_order~3 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~2->proc~compute_knot_vector proc~set2~2->proc~get_nc~3 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~3->proc~compute_multiplicity proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%get_multiplicity proc~get_order~3->proc~get_multiplicity~2 proc~get_multiplicity~2->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot1 (4) Arrays for knot vectors in all three dimensions real(kind=rk) :: knot2 (4) Arrays for knot vectors in all three dimensions real(kind=rk) :: knot3 (4) Arrays for knot vectors in all three dimensions type( nurbs_volume ) :: nurbs Declare a NURBS volume object Functions function generate_Xc (L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_nurbs_volume use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: nurbs !! Declare a NURBS volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 4 ), knot2 ( 4 ), knot3 ( 4 ) !! Arrays for knot vectors in all three dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define the control points for the NURBS volume Xc = generate_Xc ( 5.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Define knot vectors for all three dimensions knot1 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot3 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS volume object call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_nurbs_volume","tags":"","loc":"program/example_nurbs_volume.html"},{"title":"example_bezier_volume – ForCAD","text":"Uses forcad program~~example_bezier_volume~~UsesGraph program~example_bezier_volume example_bezier_volume module~forcad forcad program~example_bezier_volume->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier volume object to create, and finalize a Bezier volume.\nIt sets up control points and weights, generates the volume, and exports the control points\nand the volume to VTK files at various stages. Define control points for the Bezier volume Define weights for the control points Set control points and weights for the bezier volume object Export initial control points to a VTK file Generate the Bezier volume with a resolution of 10x10x10 Export the generated volume to a VTK file Finalize the Bezier volume object Calls program~~example_bezier_volume~~CallsGraph program~example_bezier_volume example_bezier_volume proc~create forcad_bezier_volume::bezier_volume%create program~example_bezier_volume->proc~create proc~export_xc forcad_bezier_volume::bezier_volume%export_Xc program~example_bezier_volume->proc~export_xc proc~export_xg forcad_bezier_volume::bezier_volume%export_Xg program~example_bezier_volume->proc~export_xg proc~finalize forcad_bezier_volume::bezier_volume%finalize program~example_bezier_volume->proc~finalize proc~generate_xc~3 example_bezier_volume::generate_Xc program~example_bezier_volume->proc~generate_xc~3 proc~set forcad_bezier_volume::bezier_volume%set program~example_bezier_volume->proc~set interface~ndgrid forcad_utils::ndgrid proc~create->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create->proc~basis_bernstein proc~kron forcad_utils::kron proc~create->proc~kron proc~get_elem_xc forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc->proc~get_elem_xc proc~get_elem_xg forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg->proc~get_elem_xg proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xg->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_volume ) :: bezier Declare a bezier volume object Functions function generate_Xc (L) result(control_points) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: L Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_volume use forcad , only : rk , bezier_volume implicit none type ( bezier_volume ) :: bezier !! Declare a bezier volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier volume !----------------------------------------------------------------------------- !> Define control points for the Bezier volume Xc = generate_Xc ( 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier volume object call bezier % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier volume !----------------------------------------------------------------------------- !> Generate the Bezier volume with a resolution of 10x10x10 call bezier % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call bezier % export_Xg ( 'vtk/bezier_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier volume object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_bezier_volume","tags":"","loc":"program/example_bezier_volume.html"},{"title":"example_bezier_curve – ForCAD","text":"Uses forcad program~~example_bezier_curve~~UsesGraph program~example_bezier_curve example_bezier_curve module~forcad forcad program~example_bezier_curve->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a Bezier curve object to create, and finalize a Bezier curve.\nIt sets up control points and weights, generates the curve, and exports the control points\nand the curve to VTK files at various stages. Define control points for the Bezier curve Define weights for the control points Set control points and weights for the bezier curve object Export initial control points to a VTK file Generate the Bezier curve with a resolution of 1000 Export the generated curve to a VTK file Finalize the Bezier curve object Calls program~~example_bezier_curve~~CallsGraph program~example_bezier_curve example_bezier_curve proc~create~4 forcad_bezier_curve::bezier_curve%create program~example_bezier_curve->proc~create~4 proc~export_xc~4 forcad_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve->proc~export_xc~4 proc~export_xg~4 forcad_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve->proc~export_xg~4 proc~finalize~4 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve->proc~finalize~4 proc~generate_xc~4 example_bezier_curve::generate_Xc program~example_bezier_curve->proc~generate_xc~4 proc~set~2 forcad_bezier_curve::bezier_curve%set program~example_bezier_curve->proc~set~2 proc~basis_bernstein forcad_utils::basis_bernstein proc~create~4->proc~basis_bernstein proc~get_elem_xc~4 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~get_elem_xg~4 forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~4->interface~elemconn_c0 proc~get_elem_xg~4->interface~elemconn_c0 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights type( bezier_curve ) :: bezier Declare a bezier curve object Functions function generate_Xc (num_coils, radius, height, num_points_per_coil) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_coils real(kind=rk), intent(in) :: radius real(kind=rk), intent(in) :: height integer, intent(in) :: num_points_per_coil Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_bezier_curve use forcad , only : rk , bezier_curve implicit none type ( bezier_curve ) :: bezier !! Declare a bezier curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier curve !----------------------------------------------------------------------------- !> Define control points for the Bezier curve Xc = generate_Xc ( 5 , 1.0_rk , 2.0_rk , 20 ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier curve object call bezier % set ( Xc = Xc , Wc = Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier curve !----------------------------------------------------------------------------- !> Generate the Bezier curve with a resolution of 1000 call bezier % create ( res = 500 ) !> Export the generated curve to a VTK file call bezier % export_Xg ( 'vtk/bezier_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier curve object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_coils , radius , height , num_points_per_coil ) result ( control_points ) integer , intent ( in ) :: num_coils , num_points_per_coil real ( rk ), intent ( in ) :: radius , height real ( rk ), dimension (:,:), allocatable :: control_points integer :: coil , i real ( rk ) :: theta , coil_height allocate ( control_points ( num_coils * num_points_per_coil , 3 )) do coil = 1 , num_coils coil_height = height * ( coil - 1 ) / real ( num_coils - 1 , rk ) theta = 0.0_rk do i = 1 , num_points_per_coil theta = theta + 2.0_rk * acos ( - 1.0_rk ) / real ( num_points_per_coil , rk ) control_points (( coil - 1 ) * num_points_per_coil + i , 1 ) = radius * cos ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 2 ) = radius * sin ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 3 ) = coil_height end do end do end function !----------------------------------------------------------------------------- end program example_bezier_curve","tags":"","loc":"program/example_bezier_curve.html"},{"title":"example_nurbs_surface – ForCAD","text":"Uses forcad program~~example_nurbs_surface~~UsesGraph program~example_nurbs_surface example_nurbs_surface module~forcad forcad program~example_nurbs_surface->module~forcad module~forcad_bezier_curve forcad_bezier_curve module~forcad->module~forcad_bezier_curve module~forcad_bezier_surface forcad_bezier_surface module~forcad->module~forcad_bezier_surface module~forcad_bezier_volume forcad_bezier_volume module~forcad->module~forcad_bezier_volume module~forcad_nurbs_curve forcad_nurbs_curve module~forcad->module~forcad_nurbs_curve module~forcad_nurbs_surface forcad_nurbs_surface module~forcad->module~forcad_nurbs_surface module~forcad_nurbs_volume forcad_nurbs_volume module~forcad->module~forcad_nurbs_volume module~forcad_utils forcad_utils module~forcad->module~forcad_utils module~forcad_bezier_curve->module~forcad_utils module~forcad_bezier_surface->module~forcad_utils module~forcad_bezier_volume->module~forcad_utils module~forcad_nurbs_curve->module~forcad_utils module~forcad_nurbs_surface->module~forcad_utils module~forcad_nurbs_volume->module~forcad_utils Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) surface object to create and finalize a NURBS surface.\nIt sets up control points, weights, and knot vectors for all three dimensions, generates the surface, and exports the control points and the surface to VTK files. Define control points for the NURBS surface Define weights for the control points\nDefine knot vectors for both dimensions\nSet knot vectors, control points, and weights for the NURBS surface object Export the control points to a VTK file Generate the NURBS surface with resolutions of 30 in both dimensions Export the generated surface to a VTK file Finalize the NURBS surface object Calls program~~example_nurbs_surface~~CallsGraph program~example_nurbs_surface example_nurbs_surface none~set~2 forcad_nurbs_surface::nurbs_surface%set program~example_nurbs_surface->none~set~2 proc~create~2 forcad_nurbs_surface::nurbs_surface%create program~example_nurbs_surface->proc~create~2 proc~export_xc~2 forcad_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface->proc~export_xc~2 proc~export_xg~2 forcad_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface->proc~export_xg~2 proc~finalize~2 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface->proc~finalize~2 proc~generate_xc~5 example_nurbs_surface::generate_Xc program~example_nurbs_surface->proc~generate_xc~5 proc~set1 forcad_nurbs_surface::nurbs_surface%set1 none~set~2->proc~set1 proc~set2 forcad_nurbs_surface::nurbs_surface%set2 none~set~2->proc~set2 interface~ndgrid forcad_utils::ndgrid proc~create~2->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~2->proc~basis_bspline proc~kron forcad_utils::kron proc~create~2->proc~kron proc~get_elem_xc~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~get_elem_xg~2 forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~ndgrid2 forcad_utils::ndgrid2 interface~ndgrid->proc~ndgrid2 proc~ndgrid3 forcad_utils::ndgrid3 interface~ndgrid->proc~ndgrid3 interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xg~2->interface~elemconn_c0 proc~get_nc~2 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1->proc~get_nc~2 proc~get_order~2 forcad_nurbs_surface::nurbs_surface%get_order proc~set1->proc~get_order~2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~set2->proc~get_nc~2 proc~cmp_elemconn_c0_l forcad_utils::cmp_elemConn_C0_L interface~elemconn_c0->proc~cmp_elemconn_c0_l proc~cmp_elemconn_c0_s forcad_utils::cmp_elemConn_C0_S interface~elemconn_c0->proc~cmp_elemconn_c0_s proc~cmp_elemconn_c0_v forcad_utils::cmp_elemConn_C0_V interface~elemconn_c0->proc~cmp_elemconn_c0_v proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~2->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~2->proc~get_multiplicity proc~get_multiplicity->proc~compute_multiplicity Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: Wc (:) Arrays for control points and weights real(kind=rk), allocatable :: Xc (:,:) Arrays for control points and weights real(kind=rk) :: knot1 (6) Arrays for knot vectors in both dimensions real(kind=rk) :: knot2 (6) Arrays for knot vectors in both dimensions type( nurbs_surface ) :: nurbs Declare a NURBS surface object Functions function generate_Xc (num_rows, num_cols, peak_height) result(control_points) Arguments Type Intent Optional Attributes Name integer, intent(in) :: num_rows integer, intent(in) :: num_cols real(kind=rk), intent(in) :: peak_height Return Value real(kind=rk), dimension(:,:), allocatable Source Code program example_nurbs_surface use forcad implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 6 ), knot2 ( 6 ) !! Arrays for knot vectors in both dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS surface Xc = generate_Xc ( 3 , 3 , 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 ))) Wc = 1.0_rk !> Define knot vectors for both dimensions knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS surface object call nurbs % set ( knot1 , knot2 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call nurbs % create ( 30 , 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_nurbs_surface","tags":"","loc":"program/example_nurbs_surface.html"},{"title":"forcad_bezier_volume.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_volume.f90~~EfferentGraph sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_volume.f90~~AfferentGraph sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_volume use forcad_utils , only : rk , basis_bernstein , elemConn_C0 , kron , ndgrid implicit none private public bezier_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier volume object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type bezier_volume !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , nc , Xc , Wc ) class ( bezier_volume ), intent ( inout ) :: this integer , intent ( in ) :: nc (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = nc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:), Xt3 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc3 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt integer , intent ( in ), optional :: res1 , res2 , res3 ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set parameter values if ( present ( Xt3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) this % Xt3 = Xt3 elseif ( present ( res3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) allocate ( this % Xt3 ( res3 )) this % Xt3 = [( real ( i - 1 , rk ) / real ( res3 - 1 , rk ), i = 1 , res3 )] ! else ! this%Xt3 = this%Xt3 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) this % ng ( 3 ) = size ( this % Xt3 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , this % Xt3 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc3 = basis_bernstein ( Xt ( i , 3 ), this % nc ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc3 = basis_bernstein ( Xt ( i , 3 ), this % nc ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_volume ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( bezier_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_volume ), intent ( in ) :: this integer :: nc ( 3 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_volume ), intent ( in ) :: this integer :: ng ( 3 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_volume ), intent ( in ) :: this integer :: order ( 3 ) order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( bezier_volume ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( bezier_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( bezier_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( bezier_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== end module forcad_bezier_volume","tags":"","loc":"sourcefile/forcad_bezier_volume.f90.html"},{"title":"forcad_nurbs_surface.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_surface.f90~~EfferentGraph sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_surface.f90~~AfferentGraph sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_surface use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector implicit none private public nurbs_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_surface real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: knot1 (:) !! knot vector real ( rk ), allocatable , private :: knot2 (:) !! knot vector integer , private :: order ( 2 ) !! degree of each direction integer , private :: nc ( 2 ) !! number of control points in each direction integer , private :: ng ( 2 ) !! number of geometry points in each direction contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the NURBS surface object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the surface procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS surface object. pure subroutine set1 ( this , knot1 , knot2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot1 (:) real ( rk ), intent ( in ) :: knot2 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot1 = knot1 this % knot2 = knot2 this % order = this % get_order () this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS surface object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , order , continuity1 , continuity2 , Xc , Wc ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir1 (:), Xth_dir2 (:) integer , intent ( in ) :: order (:) integer , intent ( in ) :: continuity1 (:), continuity2 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) integer :: nc ( 2 ) this % knot1 = compute_knot_vector ( Xth_dir1 , order ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , order ( 2 ), continuity2 ) this % order ( 1 ) = order ( 1 ) this % order ( 2 ) = order ( 2 ) this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( nurbs_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! NURBS surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_surface ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_surface ), intent ( in ) :: this integer :: ng ( 2 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_surface ), intent ( in ) :: this integer :: order ( 2 ) integer , allocatable :: m1 (:), m2 (:) m1 = this % get_multiplicity ( 1 ) m2 = this % get_multiplicity ( 2 ) order ( 1 ) = m1 ( 1 ) - 1 order ( 2 ) = m2 ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this , dir ) result ( knot ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: knot (:) if ( dir == 1 ) then if ( allocated ( this % knot1 )) then knot = this % knot1 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else ! print*, 'Error: Knot vector is not set.' end if else ! print*, 'Error: Invalid direction for knot vector.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_surface ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The NURBS surface is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this , dir ) result ( m ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: m (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot2 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this , dir ) result ( c ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: c (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this , dir ) result ( nc ) class ( nurbs_surface ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: nc if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_surface","tags":"","loc":"sourcefile/forcad_nurbs_surface.f90.html"},{"title":"forcad.f90 – ForCAD","text":"This file depends on sourcefile~~forcad.f90~~EfferentGraph sourcefile~forcad.f90 forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad.f90~~AfferentGraph sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad use forcad_utils use forcad_bezier_curve use forcad_bezier_surface use forcad_bezier_volume use forcad_nurbs_curve use forcad_nurbs_surface use forcad_nurbs_volume private public rk ,& bezier_curve , bezier_surface , bezier_volume ,& nurbs_curve , nurbs_surface , nurbs_volume end module forcad","tags":"","loc":"sourcefile/forcad.f90.html"},{"title":"nurbs_curve.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_curve.f90~~EfferentGraph sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) curve object to create and finalize a NURBS curve. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the curve, and exports the control points and the curve to VTK files. program example_nurbs_curve use forcad , only : rk , nurbs_curve implicit none type ( nurbs_curve ) :: nurbs !! Declare a NURBS curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot ( 5 ) !! Array for knot vector !----------------------------------------------------------------------------- ! Setting up the NURBS curve !----------------------------------------------------------------------------- ! Define control points for the NURBS curve allocate ( Xc ( 3 , 3 )) Xc ( 1 ,:) = [ 0.0_rk , 0.0_rk , 0.0_rk ] Xc ( 2 ,:) = [ 0.0_rk , 5.0_rk , 0.0_rk ] Xc ( 3 ,:) = [ 1 0.0_rk , 1 0.0_rk , 0.0_rk ] ! Define weights for the control points allocate ( Wc ( 3 )) Wc = [ 1.0_rk , 1.0_rk , 1.0_rk ] ! Define knot vector knot = [ 0.0_rk , 0.0_rk , 0.5_rk , 1.0_rk , 1.0_rk ] ! Set knot vector, control points, and weights for the NURBS curve object call nurbs % set ( knot , Xc , Wc ) ! Export control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS curve !----------------------------------------------------------------------------- ! Generate the NURBS curve with a resolution of 100 call nurbs % create ( res = 1000 ) ! Export the generated curve to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- ! Finalize the NURBS curve object call nurbs % finalize () end program example_nurbs_curve","tags":"","loc":"sourcefile/nurbs_curve.f90.html"},{"title":"forcad_nurbs_volume.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_volume.f90~~EfferentGraph sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_volume.f90~~AfferentGraph sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_volume use forcad_utils , only : rk , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector implicit none private public nurbs_volume !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_volume real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction real ( rk ), allocatable , private :: Xt3 (:) !! parameter values in the third direction real ( rk ), allocatable , private :: knot1 (:) !! knot vector real ( rk ), allocatable , private :: knot2 (:) !! knot vector real ( rk ), allocatable , private :: knot3 (:) !! knot vector integer , private :: order ( 3 ) !! degree of the first direction integer , private :: nc ( 3 ) !! number of control points in each direction integer , private :: ng ( 3 ) !! number of geometry points in each direction contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the NURBS curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the curve procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS curve object. pure subroutine set1 ( this , knot1 , knot2 , knot3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot1 (:), knot2 (:), knot3 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot1 = knot1 this % knot2 = knot2 this % knot3 = knot3 this % order = this % get_order () this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % nc ( 3 ) = this % get_nc ( 3 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the NURBS curve object. pure subroutine set2 ( this , Xth_dir1 , Xth_dir2 , Xth_dir3 , order , continuity1 , continuity2 , continuity3 , Xc , Wc ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir1 (:), Xth_dir2 (:), Xth_dir3 (:) integer , intent ( in ) :: order (:) integer , intent ( in ) :: continuity1 (:), continuity2 (:), continuity3 (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) integer :: nc ( 3 ) this % knot1 = compute_knot_vector ( Xth_dir1 , order ( 1 ), continuity1 ) this % knot2 = compute_knot_vector ( Xth_dir2 , order ( 2 ), continuity2 ) this % knot3 = compute_knot_vector ( Xth_dir3 , order ( 3 ), continuity3 ) this % order ( 1 ) = order ( 1 ) this % order ( 2 ) = order ( 2 ) this % order ( 3 ) = order ( 3 ) this % nc ( 1 ) = this % get_nc ( 1 ) this % nc ( 2 ) = this % get_nc ( 2 ) this % nc ( 3 ) = this % get_nc ( 3 ) this % Xc = Xc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , res3 , Xt1 , Xt2 , Xt3 ) class ( nurbs_volume ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 , res3 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:), Xt3 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc3 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set parameter values if ( present ( Xt3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) this % Xt3 = Xt3 elseif ( present ( res3 )) then if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) allocate ( this % Xt3 ( res3 )) this % Xt3 = [( real ( i - 1 , rk ) / real ( res3 - 1 , rk ), i = 1 , res3 )] ! else ! this%Xt3 = this%Xt3 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) this % ng ( 3 ) = size ( this % Xt3 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , this % Xt3 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ) * this % ng ( 3 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! NURBS volume do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % order ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bspline ( Xt ( i , 1 ), this % knot1 , this % nc ( 1 ), this % order ( 1 )) Tgc2 = basis_bspline ( Xt ( i , 2 ), this % knot2 , this % nc ( 2 ), this % order ( 2 )) Tgc3 = basis_bspline ( Xt ( i , 3 ), this % knot3 , this % nc ( 3 ), this % order ( 3 )) Tgc = kron ( Tgc3 , kron ( Tgc2 , Tgc1 )) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_volume ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_volume ), intent ( in ) :: this integer :: ng ( 3 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_volume ), intent ( in ) :: this integer :: order ( 3 ) integer , allocatable :: m1 (:), m2 (:), m3 (:) m1 = this % get_multiplicity ( 1 ) m2 = this % get_multiplicity ( 2 ) m3 = this % get_multiplicity ( 3 ) order ( 1 ) = m1 ( 1 ) - 1 order ( 2 ) = m2 ( 1 ) - 1 order ( 3 ) = m3 ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this , dir ) result ( knot ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: knot (:) if ( dir == 1 ) then if ( allocated ( this % knot1 )) then knot = this % knot1 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else ! print*, 'Error: Knot vector is not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % knot3 )) then knot = this % knot3 else ! print*, 'Error: Knot vector is not set.' end if else ! print*, 'Error: Invalid direction for knot vector.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_volume ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) if ( allocated ( this % Xt3 )) deallocate ( this % Xt3 ) if ( allocated ( this % knot1 )) deallocate ( this % knot1 ) if ( allocated ( this % knot2 )) deallocate ( this % knot2 ) if ( allocated ( this % knot3 )) deallocate ( this % knot3 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), this % nc ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_volume ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), p ( 1 ), p ( 2 ), p ( 3 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), this % ng ( 3 ), 1 , 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_volume ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 9 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 8 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ),& elemConn ( i , 5 ), elemConn ( i , 6 ), elemConn ( i , 8 ), elemConn ( i , 7 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 12 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , knot3 = this % knot3 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_volume ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot1 = this % knot1 , knot2 = this % knot2 , knot3 = this % knot3 , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The NURBS surface is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this , dir ) result ( m ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: m (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot3 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this , dir ) result ( c ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer , allocatable :: c (:) if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order ( 3 ) - compute_multiplicity ( this % knot3 ) end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this , dir ) result ( nc ) class ( nurbs_volume ), intent ( in ) :: this integer , intent ( in ) :: dir integer :: nc if ( dir == 1 ) then ! check if (. not . allocated ( this % knot1 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then ! print*, 'Error: Knot vector is not set.' return else nc = sum ( compute_multiplicity ( this % knot3 )) - this % order ( 3 ) - 1 end if else ! print*, 'Error: Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_volume","tags":"","loc":"sourcefile/forcad_nurbs_volume.f90.html"},{"title":"bezier_surface.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_surface.f90~~EfferentGraph sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier surface object to create, and finalize a Bezier surface. !> It sets up control points and weights, generates the surface, and exports the control points !> and the surface to VTK files at various stages. program example_bezier_surface use forcad , only : rk , bezier_surface implicit none type ( bezier_surface ) :: bezier !! Declare a bezier surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier surface !----------------------------------------------------------------------------- !> Define control points for the Bezier surface Xc = generate_Xc ( 10 , 10 , 1.5_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier surface object call bezier % set ([ 10 , 10 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier surface !----------------------------------------------------------------------------- !> Generate the Bezier surface with a resolution of 100x100 call bezier % create ( res1 = 30 , res2 = 30 ) !> Export the generated surface to a VTK file call bezier % export_Xg ( 'vtk/bezier_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier surface object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_bezier_surface","tags":"","loc":"sourcefile/bezier_surface.f90.html"},{"title":"forcad_utils.f90 – ForCAD","text":"Files dependent on this one sourcefile~~forcad_utils.f90~~AfferentGraph sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_utils implicit none private public :: rk , basis_bernstein , basis_bspline , elemConn_C0 , kron , ndgrid , compute_multiplicity , compute_knot_vector integer , parameter :: rk = kind ( 1.0d0 ) !=============================================================================== interface elemConn_C0 module procedure cmp_elemConn_C0_L module procedure cmp_elemConn_C0_S module procedure cmp_elemConn_C0_V end interface !=============================================================================== !=============================================================================== interface ndgrid module procedure ndgrid2 module procedure ndgrid3 end interface !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bspline ( Xt , knot , nc , order ) result ( B ) integer , intent ( in ) :: order real ( rk ), intent ( in ) :: knot (:) integer , intent ( in ) :: nc real ( rk ), intent ( in ) :: Xt real ( rk ) :: temp , Xth_i , Xth_i1 , Xth_ip , Xth_ip1 real ( rk ), allocatable :: Nt (:,:) integer :: i , p real ( rk ), allocatable :: B (:) temp = abs ( Xt - knot ( size ( knot ))) allocate ( Nt ( nc , 0 : order ), source = 0.0_rk ) do p = 0 , order do i = 1 , nc Xth_i = knot ( i ) Xth_i1 = knot ( i + 1 ) Xth_ip = knot ( i + p ) Xth_ip1 = knot ( i + p + 1 ) if ( temp /= tiny ( 0.0_rk ) . and . Xt >= Xth_i . and . Xt <= Xth_i1 ) Nt ( i , 0 ) = 1.0_rk if ( Xth_ip /= Xth_i ) Nt ( i , p ) = ( Xt - Xth_i ) / ( Xth_ip - Xth_i ) * Nt ( i , p - 1 ) if ( Xth_ip1 /= Xth_i1 ) Nt ( i , p ) = Nt ( i , p ) + ( Xth_ip1 - Xt ) / ( Xth_ip1 - Xth_i1 ) * Nt ( i + 1 , p - 1 ) end do end do B = Nt (:, order ) end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function basis_bernstein ( Xt , nc ) result ( B ) real ( rk ), intent ( in ) :: Xt integer , intent ( in ) :: nc real ( rk ), allocatable :: B (:) integer :: i allocate ( B ( nc ), source = 0.0_rk ) do concurrent ( i = 0 : nc - 1 ) B ( i + 1 ) = gamma ( real ( nc , kind = rk )) / ( gamma ( real ( i + 1 , kind = rk )) * gamma ( real ( nc - i , kind = rk ))) if ( Xt == 0.0_rk . and . i == 0 ) then B ( i + 1 ) = B ( i + 1 ) * ( 1.0_rk - Xt ) ** ( nc - 1 - i ) else if ( 1.0_rk - Xt == 0.0_rk . and . nc - 1 - i == 0 ) then B ( i + 1 ) = B ( i + 1 ) * ( Xt ** i ) else B ( i + 1 ) = B ( i + 1 ) * ( Xt ** i ) * ( 1.0_rk - Xt ) ** ( nc - 1 - i ) end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function kron ( u , v ) result ( w ) real ( rk ), dimension (:), intent ( in ), contiguous :: u , v real ( rk ), dimension ( size ( u ) * size ( v )) :: w integer :: i , j , m , n m = size ( u ) n = size ( v ) do i = 1 , m do j = 1 , n w (( i - 1 ) * n + j ) = u ( i ) * v ( j ) end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid2 ( X_dir1 , X_dir2 , Xt ) real ( rk ), dimension (:), intent ( in ), contiguous :: X_dir1 , X_dir2 real ( rk ), dimension (:,:), allocatable , intent ( out ) :: Xt integer :: s1 , s2 , i , j , n s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) allocate ( Xt ( s1 * s2 , 2 )) n = 0 do j = 1 , s2 do i = 1 , s1 n = n + 1 Xt ( n , 1 ) = X_dir1 ( i ) Xt ( n , 2 ) = X_dir2 ( j ) end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine ndgrid3 ( X_dir1 , X_dir2 , X_dir3 , Xt ) real ( rk ), dimension (:), intent ( in ), contiguous :: X_dir1 , X_dir2 , X_dir3 real ( rk ), dimension (:,:), allocatable , intent ( out ) :: Xt integer :: s1 , s2 , s3 , i , j , k , n s1 = size ( X_dir1 ) s2 = size ( X_dir2 ) s3 = size ( X_dir3 ) allocate ( Xt ( s1 * s2 * s3 , 3 )) n = 0 do k = 1 , s3 do j = 1 , s2 do i = 1 , s1 n = n + 1 Xt ( n , 1 ) = X_dir1 ( i ) Xt ( n , 2 ) = X_dir2 ( j ) Xt ( n , 3 ) = X_dir3 ( k ) end do end do end do end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function repelem ( a , b ) result ( c ) real ( rk ), dimension (:), intent ( in ), contiguous :: a integer , dimension (:), intent ( in ), contiguous :: b real ( rk ), dimension ( sum ( b )) :: c integer :: i , l , n l = 0 do i = 1 , size ( a ) n = b ( i ) c ( l + 1 : l + n ) = a ( i ) l = l + n end do end function repelem !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_L ( nnode , p ) result ( elemConn ) integer , intent ( in ) :: nnode integer , intent ( in ) :: p integer , dimension (:,:), allocatable :: elemConn integer :: i , j , l integer , dimension (:), allocatable :: nodes allocate ( elemConn ( (( nnode - p ) / p ) , 2 )) nodes = [( i , i = 1 , nnode )] l = 0 do i = 1 , nnode - p , p l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p ),[( p + 1 )]) end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_S ( nnode1 , nnode2 , p1 , p2 ) result ( elemConn ) integer , intent ( in ) :: nnode1 , nnode2 integer , intent ( in ) :: p1 , p2 integer , dimension (:,:), allocatable :: elemConn integer :: i , j , l integer , dimension (:,:), allocatable :: nodes allocate ( elemConn ( (( nnode1 - p1 ) / p1 ) * (( nnode2 - p2 ) / p2 ) , 4 )) nodes = reshape ([( i , i = 1 , nnode1 * nnode2 )], [ nnode1 , nnode2 ]) l = 0 do j = 1 , nnode2 - p2 , p2 do i = 1 , nnode1 - p1 , p1 l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p1 , j : j + p2 ),[( p1 + 1 ) * ( p2 + 1 )]) end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function cmp_elemConn_C0_V ( nnode1 , nnode2 , nnode3 , p1 , p2 , p3 ) result ( elemConn ) integer , intent ( in ) :: nnode1 , nnode2 , nnode3 integer , intent ( in ) :: p1 , p2 , p3 integer , dimension (:,:), allocatable :: elemConn integer :: i , j , k , l integer , dimension (:,:,:), allocatable :: nodes allocate ( elemConn ( (( nnode1 - p1 ) / p1 ) * (( nnode2 - p2 ) / p2 ) * (( nnode3 - p3 ) / p3 ) , 8 )) nodes = reshape ([( i , i = 1 , nnode1 * nnode2 * nnode3 )], [ nnode1 , nnode2 , nnode3 ]) l = 0 do k = 1 , nnode3 - p3 , p3 do j = 1 , nnode2 - p2 , p2 do i = 1 , nnode1 - p1 , p1 l = l + 1 elemConn ( l ,:) = reshape ( nodes ( i : i + p1 , j : j + p2 , k : k + p3 ),[( p1 + 1 ) * ( p2 + 1 ) * ( p3 + 1 )]) end do end do end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_multiplicity ( knot ) result ( multiplicity ) real ( rk ), intent ( in ) :: knot (:) integer , dimension (:), allocatable :: multiplicity integer :: i , count count = 1 do i = 2 , size ( knot ) if ( knot ( i ) /= knot ( i - 1 )) count = count + 1 end do allocate ( multiplicity ( count )) multiplicity ( 1 ) = 1 count = 1 do i = 2 , size ( knot ) if ( knot ( i ) /= knot ( i - 1 )) then count = count + 1 multiplicity ( count ) = 1 else multiplicity ( count ) = multiplicity ( count ) + 1 end if end do end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function compute_knot_vector ( Xth_dir , order , continuity ) result ( knot ) real ( rk ), intent ( in ) :: Xth_dir (:) integer , intent ( in ) :: order integer , intent ( in ) :: continuity (:) real ( rk ), allocatable :: knot (:) knot = repelem ( Xth_dir , ( order - continuity )) end function !=============================================================================== end module forcad_utils","tags":"","loc":"sourcefile/forcad_utils.f90.html"},{"title":"nurbs_volume.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_volume.f90~~EfferentGraph sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) volume object to create and finalize a NURBS volume. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the volume, and exports the control points and the volume to VTK files. program example_nurbs_volume use forcad , only : rk , nurbs_volume implicit none type ( nurbs_volume ) :: nurbs !! Declare a NURBS volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 4 ), knot2 ( 4 ), knot3 ( 4 ) !! Arrays for knot vectors in all three dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS volume !----------------------------------------------------------------------------- !> Define the control points for the NURBS volume Xc = generate_Xc ( 5.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Define knot vectors for all three dimensions knot1 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] knot3 = [ 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS volume object call nurbs % set ( knot1 , knot2 , knot3 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS volume !----------------------------------------------------------------------------- !> Generate the NURBS volume with resolutions of 15, 15, and 15 in the three dimensions call nurbs % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS volume object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_nurbs_volume","tags":"","loc":"sourcefile/nurbs_volume.f90.html"},{"title":"forcad_bezier_curve.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_curve.f90~~EfferentGraph sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_curve.f90~~AfferentGraph sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_curve use forcad_utils , only : rk , basis_bernstein , elemConn_C0 implicit none private public bezier_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_curve real ( rk ), allocatable , private :: Xc (:,:) !! Control points real ( rk ), allocatable , private :: Xg (:,:) !! Geometry points real ( rk ), allocatable , private :: Wc (:) !! Weights real ( rk ), allocatable , private :: Xt (:) !! Parameter values integer , private :: nc !! Number of control points integer , private :: ng !! Number of geometry points contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the Bezier curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: elevate_degree !!> Elevate the degree of the Bezier curve end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , Xc , Wc ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate geometry points of the Bezier curve. pure subroutine create ( this , res , Xt ) class ( bezier_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), optional :: Xt (:) real ( rk ), allocatable :: Tgc (:) integer :: i , j ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) this % Xt = Xt elseif ( present ( res )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) allocate ( this % Xt ( res )) this % Xt = [( real ( i - 1 , rk ) / real ( res - 1 , rk ), i = 1 , res )] ! else ! this%Xt = this%Xt end if ! Set number of geometry points this % ng = size ( this % Xt , 1 ) ! Allocate memory for geometry points if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng , size ( this % Xc , 2 ))) ! Compute geometry points if ( allocated ( this % Wc )) then ! Rational Bezier curve do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bernstein ( this % Xt ( i ), this % nc ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier curve do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bernstein ( this % Xt ( i ), this % nc ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this ) result ( Xt ) class ( bezier_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xt (:) if ( allocated ( this % Xt )) then Xt = this % Xt else ! print*, 'Error: Parameter values are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_curve ), intent ( in ) :: this integer :: nc nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_curve ), intent ( in ) :: this integer :: ng ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_curve ), intent ( in ) :: this integer :: order order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Finalize the Bezier curve object by deallocating memory. pure subroutine finalize ( this ) class ( bezier_curve ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt )) deallocate ( this % Xt ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate connectivity for control points. pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % nc , p ) else elemConn = elemConn_C0 ( this % nc , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Generate connectivity for geometry points. pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % ng , p ) else elemConn = elemConn_C0 ( this % ng , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Export control points to a VTK file. impure subroutine export_Xc ( this , filename ) class ( bezier_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Export geometry points to a VTK file. impure subroutine export_Xg ( this , filename ) class ( bezier_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify coordinate of a control point given its index and direction. pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify weight of a control point given its index. pure subroutine modify_Wc ( this , W , num ) class ( bezier_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Elevate the degree of the Bezier curve by one. pure subroutine elevate_degree ( this ) class ( bezier_curve ), intent ( inout ) :: this integer :: nc_new , j , i real ( rk ), allocatable :: Xc_new (:,:) real ( rk ), allocatable :: Wc_new (:) ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if if ( allocated ( this % Wc )) then ! Rational Bezier curve ! Calculate the new number of control points nc_new = this % nc + 1 allocate ( Xc_new ( nc_new , size ( this % Xc , 2 ))) allocate ( Wc_new ( nc_new )) ! Compute new control points Xc_new ( 1 ,:) = this % Xc ( 1 ,:) * this % Wc ( 1 ) Wc_new ( 1 ) = this % Wc ( 1 ) Xc_new ( nc_new ,:) = this % Xc ( this % nc ,:) * this % Wc ( this % nc ) Wc_new ( nc_new ) = this % Wc ( this % nc ) do concurrent ( j = 2 : this % nc ) do i = 1 , size ( this % Xc , 2 ) Xc_new ( j , i ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Xc ( j - 1 , i ) * this % Wc ( j - 1 ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Xc ( j , i ) * this % Wc ( j ) end do Wc_new ( j ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Wc ( j - 1 ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Wc ( j ) end do ! Normalize the new control points do concurrent ( i = 1 : size ( this % Xc , 2 )) Xc_new (:, i ) = Xc_new (:, i ) / Wc_new (:) end do ! Update geometry points deallocate ( this % Xc , this % Wc ) call this % set ( Xc = Xc_new , Wc = Wc_new ) call this % create ( Xt = this % Xt ) else ! Non-rational Bezier curve ! Calculate the new number of control points nc_new = this % nc + 1 allocate ( Xc_new ( nc_new , size ( this % Xc , 2 ))) ! Compute new control points Xc_new ( 1 ,:) = this % Xc ( 1 ,:) Xc_new ( nc_new ,:) = this % Xc ( this % nc ,:) do concurrent ( j = 2 : this % nc ) do i = 1 , size ( this % Xc , 2 ) Xc_new ( j , i ) = ( j - 1 ) / real ( nc_new - 1 , rk ) * this % Xc ( j - 1 , i ) + & ( 1 - ( j - 1 ) / real ( nc_new - 1 , rk )) * this % Xc ( j , i ) end do end do ! Update geometry points call this % set ( Xc = Xc_new ) call this % create ( Xt = this % Xt ) end if end subroutine !=============================================================================== end module forcad_bezier_curve","tags":"","loc":"sourcefile/forcad_bezier_curve.f90.html"},{"title":"forcad_bezier_surface.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_bezier_surface.f90~~EfferentGraph sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_bezier_surface.f90~~AfferentGraph sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_bezier_surface use forcad_utils , only : rk , basis_bernstein , elemConn_C0 , kron , ndgrid implicit none private public bezier_surface !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type bezier_surface real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt1 (:) !! parameter values in the first direction real ( rk ), allocatable , private :: Xt2 (:) !! parameter values in the second direction integer , private :: nc ( 2 ) !! number of control points in each direction integer , private :: ng ( 2 ) !! number of geometry points in each direction contains procedure :: set !!> Set control points and weights procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_nc !!> Get number of control points procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier surface procedure :: finalize !!> Finalize the Bezier surface object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set ( this , nc , Xc , Wc ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ) :: nc (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % Xc = Xc this % nc = nc if ( present ( Wc )) this % Wc = Wc end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res1 , res2 , Xt1 , Xt2 ) class ( bezier_surface ), intent ( inout ) :: this integer , intent ( in ), optional :: res1 , res2 real ( rk ), intent ( in ), optional :: Xt1 (:), Xt2 (:) integer :: i , j real ( rk ), dimension (:), allocatable :: Tgc1 , Tgc2 , Tgc real ( rk ), dimension (:,:), allocatable :: Xt ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) this % Xt1 = Xt1 elseif ( present ( res1 )) then if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) allocate ( this % Xt1 ( res1 )) this % Xt1 = [( real ( i - 1 , rk ) / real ( res1 - 1 , rk ), i = 1 , res1 )] ! else ! this%Xt1 = this%Xt1 end if ! Set parameter values if ( present ( Xt2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) this % Xt2 = Xt2 elseif ( present ( res2 )) then if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) allocate ( this % Xt2 ( res2 )) this % Xt2 = [( real ( i - 1 , rk ) / real ( res2 - 1 , rk ), i = 1 , res2 )] ! else ! this%Xt2 = this%Xt2 end if ! Set number of geometry points this % ng ( 1 ) = size ( this % Xt1 , 1 ) this % ng ( 2 ) = size ( this % Xt2 , 1 ) call ndgrid ( this % Xt1 , this % Xt2 , Xt ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng ( 1 ) * this % ng ( 2 ), size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then ! Rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else ! Non-rational Bezier surface do i = 1 , size ( Xt , 1 ) Tgc1 = basis_bernstein ( Xt ( i , 1 ), this % nc ( 1 )) Tgc2 = basis_bernstein ( Xt ( i , 2 ), this % nc ( 2 )) Tgc = kron ( Tgc2 , Tgc1 ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine create !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( bezier_surface ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this , dir ) result ( Xt ) class ( bezier_surface ), intent ( in ) :: this integer , intent ( in ) :: dir real ( rk ), allocatable :: Xt (:) if ( dir == 1 ) then if ( allocated ( this % Xt1 )) then Xt = this % Xt1 else ! print*, 'Error: Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else ! print*, 'Error: Parameter values are not set.' end if else ! print*, 'Error: Invalid direction for parameter values.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( bezier_surface ), intent ( in ) :: this integer :: nc ( 2 ) nc = this % nc end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( bezier_surface ), intent ( in ) :: this integer :: ng ( 2 ) ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( bezier_surface ), intent ( in ) :: this integer :: order ( 2 ) order = this % nc - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( bezier_surface ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt1 )) deallocate ( this % Xt1 ) if ( allocated ( this % Xt2 )) deallocate ( this % Xt2 ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( bezier_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % nc ( 1 ), this % nc ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( bezier_surface ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p (:) if ( present ( p )) then elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), p ( 1 ), p ( 2 )) else elemConn = elemConn_C0 ( this % ng ( 1 ), this % ng ( 2 ), 1 , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( bezier_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( bezier_surface ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 5 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 4 , elemConn ( i , 1 ), elemConn ( i , 2 ), elemConn ( i , 4 ), elemConn ( i , 3 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 9 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify coordinate of a control point given its index and direction. pure subroutine modify_Xc ( this , X , num , dir ) class ( bezier_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Modify weight of a control point given its index. pure subroutine modify_Wc ( this , W , num ) class ( bezier_surface ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( nc = this % nc , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== end module forcad_bezier_surface","tags":"","loc":"sourcefile/forcad_bezier_surface.f90.html"},{"title":"bezier_volume.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_volume.f90~~EfferentGraph sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier volume object to create, and finalize a Bezier volume. !> It sets up control points and weights, generates the volume, and exports the control points !> and the volume to VTK files at various stages. program example_bezier_volume use forcad , only : rk , bezier_volume implicit none type ( bezier_volume ) :: bezier !! Declare a bezier volume object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier volume !----------------------------------------------------------------------------- !> Define control points for the Bezier volume Xc = generate_Xc ( 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier volume object call bezier % set ([ 2 , 2 , 2 ], Xc , Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_volume_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier volume !----------------------------------------------------------------------------- !> Generate the Bezier volume with a resolution of 10x10x10 call bezier % create ( 15 , 15 , 15 ) !> Export the generated volume to a VTK file call bezier % export_Xg ( 'vtk/bezier_volume_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier volume object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( L ) result ( control_points ) implicit none real ( rk ), intent ( in ) :: L real ( rk ), dimension (:,:), allocatable :: control_points real ( rk ) :: L2 L2 = L / 2.0_rk allocate ( control_points ( 8 , 3 )) control_points ( 1 ,:) = [ L2 , - L2 , L2 ] control_points ( 2 ,:) = [ L2 , - L2 , - L2 ] control_points ( 3 ,:) = [ - L2 , - L2 , L2 ] control_points ( 4 ,:) = [ - L2 , - L2 , - L2 ] control_points ( 5 ,:) = [ L2 , L2 , L2 ] control_points ( 6 ,:) = [ L2 , L2 , - L2 ] control_points ( 7 ,:) = [ - L2 , L2 , L2 ] control_points ( 8 ,:) = [ - L2 , L2 , - L2 ] end function !----------------------------------------------------------------------------- end program example_bezier_volume","tags":"","loc":"sourcefile/bezier_volume.f90.html"},{"title":"bezier_curve.f90 – ForCAD","text":"This file depends on sourcefile~~bezier_curve.f90~~EfferentGraph sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a Bezier curve object to create, and finalize a Bezier curve. !> It sets up control points and weights, generates the curve, and exports the control points !> and the curve to VTK files at various stages. program example_bezier_curve use forcad , only : rk , bezier_curve implicit none type ( bezier_curve ) :: bezier !! Declare a bezier curve object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights !----------------------------------------------------------------------------- ! Setting up the bezier curve !----------------------------------------------------------------------------- !> Define control points for the Bezier curve Xc = generate_Xc ( 5 , 1.0_rk , 2.0_rk , 20 ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 )), source = 1.0_rk ) !> Set control points and weights for the bezier curve object call bezier % set ( Xc = Xc , Wc = Wc ) !> Export initial control points to a VTK file call bezier % export_Xc ( 'vtk/bezier_curve_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the bezier curve !----------------------------------------------------------------------------- !> Generate the Bezier curve with a resolution of 1000 call bezier % create ( res = 500 ) !> Export the generated curve to a VTK file call bezier % export_Xg ( 'vtk/bezier_curve_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the Bezier curve object call bezier % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_coils , radius , height , num_points_per_coil ) result ( control_points ) integer , intent ( in ) :: num_coils , num_points_per_coil real ( rk ), intent ( in ) :: radius , height real ( rk ), dimension (:,:), allocatable :: control_points integer :: coil , i real ( rk ) :: theta , coil_height allocate ( control_points ( num_coils * num_points_per_coil , 3 )) do coil = 1 , num_coils coil_height = height * ( coil - 1 ) / real ( num_coils - 1 , rk ) theta = 0.0_rk do i = 1 , num_points_per_coil theta = theta + 2.0_rk * acos ( - 1.0_rk ) / real ( num_points_per_coil , rk ) control_points (( coil - 1 ) * num_points_per_coil + i , 1 ) = radius * cos ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 2 ) = radius * sin ( theta ) control_points (( coil - 1 ) * num_points_per_coil + i , 3 ) = coil_height end do end do end function !----------------------------------------------------------------------------- end program example_bezier_curve","tags":"","loc":"sourcefile/bezier_curve.f90.html"},{"title":"forcad_nurbs_curve.f90 – ForCAD","text":"This file depends on sourcefile~~forcad_nurbs_curve.f90~~EfferentGraph sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~forcad_nurbs_curve.f90~~AfferentGraph sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~bezier_curve.f90 bezier_curve.f90 sourcefile~bezier_curve.f90->sourcefile~forcad.f90 sourcefile~bezier_surface.f90 bezier_surface.f90 sourcefile~bezier_surface.f90->sourcefile~forcad.f90 sourcefile~bezier_volume.f90 bezier_volume.f90 sourcefile~bezier_volume.f90->sourcefile~forcad.f90 sourcefile~nurbs_curve.f90 nurbs_curve.f90 sourcefile~nurbs_curve.f90->sourcefile~forcad.f90 sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~nurbs_volume.f90 nurbs_volume.f90 sourcefile~nurbs_volume.f90->sourcefile~forcad.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module forcad_nurbs_curve use forcad_utils , only : rk , basis_bspline , elemConn_C0 , compute_multiplicity , compute_knot_vector implicit none private public nurbs_curve !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause type nurbs_curve real ( rk ), allocatable , private :: Xc (:,:) !! control points real ( rk ), allocatable , private :: Xg (:,:) !! geometry points real ( rk ), allocatable , private :: Wc (:) !! weights real ( rk ), allocatable , private :: Xt (:) !! evaluation points real ( rk ), allocatable , private :: knot (:) !! knot vector integer , private :: order !! order of the curve integer , private :: nc !! number of control points integer , private :: ng !! number of geometry points contains procedure :: set1 !!> Set control points and weights procedure :: set2 !!> Set control points and weights generic :: set => set1 , set2 procedure :: create !!> Generate geometry points procedure :: get_Xc !!> Get control points procedure :: get_Xg !!> Get geometry points procedure :: get_Wc !!> Get weights procedure :: get_Xt !!> Get parameter values procedure :: get_knot !!> Get knot vector procedure :: get_ng !!> Get number of geometry points procedure :: get_order !!> Get order of the Bezier curve procedure :: finalize !!> Finalize the Bezier curve object procedure :: get_elem_Xc !!> Generate connectivity for control points procedure :: get_elem_Xg !!> Generate connectivity for geometry points procedure :: export_Xc !!> Export control points to VTK file procedure :: export_Xg !!> Export geometry points to VTK file procedure :: modify_Xc !!> Modify control points procedure :: modify_Wc !!> Modify weights procedure :: get_multiplicity !!> Get multiplicity of the knot vector procedure :: get_continuity !!> Get continuity of the curve procedure :: get_nc !!> Get number of required control points end type !=============================================================================== contains !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set1 ( this , knot , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: knot (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot = knot this % order = this % get_order () this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause !> Set control points and weights for the Bezier curve object. pure subroutine set2 ( this , Xth_dir , order , continuity , Xc , Wc ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: Xth_dir (:) integer , intent ( in ) :: order integer , intent ( in ) :: continuity (:) real ( rk ), intent ( in ) :: Xc (:,:) real ( rk ), intent ( in ), optional :: Wc (:) this % knot = compute_knot_vector ( Xth_dir , order , continuity ) this % order = order this % Xc = Xc this % nc = size ( this % Xc , 1 ) if ( present ( Wc )) then if ( size ( Wc ) /= this % nc ) then ! print*, 'Error: Number of weights does not match the number of control points.' return else this % Wc = Wc end if end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine create ( this , res , Xt ) class ( nurbs_curve ), intent ( inout ) :: this integer , intent ( in ), optional :: res real ( rk ), intent ( in ), optional :: Xt (:) real ( rk ), allocatable :: Tgc (:) integer :: i , j ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if ! Set parameter values if ( present ( Xt )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) this % Xt = Xt elseif ( present ( res )) then if ( allocated ( this % Xt )) deallocate ( this % Xt ) allocate ( this % Xt ( res )) this % Xt = [( real ( i - 1 , rk ) / real ( res - 1 , rk ), i = 1 , res )] ! else ! this%Xt = this%Xt end if ! Set number of geometry points this % ng = size ( this % Xt ) ! Allocate memory for geometry points if ( allocated ( this % Xg )) deallocate ( this % Xg ) allocate ( this % Xg ( this % ng , size ( this % Xc , 2 ))) if ( allocated ( this % Wc )) then do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bspline ( this % Xt ( i ), this % knot , this % nc , this % order ) Tgc = Tgc * ( this % Wc / ( dot_product ( Tgc , this % Wc ))) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do else do i = 1 , size ( this % Xt , 1 ) Tgc = basis_bspline ( this % Xt ( i ), this % knot , this % nc , this % order ) do j = 1 , size ( this % Xc , 2 ) this % Xg ( i , j ) = dot_product ( Tgc , this % Xc (:, j )) end do end do end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xc ( this ) result ( Xc ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xc (:,:) if ( allocated ( this % Xc )) then Xc = this % Xc else ! print*, 'Error: Control points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xg ( this ) result ( Xg ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xg (:,:) if ( allocated ( this % Xg )) then Xg = this % Xg else ! print*, 'Error: Geometry points are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Wc ( this ) result ( Wc ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Wc (:) if ( allocated ( this % Wc )) then Wc = this % Wc else ! print*, 'Error: The Bezier curve is not rational.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_Xt ( this ) result ( Xt ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: Xt (:) if ( allocated ( this % Xt )) then Xt = this % Xt else ! print*, 'Error: Parameter values are not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_ng ( this ) result ( ng ) class ( nurbs_curve ), intent ( in ) :: this integer :: ng ng = this % ng end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_order ( this ) result ( order ) class ( nurbs_curve ), intent ( in ) :: this integer :: order integer , allocatable :: m (:) m = this % get_multiplicity () order = m ( 1 ) - 1 end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_knot ( this ) result ( knot ) class ( nurbs_curve ), intent ( in ) :: this real ( rk ), allocatable :: knot (:) if ( allocated ( this % knot )) then knot = this % knot else ! print*, 'Error: Knot vector is not set.' end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine finalize ( this ) class ( nurbs_curve ), intent ( inout ) :: this if ( allocated ( this % Xc )) deallocate ( this % Xc ) if ( allocated ( this % Xg )) deallocate ( this % Xg ) if ( allocated ( this % Wc )) deallocate ( this % Wc ) if ( allocated ( this % Xt )) deallocate ( this % Xt ) if ( allocated ( this % knot )) deallocate ( this % knot ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xc ( this , elemConn , p ) class ( nurbs_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % nc , p ) else elemConn = elemConn_C0 ( this % nc , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine get_elem_Xg ( this , elemConn , p ) class ( nurbs_curve ), intent ( in ) :: this integer , dimension (:,:), allocatable , intent ( out ) :: elemConn integer , intent ( in ), optional :: p if ( present ( p )) then elemConn = elemConn_C0 ( this % ng , p ) else elemConn = elemConn_C0 ( this % ng , 1 ) end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xc ( this , filename ) class ( nurbs_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , nc , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xc )) then ! print*, 'Error: Control points are not set.' return end if call this % get_elem_Xc ( elemConn ) nc = size ( this % Xc , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xc' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , nc + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xc ( i , 1 ), this % Xc ( i , 2 ), this % Xc ( i , 3 ) , i = 1 , nc ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause impure subroutine export_Xg ( this , filename ) class ( nurbs_curve ), intent ( in ) :: this character ( len =* ), intent ( in ) :: filename integer :: i , j , ng , nunit integer , dimension (:,:), allocatable :: elemConn ! check if (. not . allocated ( this % Xg )) then ! print*, 'Error: Geometry points are not set.' return end if call this % get_elem_Xg ( elemConn ) ng = size ( this % Xg , 1 ) open ( newunit = nunit , file = filename , action = 'write' ) write ( nunit , '(a)' ) '# vtk DataFile Version 2.0' write ( nunit , '(a)' ) 'Xg' write ( nunit , '(a)' ) 'ASCII' write ( nunit , '(a)' ) 'DATASET UNSTRUCTURED_GRID' write ( nunit , '(a,\" \",g0,\" \",a)' ) 'POINTS' , ng + 1 , 'double' write ( nunit , '(f24.18,f24.18,f24.18)' ) 0.0_rk , 0.0_rk , 0.0_rk write ( nunit , '(f24.18,f24.18,f24.18)' ) ( this % Xg ( i , 1 ), this % Xg ( i , 2 ), this % Xg ( i , 3 ) , i = 1 , ng ) write ( nunit , '(a,\" \",g0,\" \",g0)' ) 'CELLS' , size ( elemConn , 1 ), size ( elemConn , 1 ) * 3 write ( nunit , '(g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0,\" \",g0)' )& ( 2 , elemConn ( i , 1 ), elemConn ( i , 2 ), i = 1 , size ( elemConn , 1 )) write ( nunit , '(a,\" \",g0)' ) 'CELL_TYPES' , size ( elemConn , 1 ) write ( nunit , '(g0)' ) ( 3 , i = 1 , size ( elemConn , 1 )) close ( nunit ) end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Xc ( this , X , num , dir ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: X integer , intent ( in ) :: num integer , intent ( in ) :: dir if ( allocated ( this % Xc )) then this % Xc ( num , dir ) = X call this % set ( knot = this % knot , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: Control points are not set.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure subroutine modify_Wc ( this , W , num ) class ( nurbs_curve ), intent ( inout ) :: this real ( rk ), intent ( in ) :: W integer , intent ( in ) :: num if ( allocated ( this % Wc )) then this % Wc ( num ) = W call this % set ( knot = this % knot , Xc = this % Xc , Wc = this % Wc ) else ! print*, 'Error: The Bezier curve is not rational.' end if end subroutine !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_multiplicity ( this ) result ( m ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: m (:) ! check if (. not . allocated ( this % knot )) then ! print*, 'Error: Knot vector is not set.' return else m = compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_continuity ( this ) result ( c ) class ( nurbs_curve ), intent ( in ) :: this integer , allocatable :: c (:) ! check if (. not . allocated ( this % knot )) then ! print*, 'Error: Knot vector is not set.' return else c = this % order - compute_multiplicity ( this % knot ) end if end function !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi !> license: BSD 3-Clause pure function get_nc ( this ) result ( nc ) class ( nurbs_curve ), intent ( in ) :: this integer :: nc nc = sum ( compute_multiplicity ( this % knot )) - this % order - 1 end function !=============================================================================== end module forcad_nurbs_curve","tags":"","loc":"sourcefile/forcad_nurbs_curve.f90.html"},{"title":"nurbs_surface.f90 – ForCAD","text":"This file depends on sourcefile~~nurbs_surface.f90~~EfferentGraph sourcefile~nurbs_surface.f90 nurbs_surface.f90 sourcefile~forcad.f90 forcad.f90 sourcefile~nurbs_surface.f90->sourcefile~forcad.f90 sourcefile~forcad_bezier_curve.f90 forcad_bezier_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_curve.f90 sourcefile~forcad_bezier_surface.f90 forcad_bezier_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_surface.f90 sourcefile~forcad_bezier_volume.f90 forcad_bezier_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_bezier_volume.f90 sourcefile~forcad_nurbs_curve.f90 forcad_nurbs_curve.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_curve.f90 sourcefile~forcad_nurbs_surface.f90 forcad_nurbs_surface.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_surface.f90 sourcefile~forcad_nurbs_volume.f90 forcad_nurbs_volume.f90 sourcefile~forcad.f90->sourcefile~forcad_nurbs_volume.f90 sourcefile~forcad_utils.f90 forcad_utils.f90 sourcefile~forcad.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_bezier_volume.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_curve.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_surface.f90->sourcefile~forcad_utils.f90 sourcefile~forcad_nurbs_volume.f90->sourcefile~forcad_utils.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code !> This program demonstrates the usage of a NURBS (Non-Uniform Rational B-Spline) surface object to create and finalize a NURBS surface. !> It sets up control points, weights, and knot vectors for all three dimensions, generates the surface, and exports the control points and the surface to VTK files. program example_nurbs_surface use forcad implicit none type ( nurbs_surface ) :: nurbs !! Declare a NURBS surface object real ( rk ), allocatable :: Xc (:,:), Wc (:) !! Arrays for control points and weights real ( rk ) :: knot1 ( 6 ), knot2 ( 6 ) !! Arrays for knot vectors in both dimensions !----------------------------------------------------------------------------- ! Setting up the NURBS surface !----------------------------------------------------------------------------- !> Define control points for the NURBS surface Xc = generate_Xc ( 3 , 3 , 1.0_rk ) !> Define weights for the control points allocate ( Wc ( size ( Xc , 1 ))) Wc = 1.0_rk !> Define knot vectors for both dimensions knot1 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] knot2 = [ 0.0_rk , 0.0_rk , 0.0_rk , 1.0_rk , 1.0_rk , 1.0_rk ] !> Set knot vectors, control points, and weights for the NURBS surface object call nurbs % set ( knot1 , knot2 , Xc , Wc ) !> Export the control points to a VTK file call nurbs % export_Xc ( 'vtk/nurbs_surface_Xc.vtk' ) !----------------------------------------------------------------------------- ! Creating the NURBS surface !----------------------------------------------------------------------------- !> Generate the NURBS surface with resolutions of 30 in both dimensions call nurbs % create ( 30 , 30 ) !> Export the generated surface to a VTK file call nurbs % export_Xg ( 'vtk/nurbs_surface_Xg.vtk' ) !----------------------------------------------------------------------------- ! Finalizing !----------------------------------------------------------------------------- !> Finalize the NURBS surface object call nurbs % finalize () contains !----------------------------------------------------------------------------- function generate_Xc ( num_rows , num_cols , peak_height ) result ( control_points ) integer , intent ( in ) :: num_rows , num_cols real ( rk ), intent ( in ) :: peak_height real ( rk ), dimension (:,:), allocatable :: control_points integer :: i , j real ( rk ) :: x_spacing , y_spacing , x_offset , y_offset x_spacing = 1.0_rk / real ( num_cols - 1 ) y_spacing = 1.0_rk / real ( num_rows - 1 ) x_offset = - 0.5_rk y_offset = - 0.5_rk allocate ( control_points ( num_rows * num_cols , 3 )) do i = 1 , num_rows do j = 1 , num_cols control_points (( i - 1 ) * num_cols + j , 1 ) = x_offset + real ( j - 1 ) * x_spacing control_points (( i - 1 ) * num_cols + j , 2 ) = y_offset + real ( i - 1 ) * y_spacing control_points (( i - 1 ) * num_cols + j , 3 ) = & peak_height * exp ( - (( control_points (( i - 1 ) * num_cols + j , 1 ) ** 2 ) & + ( control_points (( i - 1 ) * num_cols + j , 2 ) ** 2 ))) + 0.5_rk * peak_height * 0.2_rk end do end do end function !----------------------------------------------------------------------------- end program example_nurbs_surface","tags":"","loc":"sourcefile/nurbs_surface.f90.html"}]} \ No newline at end of file diff --git a/type/bezier_curve.html b/type/bezier_curve.html index c61257be2..e3080e55a 100644 --- a/type/bezier_curve.html +++ b/type/bezier_curve.html @@ -119,12 +119,12 @@

    Variables

    - Wc - Xc - Xg - Xt - nc - ng + Wc + Xc + Xg + Xt + nc + ng
    @@ -151,23 +151,23 @@

    Type-Bound Procedures

    @@ -200,7 +200,7 @@

    Components

    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + integer, private
    - + integer, private
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + integer, private
    - + integer, private
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + integer, private
    - + integer, private
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + integer, private
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + real(kind=rk), private,
    - + integer, private
    - + integer, private
    - + integer, private