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

Derived Types

Documentation generated by FORD - on 2024-03-30T01:06:29.265865

+ on 2024-03-30T10:49:40.074808


diff --git a/interface/elemconn_c0.html b/interface/elemconn_c0.html index cde7695ad..2e006a884 100644 --- a/interface/elemconn_c0.html +++ b/interface/elemconn_c0.html @@ -78,7 +78,7 @@

elemConn_C0
  • 5 statements + title="

    0.3% of total for procedures.

    Including implementation: 53 statements, 2.7% of total for procedures.">5 statements
  • @@ -327,9 +327,9 @@

    Called by

    proc~get_elem_xc - - -forcad_bezier_volume::bezier_volume%get_elem_Xc + + +forcad_nurbs_curve::nurbs_curve%get_elem_Xc @@ -342,9 +342,9 @@

    Called by

    proc~get_elem_xc~2 - + -forcad_nurbs_surface::nurbs_surface%get_elem_Xc +forcad_nurbs_volume::nurbs_volume%get_elem_Xc @@ -357,9 +357,9 @@

    Called by

    proc~get_elem_xc~3 - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_surface::bezier_surface%get_elem_Xc @@ -372,24 +372,24 @@

    Called by

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

    Called by

    proc~get_elem_xc~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc @@ -417,9 +417,9 @@

    Called by

    proc~get_elem_xg - - -forcad_bezier_volume::bezier_volume%get_elem_Xg + + +forcad_nurbs_curve::nurbs_curve%get_elem_Xg @@ -432,9 +432,9 @@

    Called by

    proc~get_elem_xg~2 - + -forcad_nurbs_surface::nurbs_surface%get_elem_Xg +forcad_nurbs_volume::nurbs_volume%get_elem_Xg @@ -447,24 +447,24 @@

    Called by

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

    Called by

    proc~get_elem_xg~5 - + -forcad_bezier_surface::bezier_surface%get_elem_Xg +forcad_bezier_volume::bezier_volume%get_elem_Xg @@ -492,9 +492,9 @@

    Called by

    proc~get_elem_xg~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg @@ -507,24 +507,24 @@

    Called by

    proc~export_xc - - -forcad_bezier_volume::bezier_volume%export_Xc + + +forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc - - + + proc~export_xc~2 - + -forcad_nurbs_surface::nurbs_surface%export_Xc +forcad_nurbs_volume::nurbs_volume%export_Xc @@ -537,39 +537,39 @@

    Called by

    proc~export_xc~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + proc~export_xc~4 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + proc~export_xc~5 - + -forcad_bezier_surface::bezier_surface%export_Xc +forcad_bezier_volume::bezier_volume%export_Xc @@ -582,39 +582,39 @@

    Called by

    proc~export_xc~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 - - + + proc~export_xg - - -forcad_bezier_volume::bezier_volume%export_Xg + + +forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg - - + + proc~export_xg~2 - + -forcad_nurbs_surface::nurbs_surface%export_Xg +forcad_nurbs_volume::nurbs_volume%export_Xg @@ -627,39 +627,39 @@

    Called by

    proc~export_xg~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + proc~export_xg~4 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + proc~export_xg~5 - + -forcad_bezier_surface::bezier_surface%export_Xg +forcad_bezier_volume::bezier_volume%export_Xg @@ -672,143 +672,143 @@

    Called by

    proc~export_xg~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 - - + + program~example_bezier_curve - -example_bezier_curve + +example_bezier_curve - - -program~example_bezier_curve->proc~export_xc~4 - - + + +program~example_bezier_curve->proc~export_xc~6 + + - - -program~example_bezier_curve->proc~export_xg~4 - - + + +program~example_bezier_curve->proc~export_xg~6 + + program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~export_xc~5 - - + + +program~example_bezier_surface->proc~export_xc~3 + + - - -program~example_bezier_surface->proc~export_xg~5 - - + + +program~example_bezier_surface->proc~export_xg~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~export_xc - - + + +program~example_bezier_volume->proc~export_xc~5 + + - - -program~example_bezier_volume->proc~export_xg - - + + +program~example_bezier_volume->proc~export_xg~5 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->proc~export_xc~6 - - + + +program~example_nurbs_curve->proc~export_xc + + - - -program~example_nurbs_curve->proc~export_xg~6 - - + + +program~example_nurbs_curve->proc~export_xg + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~export_xc~2 - - + + +program~example_nurbs_surface->proc~export_xc~4 + + - - -program~example_nurbs_surface->proc~export_xg~2 - - + + +program~example_nurbs_surface->proc~export_xg~4 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~export_xc~3 - - + + +program~example_nurbs_volume->proc~export_xc~2 + + - - -program~example_nurbs_volume->proc~export_xg~3 - - + + +program~example_nurbs_volume->proc~export_xg~2 + + @@ -940,7 +940,7 @@

    Arguments

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/interface/ndgrid.html b/interface/ndgrid.html index ee4c83626..f34fe74ea 100644 --- a/interface/ndgrid.html +++ b/interface/ndgrid.html @@ -308,57 +308,57 @@

    Called by

    forcad_utils::ndgrid
    - + -proc~create - - -forcad_bezier_volume::bezier_volume%create +proc~create~2 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~create~2 - - -forcad_nurbs_surface::nurbs_surface%create +proc~create~3 + + +forcad_bezier_surface::bezier_surface%create - + -proc~create~2->interface~ndgrid - - +proc~create~3->interface~ndgrid + + - + -proc~create~3 - +proc~create~4 + -forcad_nurbs_volume::nurbs_volume%create +forcad_nurbs_surface::nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~4->interface~ndgrid proc~create~5 - + -forcad_bezier_surface::bezier_surface%create +forcad_bezier_volume::bezier_volume%create @@ -372,61 +372,61 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~5 - - + + +program~example_bezier_surface->proc~create~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create - - + + +program~example_bezier_volume->proc~create~5 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~create~2 - - + + +program~example_nurbs_surface->proc~create~4 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create~3 - - + + +program~example_nurbs_volume->proc~create~2 + + @@ -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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/lists/procedures.html b/lists/procedures.html index 59aa3f77d..69c96737d 100644 --- a/lists/procedures.html +++ b/lists/procedures.html @@ -115,39 +115,39 @@

    Procedures

    create - forcad_bezier_volume + forcad_nurbs_curve Subroutine create - forcad_nurbs_surface + forcad_nurbs_volume Subroutine create - forcad_nurbs_volume + forcad_bezier_surface Subroutine create - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Generate geometry points of the Bezier curve.

    + create - forcad_bezier_surface + forcad_bezier_volume Subroutine create - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Generate geometry points of the Bezier curve.

    elemConn_C0 @@ -163,127 +163,127 @@

    Procedures

    export_Xc - forcad_bezier_volume + forcad_nurbs_curve Subroutine export_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine export_Xc - forcad_nurbs_volume + forcad_bezier_surface Subroutine export_Xc - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Export control points to a VTK file.

    + export_Xc - forcad_bezier_surface + forcad_bezier_volume Subroutine export_Xc - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Export control points to a VTK file.

    export_Xg - forcad_bezier_volume + forcad_nurbs_curve Subroutine export_Xg - forcad_nurbs_surface + forcad_nurbs_volume Subroutine export_Xg - forcad_nurbs_volume + forcad_bezier_surface Subroutine export_Xg - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Export geometry points to a VTK file.

    + export_Xg - forcad_bezier_surface + forcad_bezier_volume Subroutine export_Xg - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Export geometry points to a VTK file.

    finalize - forcad_bezier_volume + forcad_nurbs_curve Subroutine finalize - forcad_nurbs_surface + forcad_nurbs_volume Subroutine finalize - forcad_nurbs_volume + forcad_bezier_surface Subroutine finalize - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Finalize the Bezier curve object by deallocating memory.

    + finalize - forcad_bezier_surface + forcad_bezier_volume Subroutine finalize - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Finalize the Bezier curve object by deallocating memory.

    generate_Xc - example_bezier_surface + example_bezier_volume Function generate_Xc - example_nurbs_volume + example_nurbs_surface Function generate_Xc - example_bezier_volume + example_bezier_surface Function @@ -295,13 +295,13 @@

    Procedures

    generate_Xc - example_nurbs_surface + example_nurbs_volume Function get_continuity - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -313,85 +313,85 @@

    Procedures

    get_continuity - forcad_nurbs_curve + forcad_nurbs_surface Function get_elem_Xc - forcad_bezier_volume + forcad_nurbs_curve Subroutine get_elem_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine get_elem_Xc - forcad_nurbs_volume + forcad_bezier_surface Subroutine get_elem_Xc - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Generate connectivity for control points.

    + get_elem_Xc - forcad_bezier_surface + forcad_bezier_volume Subroutine get_elem_Xc - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Generate connectivity for control points.

    get_elem_Xg - forcad_bezier_volume + forcad_nurbs_curve Subroutine get_elem_Xg - forcad_nurbs_surface + forcad_nurbs_volume Subroutine get_elem_Xg - forcad_nurbs_volume + forcad_bezier_surface Subroutine get_elem_Xg - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Generate connectivity for geometry points.

    + get_elem_Xg - forcad_bezier_surface + forcad_bezier_volume Subroutine get_elem_Xg - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Generate connectivity for geometry points.

    get_knot - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -403,13 +403,13 @@

    Procedures

    get_knot - forcad_nurbs_curve + forcad_nurbs_surface Function get_multiplicity - forcad_nurbs_surface + forcad_nurbs_curve Function @@ -421,259 +421,259 @@

    Procedures

    get_multiplicity - forcad_nurbs_curve + forcad_nurbs_surface Function get_nc - forcad_bezier_volume + forcad_nurbs_curve Function get_nc - forcad_nurbs_surface + forcad_nurbs_volume Function get_nc - forcad_nurbs_volume + forcad_bezier_surface Function get_nc - forcad_bezier_curve + forcad_nurbs_surface Function get_nc - forcad_bezier_surface + forcad_bezier_volume Function get_nc - forcad_nurbs_curve + forcad_bezier_curve Function get_ng - forcad_bezier_volume + forcad_nurbs_curve Function get_ng - forcad_nurbs_surface + forcad_nurbs_volume Function get_ng - forcad_nurbs_volume + forcad_bezier_surface Function get_ng - forcad_bezier_curve + forcad_nurbs_surface Function get_ng - forcad_bezier_surface + forcad_bezier_volume Function get_ng - forcad_nurbs_curve + forcad_bezier_curve Function get_order - forcad_bezier_volume + forcad_nurbs_curve Function get_order - forcad_nurbs_surface + forcad_nurbs_volume Function get_order - forcad_nurbs_volume + forcad_bezier_surface Function get_order - forcad_bezier_curve + forcad_nurbs_surface Function get_order - forcad_bezier_surface + forcad_bezier_volume Function get_order - forcad_nurbs_curve + forcad_bezier_curve Function get_Wc - forcad_bezier_volume + forcad_nurbs_curve Function get_Wc - forcad_nurbs_surface + forcad_nurbs_volume Function get_Wc - forcad_nurbs_volume + forcad_bezier_surface Function get_Wc - forcad_bezier_curve + forcad_nurbs_surface Function get_Wc - forcad_bezier_surface + forcad_bezier_volume Function get_Wc - forcad_nurbs_curve + forcad_bezier_curve Function get_Xc - forcad_bezier_volume + forcad_nurbs_curve Function get_Xc - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xc - forcad_nurbs_volume + forcad_bezier_surface Function get_Xc - forcad_bezier_curve + forcad_nurbs_surface Function get_Xc - forcad_bezier_surface + forcad_bezier_volume Function get_Xc - forcad_nurbs_curve + forcad_bezier_curve Function get_Xg - forcad_bezier_volume + forcad_nurbs_curve Function get_Xg - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xg - forcad_nurbs_volume + forcad_bezier_surface Function get_Xg - forcad_bezier_curve + forcad_nurbs_surface Function get_Xg - forcad_bezier_surface + forcad_bezier_volume Function get_Xg - forcad_nurbs_curve + forcad_bezier_curve Function get_Xt - forcad_bezier_volume + forcad_nurbs_curve Function get_Xt - forcad_nurbs_surface + forcad_nurbs_volume Function get_Xt - forcad_nurbs_volume + forcad_bezier_surface Function get_Xt - forcad_bezier_curve + forcad_nurbs_surface Function get_Xt - forcad_bezier_surface + forcad_bezier_volume Function get_Xt - forcad_nurbs_curve + forcad_bezier_curve Function @@ -685,75 +685,75 @@

    Procedures

    modify_Wc - forcad_bezier_volume + forcad_nurbs_curve Subroutine modify_Wc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine modify_Wc - forcad_nurbs_volume + forcad_bezier_surface Subroutine - +

    Modify weight of a control point given its index.

    modify_Wc - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

    Modify weight of a control point given its index.

    + modify_Wc - forcad_bezier_surface + forcad_bezier_volume Subroutine -

    Modify weight of a control point given its index.

    + modify_Wc - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

    Modify weight of a control point given its index.

    modify_Xc - forcad_bezier_volume + forcad_nurbs_curve Subroutine modify_Xc - forcad_nurbs_surface + forcad_nurbs_volume Subroutine modify_Xc - forcad_nurbs_volume + forcad_bezier_surface Subroutine - +

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

    modify_Xc - forcad_bezier_curve + forcad_nurbs_surface Subroutine -

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

    + modify_Xc - forcad_bezier_surface + forcad_bezier_volume Subroutine -

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

    + modify_Xc - forcad_nurbs_curve + forcad_bezier_curve Subroutine - +

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

    ndgrid @@ -781,27 +781,27 @@

    Procedures

    set - forcad_bezier_volume + forcad_bezier_surface Subroutine

    Set control points and weights for the Bezier curve object.

    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.

    set1 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the Bezier curve object.

    set1 @@ -811,15 +811,15 @@

    Procedures

    set1 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine -

    Set control points and weights for the Bezier curve object.

    +

    Set control points and weights for the NURBS surface object.

    set2 - forcad_nurbs_surface + forcad_nurbs_curve Subroutine -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the Bezier curve object.

    set2 @@ -829,9 +829,9 @@

    Procedures

    set2 - forcad_nurbs_curve + forcad_nurbs_surface Subroutine -

    Set control points and weights for the Bezier curve object.

    +

    Set control points and weights for the NURBS surface object.

    @@ -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,77 +912,77 @@

    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~2 - - -forcad_nurbs_surface::nurbs_surface%set +none~set + + +forcad_nurbs_curve::nurbs_curve%set proc~set1 - - -forcad_nurbs_surface::nurbs_surface%set1 + + +forcad_nurbs_curve::nurbs_curve%set1 - + -none~set~2->proc~set1 - - +none~set->proc~set1 + + proc~set2 - - -forcad_nurbs_surface::nurbs_surface%set2 + + +forcad_nurbs_curve::nurbs_curve%set2 - + -none~set~2->proc~set2 - - +none~set->proc~set2 + + - + -none~set~3 - - -forcad_nurbs_volume::nurbs_volume%set +none~set~2 + + +forcad_nurbs_volume::nurbs_volume%set @@ -990,77 +990,77 @@

    Procedures

    proc~set1~2 - -forcad_nurbs_volume::nurbs_volume%set1 + +forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~3->proc~set1~2 - - +none~set~2->proc~set1~2 + + proc~set2~2 - -forcad_nurbs_volume::nurbs_volume%set2 + +forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~3->proc~set2~2 - - +none~set~2->proc~set2~2 + + - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set proc~set1~3 - - -forcad_nurbs_curve::nurbs_curve%set1 + + +forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~6->proc~set1~3 - - +none~set~4->proc~set1~3 + + proc~set2~3 - - -forcad_nurbs_curve::nurbs_curve%set2 + + +forcad_nurbs_surface::nurbs_surface%set2 - + -none~set~6->proc~set2~3 - - +none~set~4->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,569 +1086,569 @@

    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_bezier_volume::bezier_volume%create + + +forcad_nurbs_curve::nurbs_curve%create - + -proc~create->interface~ndgrid - - - - - -proc~create->proc~basis_bernstein - - - - - -proc~kron - - -forcad_utils::kron - - - - - -proc~create->proc~kron - - +proc~create->proc~basis_bspline + + proc~create~2 - - -forcad_nurbs_surface::nurbs_surface%create + + +forcad_nurbs_volume::nurbs_volume%create - + proc~create~2->interface~ndgrid - - + + - + proc~create~2->proc~basis_bspline - - + + + + + +proc~kron + + +forcad_utils::kron + + - + proc~create~2->proc~kron - - + + proc~create~3 - - -forcad_nurbs_volume::nurbs_volume%create + + +forcad_bezier_surface::bezier_surface%create - + proc~create~3->interface~ndgrid - - + + - - -proc~create~3->proc~basis_bspline - - + + +proc~create~3->proc~basis_bernstein + + - + proc~create~3->proc~kron - - + + proc~create~4 - - -forcad_bezier_curve::bezier_curve%create + + +forcad_nurbs_surface::nurbs_surface%create - + + +proc~create~4->interface~ndgrid + + + + + +proc~create~4->proc~basis_bspline + + + + -proc~create~4->proc~basis_bernstein - - +proc~create~4->proc~kron + + proc~create~5 - - -forcad_bezier_surface::bezier_surface%create + + +forcad_bezier_volume::bezier_volume%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_bezier_curve::bezier_curve%create - + -proc~create~6->proc~basis_bspline - - +proc~create~6->proc~basis_bernstein + + proc~elevate_degree - -forcad_bezier_curve::bezier_curve%elevate_degree + +forcad_bezier_curve::bezier_curve%elevate_degree - + -proc~elevate_degree->proc~create~4 - - +proc~elevate_degree->proc~create~6 + + - - -proc~set~2 - - -forcad_bezier_curve::bezier_curve%set + + +proc~set~3 + + +forcad_bezier_curve::bezier_curve%set - + -proc~elevate_degree->proc~set~2 - - +proc~elevate_degree->proc~set~3 + + proc~export_xc - - -forcad_bezier_volume::bezier_volume%export_Xc + + +forcad_nurbs_curve::nurbs_curve%export_Xc proc~get_elem_xc - - -forcad_bezier_volume::bezier_volume%get_elem_Xc + + +forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc->proc~get_elem_xc - - + + proc~export_xc~2 - - -forcad_nurbs_surface::nurbs_surface%export_Xc + + +forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~2 - - -forcad_nurbs_surface::nurbs_surface%get_elem_Xc + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 - - + + proc~export_xc~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~3 - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + proc~export_xc~4 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_surface::nurbs_surface%export_Xc proc~get_elem_xc~4 - - -forcad_bezier_curve::bezier_curve%get_elem_Xc + + +forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + proc~export_xc~5 - - -forcad_bezier_surface::bezier_surface%export_Xc + + +forcad_bezier_volume::bezier_volume%export_Xc proc~get_elem_xc~5 - - -forcad_bezier_surface::bezier_surface%get_elem_Xc + + +forcad_bezier_volume::bezier_volume%get_elem_Xc proc~export_xc~5->proc~get_elem_xc~5 - - + + proc~export_xc~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 - - + + proc~export_xg - - -forcad_bezier_volume::bezier_volume%export_Xg + + +forcad_nurbs_curve::nurbs_curve%export_Xg proc~get_elem_xg - - -forcad_bezier_volume::bezier_volume%get_elem_Xg + + +forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg->proc~get_elem_xg - - + + proc~export_xg~2 - - -forcad_nurbs_surface::nurbs_surface%export_Xg + + +forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~2 - - -forcad_nurbs_surface::nurbs_surface%get_elem_Xg + + +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~2->proc~get_elem_xg~2 - - + + proc~export_xg~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~3 - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + + +forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + proc~export_xg~4 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_surface::nurbs_surface%export_Xg proc~get_elem_xg~4 - - -forcad_bezier_curve::bezier_curve%get_elem_Xg + + +forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + proc~export_xg~5 - - -forcad_bezier_surface::bezier_surface%export_Xg + + +forcad_bezier_volume::bezier_volume%export_Xg proc~get_elem_xg~5 - - -forcad_bezier_surface::bezier_surface%get_elem_Xg + + +forcad_bezier_volume::bezier_volume%get_elem_Xg proc~export_xg~5->proc~get_elem_xg~5 - - + + proc~export_xg~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 - - + + proc~finalize - - -forcad_bezier_volume::bezier_volume%finalize + + +forcad_nurbs_curve::nurbs_curve%finalize proc~finalize~2 - - -forcad_nurbs_surface::nurbs_surface%finalize + + +forcad_nurbs_volume::nurbs_volume%finalize proc~finalize~3 - - -forcad_nurbs_volume::nurbs_volume%finalize + + +forcad_bezier_surface::bezier_surface%finalize proc~finalize~4 - - -forcad_bezier_curve::bezier_curve%finalize + + +forcad_nurbs_surface::nurbs_surface%finalize proc~finalize~5 - - -forcad_bezier_surface::bezier_surface%finalize + + +forcad_bezier_volume::bezier_volume%finalize proc~finalize~6 - - -forcad_nurbs_curve::nurbs_curve%finalize + + +forcad_bezier_curve::bezier_curve%finalize proc~generate_xc - - -example_bezier_surface::generate_Xc + + +example_bezier_volume::generate_Xc proc~generate_xc~2 - - -example_nurbs_volume::generate_Xc + + +example_nurbs_surface::generate_Xc proc~generate_xc~3 - - -example_bezier_volume::generate_Xc + + +example_bezier_surface::generate_Xc @@ -1656,143 +1656,143 @@

    Procedures

    proc~generate_xc~4 - -example_bezier_curve::generate_Xc + +example_bezier_curve::generate_Xc proc~generate_xc~5 - - -example_nurbs_surface::generate_Xc + + +example_nurbs_volume::generate_Xc proc~get_continuity - - -forcad_nurbs_surface::nurbs_surface%get_continuity + + +forcad_nurbs_curve::nurbs_curve%get_continuity proc~get_continuity->proc~compute_multiplicity - - + + proc~get_continuity~2 - -forcad_nurbs_volume::nurbs_volume%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_surface::nurbs_surface%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_surface::nurbs_surface%get_knot + + +forcad_nurbs_curve::nurbs_curve%get_knot @@ -1800,1000 +1800,1000 @@

    Procedures

    proc~get_knot~2 - -forcad_nurbs_volume::nurbs_volume%get_knot + +forcad_nurbs_volume::nurbs_volume%get_knot proc~get_knot~3 - - -forcad_nurbs_curve::nurbs_curve%get_knot + + +forcad_nurbs_surface::nurbs_surface%get_knot proc~get_multiplicity - - -forcad_nurbs_surface::nurbs_surface%get_multiplicity + + +forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~get_multiplicity->proc~compute_multiplicity - - + + proc~get_multiplicity~2 - -forcad_nurbs_volume::nurbs_volume%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_surface::nurbs_surface%get_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity - - + + proc~get_nc - - -forcad_bezier_volume::bezier_volume%get_nc + + +forcad_nurbs_curve::nurbs_curve%get_nc + + +proc~get_nc->proc~compute_multiplicity + + + proc~get_nc~2 - - -forcad_nurbs_surface::nurbs_surface%get_nc + + +forcad_nurbs_volume::nurbs_volume%get_nc - + proc~get_nc~2->proc~compute_multiplicity - - + + proc~get_nc~3 - - -forcad_nurbs_volume::nurbs_volume%get_nc + + +forcad_bezier_surface::bezier_surface%get_nc - - -proc~get_nc~3->proc~compute_multiplicity - - - proc~get_nc~4 - - -forcad_bezier_curve::bezier_curve%get_nc + + +forcad_nurbs_surface::nurbs_surface%get_nc + + +proc~get_nc~4->proc~compute_multiplicity + + + proc~get_nc~5 - - -forcad_bezier_surface::bezier_surface%get_nc + + +forcad_bezier_volume::bezier_volume%get_nc proc~get_nc~6 - - -forcad_nurbs_curve::nurbs_curve%get_nc + + +forcad_bezier_curve::bezier_curve%get_nc - - -proc~get_nc~6->proc~compute_multiplicity - - - proc~get_ng - - -forcad_bezier_volume::bezier_volume%get_ng + + +forcad_nurbs_curve::nurbs_curve%get_ng proc~get_ng~2 - - -forcad_nurbs_surface::nurbs_surface%get_ng + + +forcad_nurbs_volume::nurbs_volume%get_ng proc~get_ng~3 - - -forcad_nurbs_volume::nurbs_volume%get_ng + + +forcad_bezier_surface::bezier_surface%get_ng proc~get_ng~4 - - -forcad_bezier_curve::bezier_curve%get_ng + + +forcad_nurbs_surface::nurbs_surface%get_ng proc~get_ng~5 - - -forcad_bezier_surface::bezier_surface%get_ng + + +forcad_bezier_volume::bezier_volume%get_ng proc~get_ng~6 - - -forcad_nurbs_curve::nurbs_curve%get_ng + + +forcad_bezier_curve::bezier_curve%get_ng proc~get_order - - -forcad_bezier_volume::bezier_volume%get_order + + +forcad_nurbs_curve::nurbs_curve%get_order + + +proc~get_order->proc~get_multiplicity + + + proc~get_order~2 - - -forcad_nurbs_surface::nurbs_surface%get_order + + +forcad_nurbs_volume::nurbs_volume%get_order - - -proc~get_order~2->proc~get_multiplicity - - + + +proc~get_order~2->proc~get_multiplicity~2 + + proc~get_order~3 - - -forcad_nurbs_volume::nurbs_volume%get_order + + +forcad_bezier_surface::bezier_surface%get_order - - -proc~get_order~3->proc~get_multiplicity~2 - - - proc~get_order~4 - - -forcad_bezier_curve::bezier_curve%get_order + + +forcad_nurbs_surface::nurbs_surface%get_order + + +proc~get_order~4->proc~get_multiplicity~3 + + + proc~get_order~5 - - -forcad_bezier_surface::bezier_surface%get_order + + +forcad_bezier_volume::bezier_volume%get_order proc~get_order~6 - - -forcad_nurbs_curve::nurbs_curve%get_order + + +forcad_bezier_curve::bezier_curve%get_order - - -proc~get_order~6->proc~get_multiplicity~3 - - - proc~get_wc - - -forcad_bezier_volume::bezier_volume%get_Wc + + +forcad_nurbs_curve::nurbs_curve%get_Wc proc~get_wc~2 - - -forcad_nurbs_surface::nurbs_surface%get_Wc + + +forcad_nurbs_volume::nurbs_volume%get_Wc proc~get_wc~3 - - -forcad_nurbs_volume::nurbs_volume%get_Wc + + +forcad_bezier_surface::bezier_surface%get_Wc proc~get_wc~4 - - -forcad_bezier_curve::bezier_curve%get_Wc + + +forcad_nurbs_surface::nurbs_surface%get_Wc proc~get_wc~5 - - -forcad_bezier_surface::bezier_surface%get_Wc + + +forcad_bezier_volume::bezier_volume%get_Wc proc~get_wc~6 - - -forcad_nurbs_curve::nurbs_curve%get_Wc + + +forcad_bezier_curve::bezier_curve%get_Wc proc~get_xc - - -forcad_bezier_volume::bezier_volume%get_Xc + + +forcad_nurbs_curve::nurbs_curve%get_Xc proc~get_xc~2 - - -forcad_nurbs_surface::nurbs_surface%get_Xc + + +forcad_nurbs_volume::nurbs_volume%get_Xc proc~get_xc~3 - - -forcad_nurbs_volume::nurbs_volume%get_Xc + + +forcad_bezier_surface::bezier_surface%get_Xc proc~get_xc~4 - - -forcad_bezier_curve::bezier_curve%get_Xc + + +forcad_nurbs_surface::nurbs_surface%get_Xc proc~get_xc~5 - - -forcad_bezier_surface::bezier_surface%get_Xc + + +forcad_bezier_volume::bezier_volume%get_Xc proc~get_xc~6 - - -forcad_nurbs_curve::nurbs_curve%get_Xc + + +forcad_bezier_curve::bezier_curve%get_Xc proc~get_xg - - -forcad_bezier_volume::bezier_volume%get_Xg + + +forcad_nurbs_curve::nurbs_curve%get_Xg proc~get_xg~2 - - -forcad_nurbs_surface::nurbs_surface%get_Xg + + +forcad_nurbs_volume::nurbs_volume%get_Xg proc~get_xg~3 - - -forcad_nurbs_volume::nurbs_volume%get_Xg + + +forcad_bezier_surface::bezier_surface%get_Xg proc~get_xg~4 - - -forcad_bezier_curve::bezier_curve%get_Xg + + +forcad_nurbs_surface::nurbs_surface%get_Xg proc~get_xg~5 - - -forcad_bezier_surface::bezier_surface%get_Xg + + +forcad_bezier_volume::bezier_volume%get_Xg proc~get_xg~6 - - -forcad_nurbs_curve::nurbs_curve%get_Xg + + +forcad_bezier_curve::bezier_curve%get_Xg proc~get_xt - - -forcad_bezier_volume::get_Xt + + +forcad_nurbs_curve::nurbs_curve%get_Xt proc~get_xt~2 - - -forcad_nurbs_surface::nurbs_surface%get_Xt + + +forcad_nurbs_volume::nurbs_volume%get_Xt proc~get_xt~3 - - -forcad_nurbs_volume::nurbs_volume%get_Xt + + +forcad_bezier_surface::bezier_surface%get_Xt proc~get_xt~4 - - -forcad_bezier_curve::bezier_curve%get_Xt + + +forcad_nurbs_surface::nurbs_surface%get_Xt proc~get_xt~5 - - -forcad_bezier_surface::bezier_surface%get_Xt + + +forcad_bezier_volume::get_Xt proc~get_xt~6 - - -forcad_nurbs_curve::nurbs_curve%get_Xt + + +forcad_bezier_curve::bezier_curve%get_Xt proc~modify_wc - - -forcad_bezier_volume::bezier_volume%modify_Wc - - - - - -proc~set - - -forcad_bezier_volume::bezier_volume%set + + +forcad_nurbs_curve::nurbs_curve%modify_Wc - + -proc~modify_wc->proc~set - - +proc~modify_wc->none~set + + proc~modify_wc~2 - - -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 - - -forcad_nurbs_volume::nurbs_volume%modify_Wc + + +forcad_bezier_surface::bezier_surface%modify_Wc - + + +proc~set + + +forcad_bezier_surface::bezier_surface%set + + + + -proc~modify_wc~3->none~set~3 - - +proc~modify_wc~3->proc~set + + proc~modify_wc~4 - - -forcad_bezier_curve::bezier_curve%modify_Wc + + +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc~4->proc~set~2 - - +proc~modify_wc~4->none~set~4 + + proc~modify_wc~5 - - -forcad_bezier_surface::bezier_surface%modify_Wc + + +forcad_bezier_volume::bezier_volume%modify_Wc - - -proc~set~3 - - -forcad_bezier_surface::bezier_surface%set + + +proc~set~2 + + +forcad_bezier_volume::bezier_volume%set - + -proc~modify_wc~5->proc~set~3 - - +proc~modify_wc~5->proc~set~2 + + proc~modify_wc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Wc + + +forcad_bezier_curve::bezier_curve%modify_Wc - + -proc~modify_wc~6->none~set~6 - - +proc~modify_wc~6->proc~set~3 + + proc~modify_xc - - -forcad_bezier_volume::bezier_volume%modify_Xc + + +forcad_nurbs_curve::nurbs_curve%modify_Xc - + -proc~modify_xc->proc~set - - +proc~modify_xc->none~set + + proc~modify_xc~2 - - -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 - - -forcad_nurbs_volume::nurbs_volume%modify_Xc + + +forcad_bezier_surface::bezier_surface%modify_Xc - + -proc~modify_xc~3->none~set~3 - - +proc~modify_xc~3->proc~set + + proc~modify_xc~4 - - -forcad_bezier_curve::bezier_curve%modify_Xc + + +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc~4->proc~set~2 - - +proc~modify_xc~4->none~set~4 + + proc~modify_xc~5 - - -forcad_bezier_surface::bezier_surface%modify_Xc + + +forcad_bezier_volume::bezier_volume%modify_Xc - + -proc~modify_xc~5->proc~set~3 - - +proc~modify_xc~5->proc~set~2 + + proc~modify_xc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Xc + + +forcad_bezier_curve::bezier_curve%modify_Xc - + -proc~modify_xc~6->none~set~6 - - +proc~modify_xc~6->proc~set~3 + + - + -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_nc~4 + + - + -proc~set1~3->proc~get_order~6 - - +proc~set1~3->proc~get_order~4 + + proc~set2->proc~compute_knot_vector - - + + - + -proc~set2->proc~get_nc~2 - - +proc~set2~2->proc~compute_knot_vector + + - + -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 + + - + -proc~set2~3->proc~compute_knot_vector - - +proc~set2~3->proc~get_nc~4 + + program~example_bezier_curve - -example_bezier_curve + +example_bezier_curve - + -program~example_bezier_curve->proc~create~4 - - +program~example_bezier_curve->proc~create~6 + + - + -program~example_bezier_curve->proc~export_xc~4 - - +program~example_bezier_curve->proc~export_xc~6 + + - + -program~example_bezier_curve->proc~export_xg~4 - - +program~example_bezier_curve->proc~export_xg~6 + + - + -program~example_bezier_curve->proc~finalize~4 - - +program~example_bezier_curve->proc~finalize~6 + + program~example_bezier_curve->proc~generate_xc~4 - - + + - + -program~example_bezier_curve->proc~set~2 - - +program~example_bezier_curve->proc~set~3 + + program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - + -program~example_bezier_surface->proc~create~5 - - +program~example_bezier_surface->proc~create~3 + + - + -program~example_bezier_surface->proc~export_xc~5 - - +program~example_bezier_surface->proc~export_xc~3 + + - + -program~example_bezier_surface->proc~export_xg~5 - - +program~example_bezier_surface->proc~export_xg~3 + + - + -program~example_bezier_surface->proc~finalize~5 - - +program~example_bezier_surface->proc~finalize~3 + + - + -program~example_bezier_surface->proc~generate_xc - - +program~example_bezier_surface->proc~generate_xc~3 + + - + -program~example_bezier_surface->proc~set~3 - - +program~example_bezier_surface->proc~set + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - + -program~example_bezier_volume->proc~create - - +program~example_bezier_volume->proc~create~5 + + - + -program~example_bezier_volume->proc~export_xc - - +program~example_bezier_volume->proc~export_xc~5 + + - + -program~example_bezier_volume->proc~export_xg - - +program~example_bezier_volume->proc~export_xg~5 + + - + -program~example_bezier_volume->proc~finalize - - +program~example_bezier_volume->proc~finalize~5 + + - + -program~example_bezier_volume->proc~generate_xc~3 - - +program~example_bezier_volume->proc~generate_xc + + - + -program~example_bezier_volume->proc~set - - +program~example_bezier_volume->proc~set~2 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - + -program~example_nurbs_curve->none~set~6 - - +program~example_nurbs_curve->none~set + + - + -program~example_nurbs_curve->proc~create~6 - - +program~example_nurbs_curve->proc~create + + - + -program~example_nurbs_curve->proc~export_xc~6 - - +program~example_nurbs_curve->proc~export_xc + + - + -program~example_nurbs_curve->proc~export_xg~6 - - +program~example_nurbs_curve->proc~export_xg + + - + -program~example_nurbs_curve->proc~finalize~6 - - +program~example_nurbs_curve->proc~finalize + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_surface->none~set~4 + + - + -program~example_nurbs_surface->proc~create~2 - - +program~example_nurbs_surface->proc~create~4 + + - + -program~example_nurbs_surface->proc~export_xc~2 - - +program~example_nurbs_surface->proc~export_xc~4 + + - + -program~example_nurbs_surface->proc~export_xg~2 - - +program~example_nurbs_surface->proc~export_xg~4 + + - + -program~example_nurbs_surface->proc~finalize~2 - - +program~example_nurbs_surface->proc~finalize~4 + + - + -program~example_nurbs_surface->proc~generate_xc~5 - - +program~example_nurbs_surface->proc~generate_xc~2 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - + -program~example_nurbs_volume->none~set~3 - - +program~example_nurbs_volume->none~set~2 + + - + -program~example_nurbs_volume->proc~create~3 - - +program~example_nurbs_volume->proc~create~2 + + - + -program~example_nurbs_volume->proc~export_xc~3 - - +program~example_nurbs_volume->proc~export_xc~2 + + - + -program~example_nurbs_volume->proc~export_xg~3 - - +program~example_nurbs_volume->proc~export_xg~2 + + - + -program~example_nurbs_volume->proc~finalize~3 - - +program~example_nurbs_volume->proc~finalize~2 + + - + -program~example_nurbs_volume->proc~generate_xc~2 - - +program~example_nurbs_volume->proc~generate_xc~5 + + @@ -2894,7 +2894,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Programs

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Uses

    -

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

    private pure subroutine create(this, res, Xt)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

    @@ -182,74 +182,14 @@

    Arguments

    - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -257,7 +197,7 @@

    Arguments

    - + @@ -277,91 +217,31 @@

    Calls

    - - + + proc~~create~~CallsGraph - + proc~create - -forcad_bezier_volume::bezier_volume%create + +forcad_nurbs_curve::nurbs_curve%create - + -interface~ndgrid - - -forcad_utils::ndgrid +proc~basis_bspline + + +forcad_utils::basis_bspline - + -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 - - +proc~create->proc~basis_bspline + + @@ -457,31 +337,31 @@

    Called by

    - + proc~~create~~CalledByGraph - + proc~create - -forcad_bezier_volume::bezier_volume%create + +forcad_nurbs_curve::nurbs_curve%create - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~create - - +program~example_nurbs_curve->proc~create + + @@ -594,7 +474,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/create~2.html b/proc/create~2.html index b7ef7d82c..bfb7a31fa 100644 --- a/proc/create~2.html +++ b/proc/create~2.html @@ -79,20 +79,20 @@

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

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

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

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(inout) @@ -174,7 +174,7 @@

    Arguments

    - + integer, intent(in), ::res1res
    - - 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), ::Xt3(:)Xt(:)
    @@ -159,8 +159,8 @@

    Arguments

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

    Arguments

    @@ -204,7 +204,22 @@

    Arguments

    + + + + + + + + @@ -219,7 +234,7 @@

    Arguments

    @@ -230,6 +245,21 @@

    Arguments

    + + + + + + + + @@ -256,7 +286,7 @@

    Calls

    proc~create~2 -forcad_nurbs_surface::nurbs_surface%create +forcad_nurbs_volume::nurbs_volume%create @@ -436,20 +466,20 @@

    Called by

    proc~create~2 -forcad_nurbs_surface::nurbs_surface%create +forcad_nurbs_volume::nurbs_volume%create - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~create~2 +program~example_nurbs_volume->proc~create~2 @@ -564,7 +594,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    create
  • 63 statements + title=" 2.7% 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

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

    - + integer, intent(in),
    - + integer, intent(in),
    - + + integer, + intent(in),optional + + ::res3 + +
    + real(kind=rk), intent(in),
    - + real(kind=rk), intent(in), Xt2(:) +
    + + real(kind=rk), + intent(in),optional + + ::Xt3(:) +
    @@ -159,8 +165,8 @@

    Arguments

    @@ -189,7 +195,7 @@

    Arguments

    @@ -204,22 +210,7 @@

    Arguments

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

    Arguments

    @@ -245,21 +236,6 @@

    Arguments

    - - - - - - - - @@ -277,91 +253,91 @@

    Calls

    - + proc~~create~3~~CallsGraph - + proc~create~3 - -forcad_nurbs_volume::nurbs_volume%create + +forcad_bezier_surface::bezier_surface%create interface~ndgrid - -forcad_utils::ndgrid + +forcad_utils::ndgrid proc~create~3->interface~ndgrid - - + + - + -proc~basis_bspline - - -forcad_utils::basis_bspline +proc~basis_bernstein + + +forcad_utils::basis_bernstein - + -proc~create~3->proc~basis_bspline - - +proc~create~3->proc~basis_bernstein + + proc~kron - -forcad_utils::kron + +forcad_utils::kron proc~create~3->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 +433,31 @@

    Called by

    - + proc~~create~3~~CalledByGraph - + proc~create~3 - -forcad_nurbs_volume::nurbs_volume%create + +forcad_bezier_surface::bezier_surface%create - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~create~3 - - +program~example_bezier_surface->proc~create~3 + + @@ -578,6 +554,81 @@ +
    +

    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
    +            error stop 'Control points are not set.'
    +        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 +645,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

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

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

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

    -

    Generate geometry points of the Bezier curve.

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_volume), + + class(bezier_surface), intent(inout) @@ -174,7 +180,7 @@

    Arguments

    - + integer, intent(in),
    - + integer, intent(in),
    - - integer, - intent(in),optional - - ::res3 - -
    - + real(kind=rk), intent(in),
    - + real(kind=rk), intent(in), Xt2(:) -
    - - real(kind=rk), - intent(in),optional - - ::Xt3(:) -
    @@ -160,8 +159,8 @@

    Arguments

    @@ -183,14 +182,29 @@

    Arguments

    - + + + + + + + + + @@ -198,7 +212,22 @@

    Arguments

    - + + + + + + + + + @@ -218,31 +247,91 @@

    Calls

    - - + + proc~~create~4~~CallsGraph - + proc~create~4 - -forcad_bezier_curve::bezier_curve%create + +forcad_nurbs_surface::nurbs_surface%create - + -proc~basis_bernstein - - -forcad_utils::basis_bernstein +interface~ndgrid + + +forcad_utils::ndgrid - + -proc~create~4->proc~basis_bernstein - - +proc~create~4->interface~ndgrid + + + + + +proc~basis_bspline + + +forcad_utils::basis_bspline + + + + + +proc~create~4->proc~basis_bspline + + + + + +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 + + @@ -338,46 +427,31 @@

    Called by

    - - + + proc~~create~4~~CalledByGraph - + proc~create~4 - -forcad_bezier_curve::bezier_curve%create + +forcad_nurbs_surface::nurbs_surface%create - + -proc~elevate_degree - - -forcad_bezier_curve::bezier_curve%elevate_degree +program~example_nurbs_surface + + +example_nurbs_surface - + -proc~elevate_degree->proc~create~4 - - - - - -program~example_bezier_curve - - -example_bezier_curve - - - - - -program~example_bezier_curve->proc~create~4 - - +program~example_nurbs_surface->proc~create~4 + + @@ -490,7 +564,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

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

    Contents

    -
    -

    Source Code

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

    Contents

    -

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

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

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

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

    Called by

    proc~create~5 -forcad_bezier_surface::bezier_surface%create +forcad_bezier_volume::bezier_volume%create - + -program~example_bezier_surface - +program~example_bezier_volume + -example_bezier_surface +example_bezier_volume - + -program~example_bezier_surface->proc~create~5 +program~example_bezier_volume->proc~create~5 @@ -554,82 +578,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 +594,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/create~6.html b/proc/create~6.html index d8cbfdf4e..35ed4c016 100644 --- a/proc/create~6.html +++ b/proc/create~6.html @@ -79,20 +79,20 @@

    create
  • 37 statements + title=" 1.9% of total for procedures.">37 statements
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private pure subroutine create(this, res, Xt)

    +

    Generate geometry points of the Bezier curve.

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

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

    Calls

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc.html b/proc/export_xc.html index 7ef1cd6c4..eb838f4ee 100644 --- a/proc/export_xc.html +++ b/proc/export_xc.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Calls

    - + proc~~create~6~~CallsGraph - + proc~create~6 - -forcad_nurbs_curve::nurbs_curve%create + +forcad_bezier_curve::bezier_curve%create - + -proc~basis_bspline - - -forcad_utils::basis_bspline +proc~basis_bernstein + + +forcad_utils::basis_bernstein - + -proc~create~6->proc~basis_bspline - - +proc~create~6->proc~basis_bernstein + + @@ -337,31 +338,46 @@

    Called by

    - - + + proc~~create~6~~CalledByGraph - + proc~create~6 - -forcad_nurbs_curve::nurbs_curve%create + +forcad_bezier_curve::bezier_curve%create - + -program~example_nurbs_curve - - -example_nurbs_curve +proc~elevate_degree + + +forcad_bezier_curve::bezier_curve%elevate_degree - + -program~example_nurbs_curve->proc~create~6 - - +proc~elevate_degree->proc~create~6 + + + + + +program~example_bezier_curve + + +example_bezier_curve + + + + + +program~example_bezier_curve->proc~create~6 + + @@ -474,7 +490,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    Arguments

    - + class(bezier_curve), intent(inout)
    @@ -159,8 +159,8 @@

    Arguments

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

    Calls

    - - + + proc~~export_xc~~CallsGraph - + proc~export_xc - -forcad_bezier_volume::bezier_volume%export_Xc + +forcad_nurbs_curve::nurbs_curve%export_Xc proc~get_elem_xc - - -forcad_bezier_volume::bezier_volume%get_elem_Xc + + +forcad_nurbs_curve::nurbs_curve%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_bezier_volume::bezier_volume%export_Xc + +forcad_nurbs_curve::nurbs_curve%export_Xc - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~export_xc - - +program~example_nurbs_curve->proc~export_xc + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc~2.html b/proc/export_xc~2.html index 30cbffb9e..4496ec6fd 100644 --- a/proc/export_xc~2.html +++ b/proc/export_xc~2.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -211,14 +211,14 @@

    Calls

    proc~export_xc~2 -forcad_nurbs_surface::nurbs_surface%export_Xc +forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~2 - + -forcad_nurbs_surface::nurbs_surface%get_elem_Xc +forcad_nurbs_volume::nurbs_volume%get_elem_Xc @@ -395,20 +395,20 @@

    Called by

    proc~export_xc~2 -forcad_nurbs_surface::nurbs_surface%export_Xc +forcad_nurbs_volume::nurbs_volume%export_Xc - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xc~2 +program~example_nurbs_volume->proc~export_xc~2 @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc~3.html b/proc/export_xc~3.html index b2b2fcbb0..adcf1d4e5 100644 --- a/proc/export_xc~3.html +++ b/proc/export_xc~3.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xc~3~~CallsGraph - + proc~export_xc~3 - -forcad_nurbs_volume::nurbs_volume%export_Xc + +forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~3 - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + + +forcad_bezier_surface::bezier_surface%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 - - + + @@ -386,31 +386,31 @@

    Called by

    - + proc~~export_xc~3~~CalledByGraph - + proc~export_xc~3 - -forcad_nurbs_volume::nurbs_volume%export_Xc + +forcad_bezier_surface::bezier_surface%export_Xc - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~export_xc~3 - - +program~example_bezier_surface->proc~export_xc~3 + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc~4.html b/proc/export_xc~4.html index d43b85c5e..26f8f7404 100644 --- a/proc/export_xc~4.html +++ b/proc/export_xc~4.html @@ -79,20 +79,20 @@

    export_Xc
  • 24 statements + title=" 1.2% of total for procedures.">24 statements
  • - 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_surface

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xc~4~~CallsGraph - + proc~export_xc~4 - -forcad_bezier_curve::bezier_curve%export_Xc + +forcad_nurbs_surface::nurbs_surface%export_Xc proc~get_elem_xc~4 - - -forcad_bezier_curve::bezier_curve%get_elem_Xc + + +forcad_nurbs_surface::nurbs_surface%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 - - + + @@ -387,31 +386,31 @@

    Called by

    - + proc~~export_xc~4~~CalledByGraph - + proc~export_xc~4 - -forcad_bezier_curve::bezier_curve%export_Xc + +forcad_nurbs_surface::nurbs_surface%export_Xc - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_curve->proc~export_xc~4 - - +program~example_nurbs_surface->proc~export_xc~4 + + @@ -524,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc~5.html b/proc/export_xc~5.html index edca3842f..7a490495c 100644 --- a/proc/export_xc~5.html +++ b/proc/export_xc~5.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xc(this, filename)

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Calls

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xc~6.html b/proc/export_xc~6.html index 98b6db046..2bc2567e2 100644 --- a/proc/export_xc~6.html +++ b/proc/export_xc~6.html @@ -79,20 +79,20 @@

    export_Xc
  • 24 statements + title=" 1.2% of total for procedures.">24 statements
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private impure subroutine export_Xc(this, filename)

    +

    Export control points to a VTK file.

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xc~6~~CallsGraph - + proc~export_xc~6 - -forcad_nurbs_curve::nurbs_curve%export_Xc + +forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xc + + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 - - + + interface~elemconn_c0 - -forcad_utils::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 + +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~6~~CalledByGraph - + proc~export_xc~6 - -forcad_nurbs_curve::nurbs_curve%export_Xc + +forcad_bezier_curve::bezier_curve%export_Xc - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_curve->proc~export_xc~6 - - +program~example_bezier_curve->proc~export_xc~6 + + @@ -523,7 +524,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg.html b/proc/export_xg.html index b482ec4aa..7507aea81 100644 --- a/proc/export_xg.html +++ b/proc/export_xg.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xg~~CallsGraph - + proc~export_xg - -forcad_bezier_volume::bezier_volume%export_Xg + +forcad_nurbs_curve::nurbs_curve%export_Xg proc~get_elem_xg - - -forcad_bezier_volume::bezier_volume%get_elem_Xg + + +forcad_nurbs_curve::nurbs_curve%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_bezier_volume::bezier_volume%export_Xg + +forcad_nurbs_curve::nurbs_curve%export_Xg - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~export_xg - - +program~example_nurbs_curve->proc~export_xg + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg~2.html b/proc/export_xg~2.html index b26e933c2..22bf9f432 100644 --- a/proc/export_xg~2.html +++ b/proc/export_xg~2.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -211,14 +211,14 @@

    Calls

    proc~export_xg~2 -forcad_nurbs_surface::nurbs_surface%export_Xg +forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~2 - + -forcad_nurbs_surface::nurbs_surface%get_elem_Xg +forcad_nurbs_volume::nurbs_volume%get_elem_Xg @@ -395,20 +395,20 @@

    Called by

    proc~export_xg~2 -forcad_nurbs_surface::nurbs_surface%export_Xg +forcad_nurbs_volume::nurbs_volume%export_Xg - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xg~2 +program~example_nurbs_volume->proc~export_xg~2 @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg~3.html b/proc/export_xg~3.html index f3580f342..4d393c565 100644 --- a/proc/export_xg~3.html +++ b/proc/export_xg~3.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

    - - class(nurbs_volume), + + class(bezier_surface), 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~3~~CallsGraph - + proc~export_xg~3 - -forcad_nurbs_volume::nurbs_volume%export_Xg + +forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~3 - - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + + +forcad_bezier_surface::bezier_surface%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 - - + + @@ -386,31 +386,31 @@

    Called by

    - + proc~~export_xg~3~~CalledByGraph - + proc~export_xg~3 - -forcad_nurbs_volume::nurbs_volume%export_Xg + +forcad_bezier_surface::bezier_surface%export_Xg - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~export_xg~3 - - +program~example_bezier_surface->proc~export_xg~3 + + @@ -523,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg~4.html b/proc/export_xg~4.html index 61773d599..9d755f589 100644 --- a/proc/export_xg~4.html +++ b/proc/export_xg~4.html @@ -79,20 +79,20 @@

    export_Xg
  • 24 statements + title=" 1.2% of total for procedures.">24 statements
  • - 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_surface

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xg~4~~CallsGraph - + proc~export_xg~4 - -forcad_bezier_curve::bezier_curve%export_Xg + +forcad_nurbs_surface::nurbs_surface%export_Xg proc~get_elem_xg~4 - - -forcad_bezier_curve::bezier_curve%get_elem_Xg + + +forcad_nurbs_surface::nurbs_surface%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 - - + + @@ -387,31 +386,31 @@

    Called by

    - + proc~~export_xg~4~~CalledByGraph - + proc~export_xg~4 - -forcad_bezier_curve::bezier_curve%export_Xg + +forcad_nurbs_surface::nurbs_surface%export_Xg - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_curve->proc~export_xg~4 - - +program~example_nurbs_surface->proc~export_xg~4 + + @@ -524,7 +523,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg~5.html b/proc/export_xg~5.html index 9d69452c1..70bc9e5db 100644 --- a/proc/export_xg~5.html +++ b/proc/export_xg~5.html @@ -79,20 +79,20 @@

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

    private impure subroutine export_Xg(this, filename)

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Calls

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/export_xg~6.html b/proc/export_xg~6.html index 14e270da5..e6e704172 100644 --- a/proc/export_xg~6.html +++ b/proc/export_xg~6.html @@ -79,20 +79,20 @@

    export_Xg
  • 24 statements + title=" 1.2% of total for procedures.">24 statements
  • - Source File + Source File
  • @@ -142,9 +142,10 @@

    private impure subroutine export_Xg(this, filename)

    +

    Export geometry points to a VTK file.

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~export_xg~6~~CallsGraph - + proc~export_xg~6 - -forcad_nurbs_curve::nurbs_curve%export_Xg + +forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~6 - - -forcad_nurbs_curve::nurbs_curve%get_elem_Xg + + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~6->proc~get_elem_xg~6 - - + + interface~elemconn_c0 - -forcad_utils::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 + +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~6~~CalledByGraph - + proc~export_xg~6 - -forcad_nurbs_curve::nurbs_curve%export_Xg + +forcad_bezier_curve::bezier_curve%export_Xg - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_curve->proc~export_xg~6 - - +program~example_bezier_curve->proc~export_xg~6 + + @@ -523,7 +524,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/finalize.html b/proc/finalize.html index 8caded616..7351bc186 100644 --- a/proc/finalize.html +++ b/proc/finalize.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

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Called by

    - + proc~~finalize~~CalledByGraph - + proc~finalize - -forcad_bezier_volume::bezier_volume%finalize + +forcad_nurbs_curve::nurbs_curve%finalize - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~finalize - - +program~example_nurbs_curve->proc~finalize + + @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/finalize~2.html b/proc/finalize~2.html index dea3bb790..145315c40 100644 --- a/proc/finalize~2.html +++ b/proc/finalize~2.html @@ -79,20 +79,20 @@

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

    private pure subroutine finalize(this)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -196,20 +196,20 @@

    Called by

    proc~finalize~2 -forcad_nurbs_surface::nurbs_surface%finalize +forcad_nurbs_volume::nurbs_volume%finalize - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~finalize~2 +program~example_nurbs_volume->proc~finalize~2 @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    finalize
  • 12 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

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Called by

    - + proc~~finalize~3~~CalledByGraph - + proc~finalize~3 - -forcad_nurbs_volume::nurbs_volume%finalize + +forcad_bezier_surface::bezier_surface%finalize - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~finalize~3 - - +program~example_bezier_surface->proc~finalize~3 + + @@ -324,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    finalize
  • 7 statements + title=" 0.5% of total for procedures.">10 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_surface

    Arguments

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

    Arguments

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

    Called by

    - + proc~~finalize~4~~CalledByGraph - + proc~finalize~4 - -forcad_bezier_curve::bezier_curve%finalize + +forcad_nurbs_surface::nurbs_surface%finalize - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_curve->proc~finalize~4 - - +program~example_nurbs_surface->proc~finalize~4 + + @@ -325,7 +324,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    finalize
  • 8 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

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/finalize~6.html b/proc/finalize~6.html index f532cbc4f..9cd35367c 100644 --- a/proc/finalize~6.html +++ b/proc/finalize~6.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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Arguments

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

    Called by

    proc~generate_xc -example_bezier_surface::generate_Xc +example_bezier_volume::generate_Xc - + -program~example_bezier_surface - +program~example_bezier_volume + -example_bezier_surface +example_bezier_volume - + -program~example_bezier_surface->proc~generate_xc +program~example_bezier_volume->proc~generate_xc @@ -358,7 +328,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/generate_xc~2.html b/proc/generate_xc~2.html index bd5624d26..251c1e7ed 100644 --- a/proc/generate_xc~2.html +++ b/proc/generate_xc~2.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

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/generate_xc~3.html b/proc/generate_xc~3.html index 302da3bd1..5ffeaece6 100644 --- a/proc/generate_xc~3.html +++ b/proc/generate_xc~3.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

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

    Called by

    proc~generate_xc~3 -example_bezier_volume::generate_Xc +example_bezier_surface::generate_Xc - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~generate_xc~3 +program~example_bezier_surface->proc~generate_xc~3 @@ -328,7 +358,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/generate_xc~4.html b/proc/generate_xc~4.html index e96cf11fb..6fb6bb9cd 100644 --- a/proc/generate_xc~4.html +++ b/proc/generate_xc~4.html @@ -78,7 +78,7 @@

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    generate_Xc
  • 19 statements + title=" 0.8% 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

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

    Arguments

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

    Called by

    proc~generate_xc~5 -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~5 +program~example_nurbs_volume->proc~generate_xc~5 @@ -358,7 +328,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_continuity
  • 19 statements + title=" 0.5% of total for procedures.">9 statements
  • - Source File + Source File
  • @@ -138,13 +138,13 @@

    Contents

    -

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

    private pure function get_continuity(this) result(c)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_curve

    Arguments

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

    Called by

    - + proc~~finalize~6~~CalledByGraph - + proc~finalize~6 - -forcad_nurbs_curve::nurbs_curve%finalize + +forcad_bezier_curve::bezier_curve%finalize - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_curve->proc~finalize~6 - - +program~example_bezier_curve->proc~finalize~6 + + @@ -324,7 +325,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/generate_xc.html b/proc/generate_xc.html index c8d46df5d..ab6aec8c2 100644 --- a/proc/generate_xc.html +++ b/proc/generate_xc.html @@ -78,20 +78,20 @@

    generate_Xc
  • 19 statements + title=" 0.8% 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_rows + +
    + + integer, + intent(in) + + ::num_cols + +
    + real(kind=rk), intent(in) ::Lpeak_height
    - + + integer, + intent(in) + + ::num_rows + +
    + + integer, + intent(in) + + ::num_cols + +
    + real(kind=rk), intent(in) ::Lpeak_height
    - - integer, - intent(in) - - ::num_rows - -
    - - integer, - intent(in) - - ::num_cols - -
    - + real(kind=rk), intent(in) ::peak_heightL
    @@ -159,8 +159,8 @@

    Arguments

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

    Arguments

    Return Value - + integer, allocatable, (:)

    @@ -209,31 +194,31 @@

    Calls

    - + proc~~get_continuity~~CallsGraph - + proc~get_continuity - -forcad_nurbs_surface::nurbs_surface%get_continuity + +forcad_nurbs_curve::nurbs_curve%get_continuity proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity proc~get_continuity->proc~compute_multiplicity - - + + @@ -346,7 +331,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_continuity
  • 25 statements + title=" 1.3% of total for procedures.">26 statements
  • @@ -159,7 +159,7 @@

    Arguments

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

    Arguments

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

    Arguments

    Return Value - + integer, allocatable, (:)

    @@ -346,7 +346,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_continuity~3.html b/proc/get_continuity~3.html index 0dc2bb355..a15128dfe 100644 --- a/proc/get_continuity~3.html +++ b/proc/get_continuity~3.html @@ -79,20 +79,20 @@

    get_continuity
  • 9 statements + title=" 1.0% of total for procedures.">20 statements
  • - Source File + Source File
  • @@ -138,13 +138,13 @@

    Contents

    -

    private pure function get_continuity(this) result(c) +

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

    Type Bound

    -

    nurbs_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -170,21 +170,6 @@

    Arguments

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

    Arguments

    + + + + + + + + @@ -194,31 +209,31 @@

    Calls

    - + proc~~get_continuity~3~~CallsGraph - + proc~get_continuity~3 - -forcad_nurbs_curve::nurbs_curve%get_continuity + +forcad_nurbs_surface::nurbs_surface%get_continuity proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity proc~get_continuity~3->proc~compute_multiplicity - - + + @@ -331,7 +346,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc.html b/proc/get_elem_xc.html index 00b7fdd00..619cc29fa 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

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

    - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -170,6 +170,21 @@

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~get_elem_xc~~CallsGraph - + proc~get_elem_xc - -forcad_bezier_volume::bezier_volume%get_elem_Xc + +forcad_nurbs_curve::nurbs_curve%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,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xc~~CalledByGraph - + proc~get_elem_xc - -forcad_bezier_volume::bezier_volume%get_elem_Xc + +forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc - - -forcad_bezier_volume::bezier_volume%export_Xc + + +forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc - - + + - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~export_xc - - +program~example_nurbs_curve->proc~export_xc + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc~2.html b/proc/get_elem_xc~2.html index 21733ae4d..1e1757f40 100644 --- a/proc/get_elem_xc~2.html +++ b/proc/get_elem_xc~2.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_surface

    +

    nurbs_volume

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(in) @@ -174,7 +174,7 @@

    Arguments

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

    Arguments

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

    Arguments

    @@ -226,7 +226,7 @@

    Calls

    proc~get_elem_xc~2 -forcad_nurbs_surface::nurbs_surface%get_elem_Xc +forcad_nurbs_volume::nurbs_volume%get_elem_Xc @@ -395,14 +395,14 @@

    Called by

    proc~get_elem_xc~2 -forcad_nurbs_surface::nurbs_surface%get_elem_Xc +forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~export_xc~2 - + -forcad_nurbs_surface::nurbs_surface%export_Xc +forcad_nurbs_volume::nurbs_volume%export_Xc @@ -412,18 +412,18 @@

    Called by

    - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xc~2 +program~example_nurbs_volume->proc~export_xc~2 @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc~3.html b/proc/get_elem_xc~3.html index 3b35036f7..ef267da44 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
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~get_elem_xc~3~~CallsGraph - + proc~get_elem_xc~3 - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + +forcad_bezier_surface::bezier_surface%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,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~3~~CalledByGraph - + proc~get_elem_xc~3 - -forcad_nurbs_volume::nurbs_volume%get_elem_Xc + +forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xc + + +forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 - - + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~export_xc~3 - - +program~example_bezier_surface->proc~export_xc~3 + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc~4.html b/proc/get_elem_xc~4.html index 3094fde44..d2906e652 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,10 +142,9 @@

    private pure subroutine get_elem_Xc(this, elemConn, p)

    -

    Generate connectivity for control points.

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~get_elem_xc~4~~CallsGraph - + proc~get_elem_xc~4 - -forcad_bezier_curve::bezier_curve%get_elem_Xc + +forcad_nurbs_surface::nurbs_surface%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 - - + + @@ -387,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xc~4~~CalledByGraph - + proc~get_elem_xc~4 - -forcad_bezier_curve::bezier_curve%get_elem_Xc + +forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~4 - - -forcad_bezier_curve::bezier_curve%export_Xc + + +forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 - - + + - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_curve->proc~export_xc~4 - - +program~example_nurbs_surface->proc~export_xc~4 + + @@ -543,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc~5.html b/proc/get_elem_xc~5.html index b67e38823..f05149913 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

    ::pp(:)
    @@ -159,8 +159,8 @@

    Arguments

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

    Calls

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

    Called by

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xc~6.html b/proc/get_elem_xc~6.html index 2f47d0e87..ded25f26a 100644 --- a/proc/get_elem_xc~6.html +++ b/proc/get_elem_xc~6.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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + class(bezier_curve), intent(in) @@ -217,76 +218,76 @@

    Calls

    - - + + proc~~get_elem_xc~6~~CallsGraph - + proc~get_elem_xc~6 - -forcad_nurbs_curve::nurbs_curve%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~6->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 +388,45 @@

    Called by

    --> - + viewBox="0.00 0.00 641.00 27.57" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~get_elem_xc~6~~CalledByGraph - + proc~get_elem_xc~6 - -forcad_nurbs_curve::nurbs_curve%get_elem_Xc + +forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xc + + +forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 - - + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_curve->proc~export_xc~6 - - +program~example_bezier_curve->proc~export_xc~6 + + @@ -542,7 +543,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg.html b/proc/get_elem_xg.html index 6c89a7ed0..d92ddc5f8 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

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~get_elem_xg~~CallsGraph - + proc~get_elem_xg - -forcad_bezier_volume::bezier_volume%get_elem_Xg + +forcad_nurbs_curve::nurbs_curve%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,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xg~~CalledByGraph - + proc~get_elem_xg - -forcad_bezier_volume::bezier_volume%get_elem_Xg + +forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg - - -forcad_bezier_volume::bezier_volume%export_Xg + + +forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg - - + + - + -program~example_bezier_volume - - -example_bezier_volume +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_bezier_volume->proc~export_xg - - +program~example_nurbs_curve->proc~export_xg + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg~2.html b/proc/get_elem_xg~2.html index 67d6c2515..0db32d9ec 100644 --- a/proc/get_elem_xg~2.html +++ b/proc/get_elem_xg~2.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_surface

    +

    nurbs_volume

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(in) @@ -174,7 +174,7 @@

    Arguments

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

    Arguments

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

    Arguments

    @@ -226,7 +226,7 @@

    Calls

    proc~get_elem_xg~2 -forcad_nurbs_surface::nurbs_surface%get_elem_Xg +forcad_nurbs_volume::nurbs_volume%get_elem_Xg @@ -395,14 +395,14 @@

    Called by

    proc~get_elem_xg~2 -forcad_nurbs_surface::nurbs_surface%get_elem_Xg +forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~export_xg~2 - + -forcad_nurbs_surface::nurbs_surface%export_Xg +forcad_nurbs_volume::nurbs_volume%export_Xg @@ -412,18 +412,18 @@

    Called by

    - + -program~example_nurbs_surface - +program~example_nurbs_volume + -example_nurbs_surface +example_nurbs_volume - + -program~example_nurbs_surface->proc~export_xg~2 +program~example_nurbs_volume->proc~export_xg~2 @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg~3.html b/proc/get_elem_xg~3.html index 2c15d694d..e2e28c524 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
  • @@ -144,7 +144,7 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    @@ -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~3~~CallsGraph - + proc~get_elem_xg~3 - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + +forcad_bezier_surface::bezier_surface%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,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~3~~CalledByGraph - + proc~get_elem_xg~3 - -forcad_nurbs_volume::nurbs_volume%get_elem_Xg + +forcad_bezier_surface::bezier_surface%get_elem_Xg proc~export_xg~3 - - -forcad_nurbs_volume::nurbs_volume%export_Xg + + +forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 - - + + - + -program~example_nurbs_volume - - -example_nurbs_volume +program~example_bezier_surface + + +example_bezier_surface - + -program~example_nurbs_volume->proc~export_xg~3 - - +program~example_bezier_surface->proc~export_xg~3 + + @@ -542,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg~4.html b/proc/get_elem_xg~4.html index 5c5643c3c..1a987c57c 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,10 +142,9 @@

    private pure subroutine get_elem_Xg(this, elemConn, p)

    -

    Generate connectivity for geometry points.

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~get_elem_xg~4~~CallsGraph - + proc~get_elem_xg~4 - -forcad_bezier_curve::bezier_curve%get_elem_Xg + +forcad_nurbs_surface::nurbs_surface%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 - - + + @@ -387,46 +386,46 @@

    Called by

    - - + + proc~~get_elem_xg~4~~CalledByGraph - + proc~get_elem_xg~4 - -forcad_bezier_curve::bezier_curve%get_elem_Xg + +forcad_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~4 - - -forcad_bezier_curve::bezier_curve%export_Xg + + +forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 - - + + - + -program~example_bezier_curve - - -example_bezier_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_bezier_curve->proc~export_xg~4 - - +program~example_nurbs_surface->proc~export_xg~4 + + @@ -543,7 +542,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg~5.html b/proc/get_elem_xg~5.html index 590285ab9..90c9bd0db 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

    ::pp(:)
    @@ -159,8 +159,8 @@

    Arguments

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

    Calls

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

    Called by

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

    Called by

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_elem_xg~6.html b/proc/get_elem_xg~6.html index 3c6931e7e..26701425f 100644 --- a/proc/get_elem_xg~6.html +++ b/proc/get_elem_xg~6.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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + class(bezier_curve), intent(in) @@ -217,76 +218,76 @@

    Calls

    - - + + proc~~get_elem_xg~6~~CallsGraph - + proc~get_elem_xg~6 - -forcad_nurbs_curve::nurbs_curve%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~6->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 +388,45 @@

    Called by

    --> - + viewBox="0.00 0.00 641.00 27.53" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + proc~~get_elem_xg~6~~CalledByGraph - + proc~get_elem_xg~6 - -forcad_nurbs_curve::nurbs_curve%get_elem_Xg + +forcad_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~6 - - -forcad_nurbs_curve::nurbs_curve%export_Xg + + +forcad_bezier_curve::bezier_curve%export_Xg proc~export_xg~6->proc~get_elem_xg~6 - - + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_bezier_curve + + +example_bezier_curve - + -program~example_nurbs_curve->proc~export_xg~6 - - +program~example_bezier_curve->proc~export_xg~6 + + @@ -542,7 +543,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_knot
  • 17 statements + title=" 0.5% of total for procedures.">9 statements
  • - Source File + Source File
  • -

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

    private pure function get_knot(this) result(knot)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_knot
  • 22 statements + title=" 1.3% of total for procedures.">26 statements
  • @@ -159,7 +159,7 @@

    Arguments

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

    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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_knot~3.html b/proc/get_knot~3.html index 029982774..28325703d 100644 --- a/proc/get_knot~3.html +++ b/proc/get_knot~3.html @@ -79,20 +79,20 @@

    get_knot
  • 8 statements + title=" 1.0% of total for procedures.">20 statements
  • - Source File + Source File
  • -

    private pure function get_knot(this) result(knot) +

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

    Type Bound

    -

    nurbs_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -170,21 +170,6 @@

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_multiplicity
  • 19 statements + title=" 0.5% of total for procedures.">9 statements
  • - Source File + Source File
  • @@ -138,13 +138,13 @@

    Contents

    -

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

    private pure function get_multiplicity(this) result(m)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_curve

    Arguments

    - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -170,6 +170,21 @@

    Arguments

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

    Arguments

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

    Arguments

    Return Value - + integer, allocatable, (:)

    @@ -209,31 +194,31 @@

    Calls

    - + proc~~get_multiplicity~~CallsGraph - + proc~get_multiplicity - -forcad_nurbs_surface::nurbs_surface%get_multiplicity + +forcad_nurbs_curve::nurbs_curve%get_multiplicity proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity proc~get_multiplicity->proc~compute_multiplicity - - + + @@ -329,106 +314,106 @@

    Called by

    - - + + proc~~get_multiplicity~~CalledByGraph - + proc~get_multiplicity - -forcad_nurbs_surface::nurbs_surface%get_multiplicity + +forcad_nurbs_curve::nurbs_curve%get_multiplicity - + -proc~get_order~2 - - -forcad_nurbs_surface::nurbs_surface%get_order +proc~get_order + + +forcad_nurbs_curve::nurbs_curve%get_order - + -proc~get_order~2->proc~get_multiplicity - - +proc~get_order->proc~get_multiplicity + + proc~set1 - - -forcad_nurbs_surface::nurbs_surface%set1 + + +forcad_nurbs_curve::nurbs_curve%set1 - + -proc~set1->proc~get_order~2 - - +proc~set1->proc~get_order + + - + -none~set~2 - - -forcad_nurbs_surface::nurbs_surface%set +none~set + + +forcad_nurbs_curve::nurbs_curve%set - + -none~set~2->proc~set1 - - +none~set->proc~set1 + + - + -proc~modify_wc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Wc +proc~modify_wc + + +forcad_nurbs_curve::nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc->none~set + + - + -proc~modify_xc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Xc +proc~modify_xc + + +forcad_nurbs_curve::nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc->none~set + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_curve->none~set + + @@ -545,7 +530,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_multiplicity~2.html b/proc/get_multiplicity~2.html index 2ade1c255..ee8d5c5e7 100644 --- a/proc/get_multiplicity~2.html +++ b/proc/get_multiplicity~2.html @@ -79,7 +79,7 @@

    get_multiplicity
  • 25 statements + title=" 1.3% of total for procedures.">26 statements
  • @@ -159,7 +159,7 @@

    Arguments

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

    Arguments

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

    Arguments

    Return Value - + integer, allocatable, (:)

    @@ -340,18 +340,18 @@

    Called by

    forcad_nurbs_volume::nurbs_volume%get_multiplicity - + -proc~get_order~3 - +proc~get_order~2 + forcad_nurbs_volume::nurbs_volume%get_order - + -proc~get_order~3->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity~2 @@ -364,54 +364,54 @@

    Called by

    - + -proc~set1~2->proc~get_order~3 +proc~set1~2->proc~get_order~2 - + -none~set~3 - +none~set~2 + forcad_nurbs_volume::nurbs_volume%set - + -none~set~3->proc~set1~2 +none~set~2->proc~set1~2 - + -proc~modify_wc~3 - +proc~modify_wc~2 + forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 - + -proc~modify_xc~3 - +proc~modify_xc~2 + forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -424,9 +424,9 @@

    Called by

    - + -program~example_nurbs_volume->none~set~3 +program~example_nurbs_volume->none~set~2 @@ -545,7 +545,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_multiplicity~3.html b/proc/get_multiplicity~3.html index 9e45ebdbe..9c28e5e57 100644 --- a/proc/get_multiplicity~3.html +++ b/proc/get_multiplicity~3.html @@ -79,20 +79,20 @@

    get_multiplicity
  • 9 statements + title=" 1.0% of total for procedures.">20 statements
  • - Source File + Source File
  • @@ -138,13 +138,13 @@

    Contents

    -

    private pure function get_multiplicity(this) result(m) +

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

    Type Bound

    -

    nurbs_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_curve), intent(in) @@ -170,21 +170,6 @@

    Arguments

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

    Arguments

    + + + + + + + + @@ -194,31 +209,31 @@

    Calls

    - + proc~~get_multiplicity~3~~CallsGraph - + proc~get_multiplicity~3 - -forcad_nurbs_curve::nurbs_curve%get_multiplicity + +forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity - - + + @@ -314,106 +329,106 @@

    Called by

    - - + + proc~~get_multiplicity~3~~CalledByGraph - + proc~get_multiplicity~3 - -forcad_nurbs_curve::nurbs_curve%get_multiplicity + +forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~6 - - -forcad_nurbs_curve::nurbs_curve%get_order +proc~get_order~4 + + +forcad_nurbs_surface::nurbs_surface%get_order - + -proc~get_order~6->proc~get_multiplicity~3 - - +proc~get_order~4->proc~get_multiplicity~3 + + proc~set1~3 - - -forcad_nurbs_curve::nurbs_curve%set1 + + +forcad_nurbs_surface::nurbs_surface%set1 - + -proc~set1~3->proc~get_order~6 - - +proc~set1~3->proc~get_order~4 + + - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set - + -none~set~6->proc~set1~3 - - +none~set~4->proc~set1~3 + + - + -proc~modify_wc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Wc +proc~modify_wc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc~6->none~set~6 - - +proc~modify_wc~4->none~set~4 + + - + -proc~modify_xc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Xc +proc~modify_xc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc~6->none~set~6 - - +proc~modify_xc~4->none~set~4 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->none~set~6 - - +program~example_nurbs_surface->none~set~4 + + @@ -530,7 +545,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_nc.html b/proc/get_nc.html index abc201989..66e996c03 100644 --- a/proc/get_nc.html +++ b/proc/get_nc.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

    +

    nurbs_curve

    Arguments

    - - class(nurbs_curve), + + class(nurbs_surface), intent(in) @@ -170,6 +170,21 @@

    Arguments

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

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(in) @@ -177,12 +177,133 @@

    Arguments

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


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_nc~~CallsGraph + + + +proc~get_nc + +forcad_nurbs_curve::nurbs_curve%get_nc + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc->proc~compute_multiplicity + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +331,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

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

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

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

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

    Arguments

    Return Value - + integer

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

    Calls

    proc~get_nc~2 -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc @@ -338,65 +338,65 @@

    Called by

    proc~get_nc~2 -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1 - +proc~set1~2 + -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -proc~set1->proc~get_nc~2 +proc~set1~2->proc~get_nc~2 - + -proc~set2 - +proc~set2~2 + -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 - + -proc~set2->proc~get_nc~2 +proc~set2~2->proc~get_nc~2 none~set~2 - + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set1 +none~set~2->proc~set1~2 - + -none~set~2->proc~set2 +none~set~2->proc~set2~2 proc~modify_wc~2 - + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc @@ -409,9 +409,9 @@

    Called by

    proc~modify_xc~2 - + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc @@ -421,18 +421,18 @@

    Called by

    - + -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~2 @@ -551,7 +551,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_nc~3.html b/proc/get_nc~3.html index 72f833621..1713995fd 100644 --- a/proc/get_nc~3.html +++ b/proc/get_nc~3.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_surface

    Arguments

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

    Arguments

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

    Arguments

    - - - - - - - - @@ -193,337 +178,11 @@

    Arguments

    Return Value - integer + integer, (2)


    -
    -
    -

    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 -
    - -
    -
    -
    @@ -551,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_nc~4.html b/proc/get_nc~4.html index 5dbcb681c..8e9973d6a 100644 --- a/proc/get_nc~4.html +++ b/proc/get_nc~4.html @@ -79,20 +79,20 @@

    get_nc
  • 5 statements + title=" 1.0% of total for procedures.">20 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_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

    Return Value - + integer


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_nc~4~~CallsGraph + + + +proc~get_nc~4 + +forcad_nurbs_surface::nurbs_surface%get_nc + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~4->proc~compute_multiplicity + + + + + +
    + Help +
    + +
    +
    +
    +
    +

    Called by

    +
    +
    +
    + + + + + +proc~~get_nc~4~~CalledByGraph + + + +proc~get_nc~4 + +forcad_nurbs_surface::nurbs_surface%get_nc + + + +proc~set1~3 + + +forcad_nurbs_surface::nurbs_surface%set1 + + + + + +proc~set1~3->proc~get_nc~4 + + + + + +proc~set2~3 + + +forcad_nurbs_surface::nurbs_surface%set2 + + + + + +proc~set2~3->proc~get_nc~4 + + + + + +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set + + + + + +none~set~4->proc~set1~3 + + + + + +none~set~4->proc~set2~3 + + + + + +proc~modify_wc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Wc + + + + + +proc~modify_wc~4->none~set~4 + + + + + +proc~modify_xc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Xc + + + + + +proc~modify_xc~4->none~set~4 + + + + + +program~example_nurbs_surface + + +example_nurbs_surface + + + + + +program~example_nurbs_surface->none~set~4 + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +551,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_nc~5.html b/proc/get_nc~5.html index a667baa97..cbc5bfed9 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_nc~6.html b/proc/get_nc~6.html index eb9e9142f..56ee39603 100644 --- a/proc/get_nc~6.html +++ b/proc/get_nc~6.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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + class(bezier_curve), intent(in) @@ -177,133 +177,12 @@

    Arguments

    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 -
    - -
    -
    -
    @@ -331,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng.html b/proc/get_ng.html index 40db91eba..a2f686b5e 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

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Arguments

    Return Value - integer, (3) + integer

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng~2.html b/proc/get_ng~2.html index a58ffc3c3..aa9d1d430 100644 --- a/proc/get_ng~2.html +++ b/proc/get_ng~2.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_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng~3.html b/proc/get_ng~3.html index e3f56ebfd..39a80bcde 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

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

    - - class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng~4.html b/proc/get_ng~4.html index a1c6c84fc..f42907851 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_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

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

    Arguments

    Return Value - integer + integer, (2)

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng~5.html b/proc/get_ng~5.html index f8b3941bf..31fe3b610 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_ng~6.html b/proc/get_ng~6.html index 599b2aa69..c8b1e6fcc 100644 --- a/proc/get_ng~6.html +++ b/proc/get_ng~6.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_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

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

    private pure function get_order(this) result(order)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Arguments

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


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_order~~CallsGraph + + + +proc~get_order + +forcad_nurbs_curve::nurbs_curve%get_order + + + +proc~get_multiplicity + + +forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%get_order + + + +proc~set1 + + +forcad_nurbs_curve::nurbs_curve%set1 + + + + + +proc~set1->proc~get_order + + + + + +none~set + + +forcad_nurbs_curve::nurbs_curve%set + + + + + +none~set->proc~set1 + + + + + +proc~modify_wc + + +forcad_nurbs_curve::nurbs_curve%modify_Wc + + + + + +proc~modify_wc->none~set + + + + + +proc~modify_xc + + +forcad_nurbs_curve::nurbs_curve%modify_Xc + + + + + +proc~modify_xc->none~set + + + + + +program~example_nurbs_curve + + +example_nurbs_curve + + + + + +program~example_nurbs_curve->none~set + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +534,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_order~2.html b/proc/get_order~2.html index 02f8e3ab1..083c85f02 100644 --- a/proc/get_order~2.html +++ b/proc/get_order~2.html @@ -79,20 +79,20 @@

    get_order
  • 9 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

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(in) @@ -177,8 +177,8 @@

    Arguments

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

    @@ -203,20 +203,20 @@

    Calls

    proc~get_order~2 -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~get_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 +proc~get_order~2->proc~get_multiplicity~2 @@ -229,9 +229,9 @@

    Calls

    - + -proc~get_multiplicity->proc~compute_multiplicity +proc~get_multiplicity~2->proc~compute_multiplicity @@ -342,44 +342,44 @@

    Called by

    proc~get_order~2 -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1 - +proc~set1~2 + -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -proc~set1->proc~get_order~2 +proc~set1~2->proc~get_order~2 none~set~2 - + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set - + -none~set~2->proc~set1 +none~set~2->proc~set1~2 proc~modify_wc~2 - + -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc @@ -392,9 +392,9 @@

    Called by

    proc~modify_xc~2 - + -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc @@ -404,18 +404,18 @@

    Called by

    - + -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~2 @@ -534,7 +534,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_order~3.html b/proc/get_order~3.html index aed6fc1f2..22d364605 100644 --- a/proc/get_order~3.html +++ b/proc/get_order~3.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_surface

    Arguments

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

    Arguments

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

    Arguments

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


    -
    -
    -

    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 -
    - -
    -
    -
    @@ -534,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_order~4.html b/proc/get_order~4.html index 20915195e..4a029c52b 100644 --- a/proc/get_order~4.html +++ b/proc/get_order~4.html @@ -79,20 +79,20 @@

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

    private pure function get_order(this) result(order)

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

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

    Arguments

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


    +
    +
    +

    Calls

    +
    +
    +
    + + + + + +proc~~get_order~4~~CallsGraph + + + +proc~get_order~4 + +forcad_nurbs_surface::nurbs_surface%get_order + + + +proc~get_multiplicity~3 + + +forcad_nurbs_surface::nurbs_surface%get_multiplicity + + + + + +proc~get_order~4->proc~get_multiplicity~3 + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_multiplicity~3->proc~compute_multiplicity + + + + + +
    + Help +
    + +
    +
    +
    +
    +

    Called by

    +
    +
    +
    + + + + + +proc~~get_order~4~~CalledByGraph + + + +proc~get_order~4 + +forcad_nurbs_surface::nurbs_surface%get_order + + + +proc~set1~3 + + +forcad_nurbs_surface::nurbs_surface%set1 + + + + + +proc~set1~3->proc~get_order~4 + + + + + +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set + + + + + +none~set~4->proc~set1~3 + + + + + +proc~modify_wc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Wc + + + + + +proc~modify_wc~4->none~set~4 + + + + + +proc~modify_xc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Xc + + + + + +proc~modify_xc~4->none~set~4 + + + + + +program~example_nurbs_surface + + +example_nurbs_surface + + + + + +program~example_nurbs_surface->none~set~4 + + + + + +
    + Help +
    + +
    +
    +
    @@ -210,7 +534,7 @@

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_order~5.html b/proc/get_order~5.html index 780ecffec..cf55d3eee 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_order~6.html b/proc/get_order~6.html index 9897c8f23..2f5e836d5 100644 --- a/proc/get_order~6.html +++ b/proc/get_order~6.html @@ -79,20 +79,20 @@

    get_order
  • 7 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_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + class(bezier_curve), intent(in) @@ -183,330 +183,6 @@

    Return Value


    -
    -
    -

    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 -
    - -
    -
    -
    -
    -

    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 -
    - -
    -
    -
    @@ -534,7 +210,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc.html b/proc/get_wc.html index 0362e40e5..484e28915 100644 --- a/proc/get_wc.html +++ b/proc/get_wc.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

    - - class(bezier_volume), + + class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc~2.html b/proc/get_wc~2.html index c95f2a525..96ae3ff70 100644 --- a/proc/get_wc~2.html +++ b/proc/get_wc~2.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc~3.html b/proc/get_wc~3.html index 84ebd43f0..9300f5c94 100644 --- a/proc/get_wc~3.html +++ b/proc/get_wc~3.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

    - - class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc~4.html b/proc/get_wc~4.html index 7a3d66fef..387f4d727 100644 --- a/proc/get_wc~4.html +++ b/proc/get_wc~4.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

    - - class(bezier_curve), + + class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc~5.html b/proc/get_wc~5.html index 733b682af..d084f6648 100644 --- a/proc/get_wc~5.html +++ b/proc/get_wc~5.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

    - - class(bezier_surface), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_wc~6.html b/proc/get_wc~6.html index 217a1b041..fbdb28703 100644 --- a/proc/get_wc~6.html +++ b/proc/get_wc~6.html @@ -79,20 +79,20 @@

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

    private pure function get_Wc(this) result(Wc)

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc.html b/proc/get_xc.html index 2f0e84331..ffb3e0215 100644 --- a/proc/get_xc.html +++ b/proc/get_xc.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

    - - class(bezier_volume), + + class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc~2.html b/proc/get_xc~2.html index 68b02c1be..f6a0e50ce 100644 --- a/proc/get_xc~2.html +++ b/proc/get_xc~2.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc~3.html b/proc/get_xc~3.html index 6b5302a2e..aabc7cc4b 100644 --- a/proc/get_xc~3.html +++ b/proc/get_xc~3.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

    - - class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc~4.html b/proc/get_xc~4.html index d340c59a8..e7bb865aa 100644 --- a/proc/get_xc~4.html +++ b/proc/get_xc~4.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

    - - class(bezier_curve), + + class(nurbs_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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc~5.html b/proc/get_xc~5.html index 4da83de5c..3b189f6b2 100644 --- a/proc/get_xc~5.html +++ b/proc/get_xc~5.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

    - - class(bezier_surface), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xc~6.html b/proc/get_xc~6.html index 411e41e5e..c636f9ceb 100644 --- a/proc/get_xc~6.html +++ b/proc/get_xc~6.html @@ -79,20 +79,20 @@

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

    private pure function get_Xc(this) result(Xc)

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg.html b/proc/get_xg.html index b8d124bf0..0e8b65e01 100644 --- a/proc/get_xg.html +++ b/proc/get_xg.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg~2.html b/proc/get_xg~2.html index 3b1c8c0e5..9d8d3e58b 100644 --- a/proc/get_xg~2.html +++ b/proc/get_xg~2.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg~3.html b/proc/get_xg~3.html index 10e1cfa52..25d85d178 100644 --- a/proc/get_xg~3.html +++ b/proc/get_xg~3.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg~4.html b/proc/get_xg~4.html index bc6be6ace..8275354aa 100644 --- a/proc/get_xg~4.html +++ b/proc/get_xg~4.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_curve

    +

    nurbs_surface

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg~5.html b/proc/get_xg~5.html index c4ae06db6..83bd0be69 100644 --- a/proc/get_xg~5.html +++ b/proc/get_xg~5.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    bezier_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xg~6.html b/proc/get_xg~6.html index 5d87243a9..f8e57cba7 100644 --- a/proc/get_xg~6.html +++ b/proc/get_xg~6.html @@ -79,20 +79,20 @@

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

    private pure function get_Xg(this) result(Xg)

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xt.html b/proc/get_xt.html index e373a36ae..612909fee 100644 --- a/proc/get_xt.html +++ b/proc/get_xt.html @@ -79,20 +79,20 @@

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

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

    private pure function get_Xt(this) result(Xt)

    +

    Type Bound

    +

    nurbs_curve

    Arguments

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

    Arguments

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

    Arguments

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

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xt~2.html b/proc/get_xt~2.html index 5404a28a9..181fa9017 100644 --- a/proc/get_xt~2.html +++ b/proc/get_xt~2.html @@ -79,20 +79,20 @@

    get_Xt
  • 17 statements + title=" 1.3% of total for procedures.">26 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

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

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    this -
    - - integer, - intent(in) - - ::dir -
    @@ -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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_Xt
  • 22 statements + title=" 1.0% of total for procedures.">20 statements
  • - Source File + Source File
  • @@ -144,7 +144,7 @@

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

    Type Bound

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

    get_Xt
  • 8 statements + title=" 1.0% of total for procedures.">20 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_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


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

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

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

    Type Bound

    -

    bezier_surface

    Arguments

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

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/get_xt~6.html b/proc/get_xt~6.html index f26af055b..f890e2634 100644 --- a/proc/get_xt~6.html +++ b/proc/get_xt~6.html @@ -79,20 +79,20 @@

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

    private pure function get_Xt(this) result(Xt)

    Type Bound

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

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

    Return Value

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/kron.html b/proc/kron.html index 6f794a9ef..6c80aeaaf 100644 --- a/proc/kron.html +++ b/proc/kron.html @@ -218,57 +218,57 @@

    Called by

    forcad_utils::kron - + -proc~create - - -forcad_bezier_volume::bezier_volume%create +proc~create~2 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create->proc~kron +proc~create~2->proc~kron - + -proc~create~2 - - -forcad_nurbs_surface::nurbs_surface%create +proc~create~3 + + +forcad_bezier_surface::bezier_surface%create - + -proc~create~2->proc~kron +proc~create~3->proc~kron - + -proc~create~3 - +proc~create~4 + -forcad_nurbs_volume::nurbs_volume%create +forcad_nurbs_surface::nurbs_surface%create - + -proc~create~3->proc~kron +proc~create~4->proc~kron proc~create~5 - + -forcad_bezier_surface::bezier_surface%create +forcad_bezier_volume::bezier_volume%create @@ -282,61 +282,61 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~5 - - + + +program~example_bezier_surface->proc~create~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create - - + + +program~example_bezier_volume->proc~create~5 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~create~2 - - + + +program~example_nurbs_surface->proc~create~4 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create~3 - - + + +program~example_nurbs_volume->proc~create~2 + + @@ -449,7 +449,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/modify_wc.html b/proc/modify_wc.html index 13cd5871e..cdd5da14a 100644 --- a/proc/modify_wc.html +++ b/proc/modify_wc.html @@ -79,20 +79,20 @@

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

    private pure subroutine modify_Wc(this, W, num)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(inout) @@ -217,35 +217,144 @@

    Calls

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

    diff --git a/proc/modify_wc~2.html b/proc/modify_wc~2.html index 1d699af61..b45f59957 100644 --- a/proc/modify_wc~2.html +++ b/proc/modify_wc~2.html @@ -79,20 +79,20 @@

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

    private pure subroutine modify_Wc(this, W, num)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

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

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -226,14 +226,14 @@

    Calls

    proc~modify_wc~2 -forcad_nurbs_surface::nurbs_surface%modify_Wc +forcad_nurbs_volume::nurbs_volume%modify_Wc none~set~2 - + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set @@ -243,63 +243,63 @@

    Calls

    - + -proc~set1 - +proc~set1~2 + -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~2->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~2->proc~set2 +none~set~2->proc~set2~2 proc~get_nc~2 - + -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1->proc~get_nc~2 +proc~set1~2->proc~get_nc~2 proc~get_order~2 - + -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1->proc~get_order~2 +proc~set1~2->proc~get_order~2 @@ -312,15 +312,15 @@

    Calls

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

    Calls

    - + -proc~get_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 +proc~get_order~2->proc~get_multiplicity~2 - + -proc~get_multiplicity->proc~compute_multiplicity +proc~get_multiplicity~2->proc~compute_multiplicity @@ -490,7 +490,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/modify_wc~3.html b/proc/modify_wc~3.html index f1be75fa6..375d22e7e 100644 --- a/proc/modify_wc~3.html +++ b/proc/modify_wc~3.html @@ -79,20 +79,20 @@

    modify_Wc
  • 10 statements + title=" 0.6% of total for procedures.">11 statements
  • - 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

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

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

    Arguments

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

    Calls

    - - + + proc~~modify_wc~3~~CallsGraph - + proc~modify_wc~3 - -forcad_nurbs_volume::nurbs_volume%modify_Wc + +forcad_bezier_surface::bezier_surface%modify_Wc - + -none~set~3 - - -forcad_nurbs_volume::nurbs_volume%set +proc~set + + +forcad_bezier_surface::bezier_surface%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 - - +proc~modify_wc~3->proc~set + + -
    +

    diff --git a/proc/modify_wc~4.html b/proc/modify_wc~4.html index 43dbfd7c1..bd410bedd 100644 --- a/proc/modify_wc~4.html +++ b/proc/modify_wc~4.html @@ -79,20 +79,20 @@

    modify_Wc
  • 10 statements + title=" 0.6% of total for procedures.">11 statements
  • - 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_surface

    Arguments

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

    Arguments

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

    Calls

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

    diff --git a/proc/modify_wc~5.html b/proc/modify_wc~5.html index 9c20870f5..f1727f511 100644 --- a/proc/modify_wc~5.html +++ b/proc/modify_wc~5.html @@ -79,20 +79,20 @@

    modify_Wc
  • 10 statements + title=" 0.6% of total for procedures.">11 statements
  • - 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_surface

    +

    bezier_volume

    Arguments

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

    Arguments

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

    Calls

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

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/modify_wc~6.html b/proc/modify_wc~6.html index b28f83888..2fdf72997 100644 --- a/proc/modify_wc~6.html +++ b/proc/modify_wc~6.html @@ -79,20 +79,20 @@

    modify_Wc
  • 10 statements + title=" 0.6% of total for procedures.">11 statements
  • - 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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    - - class(nurbs_curve), + + class(bezier_curve), intent(inout) @@ -217,144 +218,35 @@

    Calls

    - - + + proc~~modify_wc~6~~CallsGraph - + proc~modify_wc~6 - -forcad_nurbs_curve::nurbs_curve%modify_Wc + +forcad_bezier_curve::bezier_curve%modify_Wc - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +proc~set~3 + + +forcad_bezier_curve::bezier_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 - - +proc~modify_wc~6->proc~set~3 + + -
    +

    diff --git a/proc/modify_xc.html b/proc/modify_xc.html index ac1917231..d30aec1d3 100644 --- a/proc/modify_xc.html +++ b/proc/modify_xc.html @@ -79,20 +79,20 @@

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

    private pure subroutine modify_Xc(this, X, num, dir)

    Type Bound

    -

    bezier_volume

    +

    nurbs_curve

    Arguments

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

    Arguments

    @@ -232,35 +232,144 @@

    Calls

    - - + + proc~~modify_xc~~CallsGraph - + proc~modify_xc - -forcad_bezier_volume::bezier_volume%modify_Xc + +forcad_nurbs_curve::nurbs_curve%modify_Xc - + -proc~set - - -forcad_bezier_volume::bezier_volume%set +none~set + + +forcad_nurbs_curve::nurbs_curve%set - + -proc~modify_xc->proc~set - - +proc~modify_xc->none~set + + + + + +proc~set1 + + +forcad_nurbs_curve::nurbs_curve%set1 + + + + + +none~set->proc~set1 + + + + + +proc~set2 + + +forcad_nurbs_curve::nurbs_curve%set2 + + + + + +none~set->proc~set2 + + + + + +proc~get_order + + +forcad_nurbs_curve::nurbs_curve%get_order + + + + + +proc~set1->proc~get_order + + + + + +proc~compute_knot_vector + + +forcad_utils::compute_knot_vector + + + + + +proc~set2->proc~compute_knot_vector + + + + + +proc~repelem + + +forcad_utils::repelem + + + + + +proc~compute_knot_vector->proc~repelem + + + + + +proc~get_multiplicity + + +forcad_nurbs_curve::nurbs_curve%get_multiplicity + + + + + +proc~get_order->proc~get_multiplicity + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_multiplicity->proc~compute_multiplicity + + -
    +

    diff --git a/proc/modify_xc~2.html b/proc/modify_xc~2.html index ee7c869c4..1c740d024 100644 --- a/proc/modify_xc~2.html +++ b/proc/modify_xc~2.html @@ -79,20 +79,20 @@

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

    private pure subroutine modify_Xc(this, X, num, dir)

    Type Bound

    -

    nurbs_surface

    +

    nurbs_volume

    Arguments

    - - class(bezier_volume), + + class(nurbs_curve), intent(inout) @@ -204,7 +204,7 @@

    Arguments

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

    Arguments

    @@ -241,14 +241,14 @@

    Calls

    proc~modify_xc~2 -forcad_nurbs_surface::nurbs_surface%modify_Xc +forcad_nurbs_volume::nurbs_volume%modify_Xc none~set~2 - + -forcad_nurbs_surface::nurbs_surface%set +forcad_nurbs_volume::nurbs_volume%set @@ -258,63 +258,63 @@

    Calls

    - + -proc~set1 - +proc~set1~2 + -forcad_nurbs_surface::nurbs_surface%set1 +forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~2->proc~set1 +none~set~2->proc~set1~2 - + -proc~set2 - +proc~set2~2 + -forcad_nurbs_surface::nurbs_surface%set2 +forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~2->proc~set2 +none~set~2->proc~set2~2 proc~get_nc~2 - + -forcad_nurbs_surface::nurbs_surface%get_nc +forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1->proc~get_nc~2 +proc~set1~2->proc~get_nc~2 proc~get_order~2 - + -forcad_nurbs_surface::nurbs_surface%get_order +forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1->proc~get_order~2 +proc~set1~2->proc~get_order~2 @@ -327,15 +327,15 @@

    Calls

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

    Calls

    - + -proc~get_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 +proc~get_order~2->proc~get_multiplicity~2 - + -proc~get_multiplicity->proc~compute_multiplicity +proc~get_multiplicity~2->proc~compute_multiplicity @@ -505,7 +505,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/modify_xc~3.html b/proc/modify_xc~3.html index 0bd6df876..39fb89d5f 100644 --- a/proc/modify_xc~3.html +++ b/proc/modify_xc~3.html @@ -79,20 +79,20 @@

    modify_Xc
  • 11 statements + title=" 0.6% of total for procedures.">12 statements
  • - 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

    -

    nurbs_volume

    +

    bezier_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_volume), intent(inout) @@ -204,7 +204,7 @@

    Arguments

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

    Arguments

    @@ -232,171 +233,35 @@

    Calls

    - - + + proc~~modify_xc~3~~CallsGraph - + proc~modify_xc~3 - -forcad_nurbs_volume::nurbs_volume%modify_Xc + +forcad_bezier_surface::bezier_surface%modify_Xc - + -none~set~3 - - -forcad_nurbs_volume::nurbs_volume%set +proc~set + + +forcad_bezier_surface::bezier_surface%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 - - +proc~modify_xc~3->proc~set + + -
    +

    diff --git a/proc/modify_xc~4.html b/proc/modify_xc~4.html index 95634fecf..4c13f28b9 100644 --- a/proc/modify_xc~4.html +++ b/proc/modify_xc~4.html @@ -79,20 +79,20 @@

    modify_Xc
  • 11 statements + title=" 0.6% of total for procedures.">12 statements
  • - 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_surface

    Arguments

    - - class(nurbs_volume), + + class(bezier_surface), intent(inout) @@ -204,7 +205,7 @@

    Arguments

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

    Arguments

    @@ -233,35 +232,171 @@

    Calls

    - - + + proc~~modify_xc~4~~CallsGraph - + proc~modify_xc~4 - -forcad_bezier_curve::bezier_curve%modify_Xc + +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~set~2 - - -forcad_bezier_curve::bezier_curve%set +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set - + -proc~modify_xc~4->proc~set~2 - - +proc~modify_xc~4->none~set~4 + + + + + +proc~set1~3 + + +forcad_nurbs_surface::nurbs_surface%set1 + + + + + +none~set~4->proc~set1~3 + + + + + +proc~set2~3 + + +forcad_nurbs_surface::nurbs_surface%set2 + + + + + +none~set~4->proc~set2~3 + + + + + +proc~get_nc~4 + + +forcad_nurbs_surface::nurbs_surface%get_nc + + + + + +proc~set1~3->proc~get_nc~4 + + + + + +proc~get_order~4 + + +forcad_nurbs_surface::nurbs_surface%get_order + + + + + +proc~set1~3->proc~get_order~4 + + + + + +proc~compute_knot_vector + + +forcad_utils::compute_knot_vector + + + + + +proc~set2~3->proc~compute_knot_vector + + + + + +proc~set2~3->proc~get_nc~4 + + + + + +proc~repelem + + +forcad_utils::repelem + + + + + +proc~compute_knot_vector->proc~repelem + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~4->proc~compute_multiplicity + + + + + +proc~get_multiplicity~3 + + +forcad_nurbs_surface::nurbs_surface%get_multiplicity + + + + + +proc~get_order~4->proc~get_multiplicity~3 + + + + + +proc~get_multiplicity~3->proc~compute_multiplicity + + -
    +

    diff --git a/proc/modify_xc~5.html b/proc/modify_xc~5.html index 8d043c344..4351169f2 100644 --- a/proc/modify_xc~5.html +++ b/proc/modify_xc~5.html @@ -79,20 +79,20 @@

    modify_Xc
  • 11 statements + title=" 0.6% of total for procedures.">12 statements
  • - 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_surface

    +

    bezier_volume

    Arguments

    - - class(bezier_curve), + + class(nurbs_surface), intent(inout) @@ -205,7 +204,7 @@

    Arguments

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

    Arguments

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

    Calls

    proc~modify_xc~5 -forcad_bezier_surface::bezier_surface%modify_Xc +forcad_bezier_volume::bezier_volume%modify_Xc - + -proc~set~3 - +proc~set~2 + -forcad_bezier_surface::bezier_surface%set +forcad_bezier_volume::bezier_volume%set - + -proc~modify_xc~5->proc~set~3 +proc~modify_xc~5->proc~set~2 @@ -370,7 +369,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/modify_xc~6.html b/proc/modify_xc~6.html index 41143e808..c16c64f44 100644 --- a/proc/modify_xc~6.html +++ b/proc/modify_xc~6.html @@ -79,20 +79,20 @@

    modify_Xc
  • 11 statements + title=" 0.6% of total for procedures.">12 statements
  • - 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

    -

    nurbs_curve

    +

    bezier_curve

    Arguments

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

    Arguments

    @@ -241,57 +241,57 @@

    Called by

    - + -proc~create - - -forcad_bezier_volume::bezier_volume%create +proc~create~2 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~create~2 - - -forcad_nurbs_surface::nurbs_surface%create +proc~create~3 + + +forcad_bezier_surface::bezier_surface%create - + -proc~create~2->interface~ndgrid - - +proc~create~3->interface~ndgrid + + - + -proc~create~3 - +proc~create~4 + -forcad_nurbs_volume::nurbs_volume%create +forcad_nurbs_surface::nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~4->interface~ndgrid proc~create~5 - + -forcad_bezier_surface::bezier_surface%create +forcad_bezier_volume::bezier_volume%create @@ -305,61 +305,61 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~5 - - + + +program~example_bezier_surface->proc~create~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create - - + + +program~example_bezier_volume->proc~create~5 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~create~2 - - + + +program~example_nurbs_surface->proc~create~4 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create~3 - - + + +program~example_nurbs_volume->proc~create~2 + + @@ -476,7 +476,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/ndgrid3.html b/proc/ndgrid3.html index 67223cbdd..ecad12488 100644 --- a/proc/ndgrid3.html +++ b/proc/ndgrid3.html @@ -79,7 +79,7 @@

    ndgrid3
  • 20 statements + title=" 1.0% of total for procedures.">20 statements
  • @@ -202,7 +202,7 @@

    Arguments

  • @@ -256,57 +256,57 @@

    Called by

    - + -proc~create - - -forcad_bezier_volume::bezier_volume%create +proc~create~2 + + +forcad_nurbs_volume::nurbs_volume%create - + -proc~create->interface~ndgrid +proc~create~2->interface~ndgrid - + -proc~create~2 - - -forcad_nurbs_surface::nurbs_surface%create +proc~create~3 + + +forcad_bezier_surface::bezier_surface%create - + -proc~create~2->interface~ndgrid - - +proc~create~3->interface~ndgrid + + - + -proc~create~3 - +proc~create~4 + -forcad_nurbs_volume::nurbs_volume%create +forcad_nurbs_surface::nurbs_surface%create - + -proc~create~3->interface~ndgrid +proc~create~4->interface~ndgrid proc~create~5 - + -forcad_bezier_surface::bezier_surface%create +forcad_bezier_volume::bezier_volume%create @@ -320,61 +320,61 @@

    Called by

    program~example_bezier_surface - -example_bezier_surface + +example_bezier_surface - - -program~example_bezier_surface->proc~create~5 - - + + +program~example_bezier_surface->proc~create~3 + + program~example_bezier_volume - -example_bezier_volume + +example_bezier_volume - - -program~example_bezier_volume->proc~create - - + + +program~example_bezier_volume->proc~create~5 + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->proc~create~2 - - + + +program~example_nurbs_surface->proc~create~4 + + program~example_nurbs_volume - -example_nurbs_volume + +example_nurbs_volume - - -program~example_nurbs_volume->proc~create~3 - - + + +program~example_nurbs_volume->proc~create~2 + + @@ -491,7 +491,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/repelem.html b/proc/repelem.html index 24079190b..9fc7b0056 100644 --- a/proc/repelem.html +++ b/proc/repelem.html @@ -196,7 +196,7 @@

    Arguments

    Return Value - + real(kind=rk), dimension(sum(b))

    @@ -242,9 +242,9 @@

    Called by

    proc~set2 - - -forcad_nurbs_surface::nurbs_surface%set2 + + +forcad_nurbs_curve::nurbs_curve%set2 @@ -272,9 +272,9 @@

    Called by

    proc~set2~3 - - -forcad_nurbs_curve::nurbs_curve%set2 + + +forcad_nurbs_surface::nurbs_surface%set2 @@ -284,170 +284,170 @@

    Called by

    - + -none~set~2 - - -forcad_nurbs_surface::nurbs_surface%set +none~set + + +forcad_nurbs_curve::nurbs_curve%set - + -none~set~2->proc~set2 - - +none~set->proc~set2 + + - + -none~set~3 - +none~set~2 + forcad_nurbs_volume::nurbs_volume%set - + -none~set~3->proc~set2~2 +none~set~2->proc~set2~2 - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set - + -none~set~6->proc~set2~3 - - +none~set~4->proc~set2~3 + + - + -proc~modify_wc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Wc +proc~modify_wc + + +forcad_nurbs_curve::nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 +proc~modify_wc->none~set - + -proc~modify_wc~3 - +proc~modify_wc~2 + forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 - + -proc~modify_wc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Wc +proc~modify_wc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc~6->none~set~6 - - +proc~modify_wc~4->none~set~4 + + - + -proc~modify_xc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Xc +proc~modify_xc + + +forcad_nurbs_curve::nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc->none~set + + - + -proc~modify_xc~3 - +proc~modify_xc~2 + forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 - + -proc~modify_xc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Xc +proc~modify_xc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc~6->none~set~6 - - +proc~modify_xc~4->none~set~4 + + program~example_nurbs_curve - -example_nurbs_curve + +example_nurbs_curve - - -program~example_nurbs_curve->none~set~6 - - + + +program~example_nurbs_curve->none~set + + program~example_nurbs_surface - -example_nurbs_surface + +example_nurbs_surface - - -program~example_nurbs_surface->none~set~2 - - + + +program~example_nurbs_surface->none~set~4 + + @@ -458,9 +458,9 @@

    Called by

    - + -program~example_nurbs_volume->none~set~3 +program~example_nurbs_volume->none~set~2 @@ -598,7 +598,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set.html b/proc/set.html index cc985acf0..5743baba2 100644 --- a/proc/set.html +++ b/proc/set.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(nurbs_curve), + + class(bezier_curve), intent(inout) @@ -232,144 +233,35 @@

    Calls

    - - + + proc~~modify_xc~6~~CallsGraph - + proc~modify_xc~6 - -forcad_nurbs_curve::nurbs_curve%modify_Xc + +forcad_bezier_curve::bezier_curve%modify_Xc - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +proc~set~3 + + +forcad_bezier_curve::bezier_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 - - +proc~modify_xc~6->proc~set~3 + + -
    +

    diff --git a/proc/ndgrid2.html b/proc/ndgrid2.html index 2c165eeb1..7b082a237 100644 --- a/proc/ndgrid2.html +++ b/proc/ndgrid2.html @@ -79,7 +79,7 @@

    ndgrid2
  • 16 statements + title=" 0.8% of total for procedures.">16 statements
  • @@ -187,7 +187,7 @@

    Arguments

  • - + real(kind=rk), intent(out),
    - + real(kind=rk), intent(out),
    @@ -160,8 +160,8 @@

    Arguments

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

    Arguments

    @@ -205,7 +205,7 @@

    Arguments

    @@ -242,50 +242,50 @@

    Called by

    proc~set -forcad_bezier_volume::bezier_volume%set +forcad_bezier_surface::bezier_surface%set - + -proc~modify_wc - +proc~modify_wc~3 + -forcad_bezier_volume::bezier_volume%modify_Wc +forcad_bezier_surface::bezier_surface%modify_Wc - + -proc~modify_wc->proc~set +proc~modify_wc~3->proc~set - + -proc~modify_xc - +proc~modify_xc~3 + -forcad_bezier_volume::bezier_volume%modify_Xc +forcad_bezier_surface::bezier_surface%modify_Xc - + -proc~modify_xc->proc~set +proc~modify_xc~3->proc~set - + -program~example_bezier_volume - +program~example_bezier_surface + -example_bezier_volume +example_bezier_surface - + -program~example_bezier_volume->proc~set +program~example_bezier_surface->proc~set @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set1.html b/proc/set1.html index 4613513e1..3d79245ae 100644 --- a/proc/set1.html +++ b/proc/set1.html @@ -79,20 +79,20 @@

    set1
  • 14 statements + title=" 0.9% of total for procedures.">17 statements
  • - Source File + Source File
  • -

    private pure subroutine set1(this, knot1, knot2, Xc, Wc) +

    private pure subroutine set1(this, knot, Xc, Wc)

    -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the Bezier curve object.

    Type Bound

    -

    nurbs_surface

    +

    nurbs_curve

    Arguments

    - - class(bezier_volume), + + class(bezier_surface), intent(inout) @@ -175,7 +175,7 @@

    Arguments

    - + integer, intent(in)
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    @@ -183,29 +183,14 @@

    Arguments

    - + - - - - - - - - @@ -220,7 +205,7 @@

    Arguments

    @@ -248,82 +233,61 @@

    Calls

    - - + + proc~~set1~~CallsGraph - + proc~set1 - -forcad_nurbs_surface::nurbs_surface%set1 + +forcad_nurbs_curve::nurbs_curve%set1 - + -proc~get_nc~2 - - -forcad_nurbs_surface::nurbs_surface%get_nc +proc~get_order + + +forcad_nurbs_curve::nurbs_curve%get_order - + -proc~set1->proc~get_nc~2 - - +proc~set1->proc~get_order + + - + -proc~get_order~2 - - -forcad_nurbs_surface::nurbs_surface%get_order +proc~get_multiplicity + + +forcad_nurbs_curve::nurbs_curve%get_multiplicity - + -proc~set1->proc~get_order~2 - - +proc~get_order->proc~get_multiplicity + + proc~compute_multiplicity - -forcad_utils::compute_multiplicity - - - - - -proc~get_nc~2->proc~compute_multiplicity - - - - - -proc~get_multiplicity - - -forcad_nurbs_surface::nurbs_surface%get_multiplicity + +forcad_utils::compute_multiplicity - - -proc~get_order~2->proc~get_multiplicity - - - - + proc~get_multiplicity->proc~compute_multiplicity - - + + @@ -423,76 +387,76 @@

    Called by

    - - + + proc~~set1~~CalledByGraph - + proc~set1 - -forcad_nurbs_surface::nurbs_surface%set1 + +forcad_nurbs_curve::nurbs_curve%set1 - + -none~set~2 - - -forcad_nurbs_surface::nurbs_surface%set +none~set + + +forcad_nurbs_curve::nurbs_curve%set - + -none~set~2->proc~set1 - - +none~set->proc~set1 + + - + -proc~modify_wc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Wc +proc~modify_wc + + +forcad_nurbs_curve::nurbs_curve%modify_Wc - + -proc~modify_wc~2->none~set~2 - - +proc~modify_wc->none~set + + - + -proc~modify_xc~2 - - -forcad_nurbs_surface::nurbs_surface%modify_Xc +proc~modify_xc + + +forcad_nurbs_curve::nurbs_curve%modify_Xc - + -proc~modify_xc~2->none~set~2 - - +proc~modify_xc->none~set + + - + -program~example_nurbs_surface - - -example_nurbs_surface +program~example_nurbs_curve + + +example_nurbs_curve - + -program~example_nurbs_surface->none~set~2 - - +program~example_nurbs_curve->none~set + + @@ -609,7 +573,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set1~2.html b/proc/set1~2.html index 6a6030453..cbee96f37 100644 --- a/proc/set1~2.html +++ b/proc/set1~2.html @@ -160,7 +160,7 @@

    Arguments

    @@ -175,7 +175,7 @@

    Arguments

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

    Arguments

    @@ -274,33 +274,33 @@

    Calls

    forcad_nurbs_volume::nurbs_volume%set1 - + -proc~get_nc~3 - +proc~get_nc~2 + forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1~2->proc~get_nc~3 +proc~set1~2->proc~get_nc~2 - + -proc~get_order~3 - +proc~get_order~2 + forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1~2->proc~get_order~3 +proc~set1~2->proc~get_order~2 @@ -313,9 +313,9 @@

    Calls

    - + -proc~get_nc~3->proc~compute_multiplicity +proc~get_nc~2->proc~compute_multiplicity @@ -328,9 +328,9 @@

    Calls

    - + -proc~get_order~3->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity~2 @@ -449,48 +449,48 @@

    Called by

    forcad_nurbs_volume::nurbs_volume%set1 - + -none~set~3 - +none~set~2 + forcad_nurbs_volume::nurbs_volume%set - + -none~set~3->proc~set1~2 +none~set~2->proc~set1~2 - + -proc~modify_wc~3 - +proc~modify_wc~2 + forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 - + -proc~modify_xc~3 - +proc~modify_xc~2 + forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -503,9 +503,9 @@

    Called by

    - + -program~example_nurbs_volume->none~set~3 +program~example_nurbs_volume->none~set~2 @@ -624,7 +624,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set1~3.html b/proc/set1~3.html index 8d91822b3..1df903114 100644 --- a/proc/set1~3.html +++ b/proc/set1~3.html @@ -79,20 +79,20 @@

    set1
  • 17 statements + title=" 0.7% of total for procedures.">14 statements
  • - Source File + Source File
  • -

    private pure subroutine set1(this, knot, Xc, Wc) +

    private pure subroutine set1(this, knot1, knot2, Xc, Wc)

    -

    Set control points and weights for the Bezier curve object.

    +

    Set control points and weights for the NURBS surface object.

    Type Bound

    -

    nurbs_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -175,7 +175,7 @@

    Arguments

    - + real(kind=rk), intent(in) ::knot1(:)knot(:)
    - - real(kind=rk), - intent(in) - - ::knot2(:) - -
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    - + class(nurbs_volume), intent(inout)
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in)
    @@ -160,8 +160,8 @@

    Arguments

    @@ -183,14 +183,29 @@

    Arguments

    - + + + + + + + + + @@ -205,7 +220,7 @@

    Arguments

    @@ -233,61 +248,82 @@

    Calls

    - - + + proc~~set1~3~~CallsGraph - + proc~set1~3 - -forcad_nurbs_curve::nurbs_curve%set1 + +forcad_nurbs_surface::nurbs_surface%set1 - + -proc~get_order~6 - - -forcad_nurbs_curve::nurbs_curve%get_order +proc~get_nc~4 + + +forcad_nurbs_surface::nurbs_surface%get_nc - + -proc~set1~3->proc~get_order~6 - - +proc~set1~3->proc~get_nc~4 + + - + -proc~get_multiplicity~3 - - -forcad_nurbs_curve::nurbs_curve%get_multiplicity +proc~get_order~4 + + +forcad_nurbs_surface::nurbs_surface%get_order - + -proc~get_order~6->proc~get_multiplicity~3 - - +proc~set1~3->proc~get_order~4 + + proc~compute_multiplicity - -forcad_utils::compute_multiplicity + +forcad_utils::compute_multiplicity - + +proc~get_nc~4->proc~compute_multiplicity + + + + + +proc~get_multiplicity~3 + + +forcad_nurbs_surface::nurbs_surface%get_multiplicity + + + + + +proc~get_order~4->proc~get_multiplicity~3 + + + + + proc~get_multiplicity~3->proc~compute_multiplicity - - + + @@ -387,76 +423,76 @@

    Called by

    - - + + proc~~set1~3~~CalledByGraph - + proc~set1~3 - -forcad_nurbs_curve::nurbs_curve%set1 + +forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~6 - - -forcad_nurbs_curve::nurbs_curve%set +none~set~4 + + +forcad_nurbs_surface::nurbs_surface%set - + -none~set~6->proc~set1~3 - - +none~set~4->proc~set1~3 + + - + -proc~modify_wc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Wc +proc~modify_wc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Wc - + -proc~modify_wc~6->none~set~6 - - +proc~modify_wc~4->none~set~4 + + - + -proc~modify_xc~6 - - -forcad_nurbs_curve::nurbs_curve%modify_Xc +proc~modify_xc~4 + + +forcad_nurbs_surface::nurbs_surface%modify_Xc - + -proc~modify_xc~6->none~set~6 - - +proc~modify_xc~4->none~set~4 + + - + -program~example_nurbs_curve - - -example_nurbs_curve +program~example_nurbs_surface + + +example_nurbs_surface - + -program~example_nurbs_curve->none~set~6 - - +program~example_nurbs_surface->none~set~4 + + @@ -573,7 +609,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set2.html b/proc/set2.html index 9c8e634b7..947d8f53f 100644 --- a/proc/set2.html +++ b/proc/set2.html @@ -79,20 +79,20 @@

    set2
  • 17 statements + title=" 1.0% of total for procedures.">19 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_dir, order, continuity, Xc, Wc)

    -

    Set control points and weights for the NURBS surface object.

    +

    Set control points and weights for the Bezier curve object.

    Type Bound

    -

    nurbs_surface

    +

    nurbs_curve

    Arguments

    - - class(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -175,7 +175,7 @@

    Arguments

    - + real(kind=rk), intent(in) ::knot(:)knot1(:)
    - + + real(kind=rk), + intent(in) + + ::knot2(:) + +
    + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    @@ -183,29 +183,14 @@

    Arguments

    - + - - - - - - - - @@ -213,14 +198,14 @@

    Arguments

    - + @@ -228,29 +213,14 @@

    Arguments

    - + - - - - - - - - @@ -265,7 +235,7 @@

    Arguments

    @@ -293,84 +263,50 @@

    Calls

    - - + + proc~~set2~~CallsGraph - + proc~set2 - -forcad_nurbs_surface::nurbs_surface%set2 + +forcad_nurbs_curve::nurbs_curve%set2 proc~compute_knot_vector - -forcad_utils::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 + + +forcad_utils::repelem - + proc~compute_knot_vector->proc~repelem - - - - - -proc~compute_multiplicity - - -forcad_utils::compute_multiplicity - - - - - -proc~get_nc~2->proc~compute_multiplicity - - + + -
    +

    diff --git a/proc/set2~2.html b/proc/set2~2.html index d303ecd03..d846634d0 100644 --- a/proc/set2~2.html +++ b/proc/set2~2.html @@ -79,7 +79,7 @@

    set2
  • 20 statements + title=" 1.0% of total for procedures.">20 statements
  • @@ -160,7 +160,7 @@

    Arguments

  • @@ -175,7 +175,7 @@

    Arguments

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

    Arguments

    @@ -220,7 +220,7 @@

    Arguments

    @@ -235,7 +235,7 @@

    Arguments

    @@ -250,7 +250,7 @@

    Arguments

    @@ -349,18 +349,18 @@

    Calls

    - + -proc~get_nc~3 - +proc~get_nc~2 + forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set2~2->proc~get_nc~3 +proc~set2~2->proc~get_nc~2 @@ -388,9 +388,9 @@

    Calls

    - + -proc~get_nc~3->proc~compute_multiplicity +proc~get_nc~2->proc~compute_multiplicity @@ -503,48 +503,48 @@

    Called by

    forcad_nurbs_volume::nurbs_volume%set2 - + -none~set~3 - +none~set~2 + forcad_nurbs_volume::nurbs_volume%set - + -none~set~3->proc~set2~2 +none~set~2->proc~set2~2 - + -proc~modify_wc~3 - +proc~modify_wc~2 + forcad_nurbs_volume::nurbs_volume%modify_Wc - + -proc~modify_wc~3->none~set~3 +proc~modify_wc~2->none~set~2 - + -proc~modify_xc~3 - +proc~modify_xc~2 + forcad_nurbs_volume::nurbs_volume%modify_Xc - + -proc~modify_xc~3->none~set~3 +proc~modify_xc~2->none~set~2 @@ -557,9 +557,9 @@

    Called by

    - + -program~example_nurbs_volume->none~set~3 +program~example_nurbs_volume->none~set~2 @@ -678,7 +678,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set2~3.html b/proc/set2~3.html index c6a2ce757..def6912bc 100644 --- a/proc/set2~3.html +++ b/proc/set2~3.html @@ -79,20 +79,20 @@

    set2
  • 19 statements + title=" 0.9% of total for procedures.">17 statements
  • - Source File + Source File
  • -

    private pure subroutine set2(this, Xth_dir, order, continuity, Xc, Wc) +

    private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc)

    -

    Set control points and weights for the Bezier curve object.

    +

    Set control points and weights for the NURBS surface object.

    Type Bound

    -

    nurbs_curve

    +

    nurbs_surface

    Arguments

    - - class(nurbs_surface), + + class(nurbs_curve), intent(inout) @@ -175,7 +175,7 @@

    Arguments

    - + real(kind=rk), intent(in) ::Xth_dir1(:)Xth_dir(:)
    - - real(kind=rk), - intent(in) - - ::Xth_dir2(:) - -
    - + integer, intent(in) ::order(:)order
    - + integer, intent(in) ::continuity1(:)continuity(:)
    - - integer, - intent(in) - - ::continuity2(:) - -
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    - + class(nurbs_volume), intent(inout)
    - + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in)
    - + integer, intent(in)
    - + integer, intent(in)
    - + integer, intent(in)
    @@ -160,8 +160,8 @@

    Arguments

    @@ -183,14 +183,29 @@

    Arguments

    - + + + + + + + + + @@ -198,14 +213,14 @@

    Arguments

    - + @@ -213,14 +228,29 @@

    Arguments

    - + + + + + + + + + @@ -235,7 +265,7 @@

    Arguments

    @@ -263,50 +293,84 @@

    Calls

    - - + + proc~~set2~3~~CallsGraph - + proc~set2~3 - -forcad_nurbs_curve::nurbs_curve%set2 + +forcad_nurbs_surface::nurbs_surface%set2 proc~compute_knot_vector - -forcad_utils::compute_knot_vector + +forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector - - + + - + +proc~get_nc~4 + + +forcad_nurbs_surface::nurbs_surface%get_nc + + + + + +proc~set2~3->proc~get_nc~4 + + + + + proc~repelem - - -forcad_utils::repelem + + +forcad_utils::repelem - + proc~compute_knot_vector->proc~repelem - - + + + + + +proc~compute_multiplicity + + +forcad_utils::compute_multiplicity + + + + + +proc~get_nc~4->proc~compute_multiplicity + + -
    +

    diff --git a/proc/set~2.html b/proc/set~2.html index 78ba921b8..f5c86b8b1 100644 --- a/proc/set~2.html +++ b/proc/set~2.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(nurbs_curve), + + class(nurbs_surface), intent(inout) @@ -175,7 +175,7 @@

    Arguments

    - + real(kind=rk), intent(in) ::Xth_dir(:)Xth_dir1(:)
    - + + real(kind=rk), + intent(in) + + ::Xth_dir2(:) + +
    + integer, intent(in) ::orderorder(:)
    - + integer, intent(in) ::continuity(:)continuity1(:)
    - + + integer, + intent(in) + + ::continuity2(:) + +
    + real(kind=rk), intent(in)
    - + real(kind=rk), intent(in),
    @@ -160,8 +160,8 @@

    Arguments

    + + + + + + + + @@ -190,7 +205,7 @@

    Arguments

    @@ -218,76 +233,61 @@

    Called by

    - - + + proc~~set~2~~CalledByGraph - + proc~set~2 - -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~5 + + +forcad_bezier_volume::bezier_volume%modify_Wc - + -proc~elevate_degree->proc~set~2 - - +proc~modify_wc~5->proc~set~2 + + - + -proc~modify_wc~4 - - -forcad_bezier_curve::bezier_curve%modify_Wc +proc~modify_xc~5 + + +forcad_bezier_volume::bezier_volume%modify_Xc - + -proc~modify_wc~4->proc~set~2 - - +proc~modify_xc~5->proc~set~2 + + - + -proc~modify_xc~4 - - -forcad_bezier_curve::bezier_curve%modify_Xc +program~example_bezier_volume + + +example_bezier_volume - + -proc~modify_xc~4->proc~set~2 - - - - - -program~example_bezier_curve - - -example_bezier_curve - - - - - -program~example_bezier_curve->proc~set~2 - - +program~example_bezier_volume->proc~set~2 + + @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/proc/set~3.html b/proc/set~3.html index 2099f68ac..b818dd0fa 100644 --- a/proc/set~3.html +++ b/proc/set~3.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(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

    - - - - - - - - @@ -205,7 +190,7 @@

    Arguments

    @@ -233,61 +218,76 @@

    Called by

    - - + + proc~~set~3~~CalledByGraph - + proc~set~3 - -forcad_bezier_surface::bezier_surface%set + +forcad_bezier_curve::bezier_curve%set - + -proc~modify_wc~5 - - -forcad_bezier_surface::bezier_surface%modify_Wc +proc~elevate_degree + + +forcad_bezier_curve::bezier_curve%elevate_degree - + -proc~modify_wc~5->proc~set~3 - - +proc~elevate_degree->proc~set~3 + + - + -proc~modify_xc~5 - - -forcad_bezier_surface::bezier_surface%modify_Xc +proc~modify_wc~6 + + +forcad_bezier_curve::bezier_curve%modify_Wc - + -proc~modify_xc~5->proc~set~3 - - +proc~modify_wc~6->proc~set~3 + + - + -program~example_bezier_surface - - -example_bezier_surface +proc~modify_xc~6 + + +forcad_bezier_curve::bezier_curve%modify_Xc - + -program~example_bezier_surface->proc~set~3 - - +proc~modify_xc~6->proc~set~3 + + + + + +program~example_bezier_curve + + +example_bezier_curve + + + + + +program~example_bezier_curve->proc~set~3 + + @@ -400,7 +400,7 @@

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_bezier_curve.html b/program/example_bezier_curve.html index 2be14410e..875ef7d9e 100644 --- a/program/example_bezier_curve.html +++ b/program/example_bezier_curve.html @@ -116,8 +116,8 @@

    Variables

    - Wc - Xc + Wc + Xc bezier
    @@ -460,63 +460,63 @@

    Calls

    example_bezier_curve - + -proc~create~4 - +proc~create~6 + forcad_bezier_curve::bezier_curve%create - + -program~example_bezier_curve->proc~create~4 +program~example_bezier_curve->proc~create~6 - + -proc~export_xc~4 - +proc~export_xc~6 + forcad_bezier_curve::bezier_curve%export_Xc - + -program~example_bezier_curve->proc~export_xc~4 +program~example_bezier_curve->proc~export_xc~6 - + -proc~export_xg~4 - +proc~export_xg~6 + forcad_bezier_curve::bezier_curve%export_Xg - + -program~example_bezier_curve->proc~export_xg~4 +program~example_bezier_curve->proc~export_xg~6 - + -proc~finalize~4 - +proc~finalize~6 + forcad_bezier_curve::bezier_curve%finalize - + -program~example_bezier_curve->proc~finalize~4 +program~example_bezier_curve->proc~finalize~6 @@ -535,18 +535,18 @@

    Calls

    - + -proc~set~2 - +proc~set~3 + forcad_bezier_curve::bezier_curve%set - + -program~example_bezier_curve->proc~set~2 +program~example_bezier_curve->proc~set~3 @@ -559,39 +559,39 @@

    Calls

    - + -proc~create~4->proc~basis_bernstein +proc~create~6->proc~basis_bernstein - + -proc~get_elem_xc~4 - +proc~get_elem_xc~6 + forcad_bezier_curve::bezier_curve%get_elem_Xc - + -proc~export_xc~4->proc~get_elem_xc~4 +proc~export_xc~6->proc~get_elem_xc~6 - + -proc~get_elem_xg~4 - +proc~get_elem_xg~6 + forcad_bezier_curve::bezier_curve%get_elem_Xg - + -proc~export_xg~4->proc~get_elem_xg~4 +proc~export_xg~6->proc~get_elem_xg~6 @@ -604,15 +604,15 @@

    Calls

    - + -proc~get_elem_xc~4->interface~elemconn_c0 +proc~get_elem_xc~6->interface~elemconn_c0 - + -proc~get_elem_xg~4->interface~elemconn_c0 +proc~get_elem_xg~6->interface~elemconn_c0 @@ -764,7 +764,7 @@

    Variables

    @@ -918,7 +918,7 @@

    Arguments

    @@ -933,7 +933,7 @@

    Arguments

    @@ -1053,7 +1053,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_bezier_volume.html b/program/example_bezier_volume.html index 861b40aa9..965f772db 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 - +proc~create~5 + forcad_bezier_volume::bezier_volume%create - + -program~example_bezier_volume->proc~create +program~example_bezier_volume->proc~create~5 - + -proc~export_xc - +proc~export_xc~5 + forcad_bezier_volume::bezier_volume%export_Xc - + -program~example_bezier_volume->proc~export_xc +program~example_bezier_volume->proc~export_xc~5 - + -proc~export_xg - +proc~export_xg~5 + forcad_bezier_volume::bezier_volume%export_Xg - + -program~example_bezier_volume->proc~export_xg +program~example_bezier_volume->proc~export_xg~5 - + -proc~finalize - +proc~finalize~5 + forcad_bezier_volume::bezier_volume%finalize - + -program~example_bezier_volume->proc~finalize +program~example_bezier_volume->proc~finalize~5 - + -proc~generate_xc~3 - +proc~generate_xc + example_bezier_volume::generate_Xc - + -program~example_bezier_volume->proc~generate_xc~3 +program~example_bezier_volume->proc~generate_xc - + -proc~set - +proc~set~2 + forcad_bezier_volume::bezier_volume%set - + -program~example_bezier_volume->proc~set +program~example_bezier_volume->proc~set~2 @@ -559,9 +559,9 @@

    Calls

    - + -proc~create->interface~ndgrid +proc~create~5->interface~ndgrid @@ -574,9 +574,9 @@

    Calls

    - + -proc~create->proc~basis_bernstein +proc~create~5->proc~basis_bernstein @@ -589,39 +589,39 @@

    Calls

    - + -proc~create->proc~kron +proc~create~5->proc~kron - + -proc~get_elem_xc - +proc~get_elem_xc~5 + forcad_bezier_volume::bezier_volume%get_elem_Xc - + -proc~export_xc->proc~get_elem_xc +proc~export_xc~5->proc~get_elem_xc~5 - + -proc~get_elem_xg - +proc~get_elem_xg~5 + forcad_bezier_volume::bezier_volume%get_elem_Xg - + -proc~export_xg->proc~get_elem_xg +proc~export_xg~5->proc~get_elem_xg~5 @@ -664,15 +664,15 @@

    Calls

    - + -proc~get_elem_xc->interface~elemconn_c0 +proc~get_elem_xc~5->interface~elemconn_c0 - + -proc~get_elem_xg->interface~elemconn_c0 +proc~get_elem_xg~5->interface~elemconn_c0 @@ -824,7 +824,7 @@

    Variables

    @@ -1018,7 +1018,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_nurbs_curve.html b/program/example_nurbs_curve.html index 15f8a66cb..443cca1f9 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
    @@ -442,108 +442,108 @@

    Calls

    example_nurbs_curve - + -none~set~6 - +none~set + forcad_nurbs_curve::nurbs_curve%set - + -program~example_nurbs_curve->none~set~6 +program~example_nurbs_curve->none~set - + -proc~create~6 - +proc~create + forcad_nurbs_curve::nurbs_curve%create - + -program~example_nurbs_curve->proc~create~6 +program~example_nurbs_curve->proc~create - + -proc~export_xc~6 - +proc~export_xc + forcad_nurbs_curve::nurbs_curve%export_Xc - + -program~example_nurbs_curve->proc~export_xc~6 +program~example_nurbs_curve->proc~export_xc - + -proc~export_xg~6 - +proc~export_xg + forcad_nurbs_curve::nurbs_curve%export_Xg - + -program~example_nurbs_curve->proc~export_xg~6 +program~example_nurbs_curve->proc~export_xg - + -proc~finalize~6 - +proc~finalize + forcad_nurbs_curve::nurbs_curve%finalize - + -program~example_nurbs_curve->proc~finalize~6 +program~example_nurbs_curve->proc~finalize - + -proc~set1~3 - +proc~set1 + forcad_nurbs_curve::nurbs_curve%set1 - + -none~set~6->proc~set1~3 +none~set->proc~set1 - + -proc~set2~3 - +proc~set2 + forcad_nurbs_curve::nurbs_curve%set2 - + -none~set~6->proc~set2~3 +none~set->proc~set2 @@ -556,39 +556,39 @@

    Calls

    - + -proc~create~6->proc~basis_bspline +proc~create->proc~basis_bspline - + -proc~get_elem_xc~6 - +proc~get_elem_xc + forcad_nurbs_curve::nurbs_curve%get_elem_Xc - + -proc~export_xc~6->proc~get_elem_xc~6 +proc~export_xc->proc~get_elem_xc - + -proc~get_elem_xg~6 - +proc~get_elem_xg + forcad_nurbs_curve::nurbs_curve%get_elem_Xg - + -proc~export_xg~6->proc~get_elem_xg~6 +proc~export_xg->proc~get_elem_xg @@ -601,30 +601,30 @@

    Calls

    - + -proc~get_elem_xc~6->interface~elemconn_c0 +proc~get_elem_xc->interface~elemconn_c0 - + -proc~get_elem_xg~6->interface~elemconn_c0 +proc~get_elem_xg->interface~elemconn_c0 - + -proc~get_order~6 - +proc~get_order + forcad_nurbs_curve::nurbs_curve%get_order - + -proc~set1~3->proc~get_order~6 +proc~set1->proc~get_order @@ -637,9 +637,9 @@

    Calls

    - + -proc~set2~3->proc~compute_knot_vector +proc~set2->proc~compute_knot_vector @@ -703,18 +703,18 @@

    Calls

    - + -proc~get_multiplicity~3 - +proc~get_multiplicity + forcad_nurbs_curve::nurbs_curve%get_multiplicity - + -proc~get_order~6->proc~get_multiplicity~3 +proc~get_order->proc~get_multiplicity @@ -727,9 +727,9 @@

    Calls

    - + -proc~get_multiplicity~3->proc~compute_multiplicity +proc~get_multiplicity->proc~compute_multiplicity @@ -836,7 +836,7 @@

    Variables

    @@ -1084,7 +1084,7 @@

    Arguments

    @@ -1099,7 +1099,7 @@

    Arguments

    @@ -1226,7 +1226,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_nurbs_volume.html b/program/example_nurbs_volume.html index 4a746b211..cea6f7d4f 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,93 +463,93 @@

    Calls

    example_nurbs_volume - + -none~set~3 - +none~set~2 + forcad_nurbs_volume::nurbs_volume%set - + -program~example_nurbs_volume->none~set~3 +program~example_nurbs_volume->none~set~2 - + -proc~create~3 - +proc~create~2 + forcad_nurbs_volume::nurbs_volume%create - + -program~example_nurbs_volume->proc~create~3 +program~example_nurbs_volume->proc~create~2 - + -proc~export_xc~3 - +proc~export_xc~2 + forcad_nurbs_volume::nurbs_volume%export_Xc - + -program~example_nurbs_volume->proc~export_xc~3 +program~example_nurbs_volume->proc~export_xc~2 - + -proc~export_xg~3 - +proc~export_xg~2 + forcad_nurbs_volume::nurbs_volume%export_Xg - + -program~example_nurbs_volume->proc~export_xg~3 +program~example_nurbs_volume->proc~export_xg~2 - + -proc~finalize~3 - +proc~finalize~2 + forcad_nurbs_volume::nurbs_volume%finalize - + -program~example_nurbs_volume->proc~finalize~3 +program~example_nurbs_volume->proc~finalize~2 - + -proc~generate_xc~2 - +proc~generate_xc~5 + example_nurbs_volume::generate_Xc - + -program~example_nurbs_volume->proc~generate_xc~2 +program~example_nurbs_volume->proc~generate_xc~5 @@ -562,9 +562,9 @@

    Calls

    - + -none~set~3->proc~set1~2 +none~set~2->proc~set1~2 @@ -577,9 +577,9 @@

    Calls

    - + -none~set~3->proc~set2~2 +none~set~2->proc~set2~2 @@ -592,9 +592,9 @@

    Calls

    - + -proc~create~3->interface~ndgrid +proc~create~2->interface~ndgrid @@ -607,9 +607,9 @@

    Calls

    - + -proc~create~3->proc~basis_bspline +proc~create~2->proc~basis_bspline @@ -622,39 +622,39 @@

    Calls

    - + -proc~create~3->proc~kron +proc~create~2->proc~kron - + -proc~get_elem_xc~3 - +proc~get_elem_xc~2 + forcad_nurbs_volume::nurbs_volume%get_elem_Xc - + -proc~export_xc~3->proc~get_elem_xc~3 +proc~export_xc~2->proc~get_elem_xc~2 - + -proc~get_elem_xg~3 - +proc~get_elem_xg~2 + forcad_nurbs_volume::nurbs_volume%get_elem_Xg - + -proc~export_xg~3->proc~get_elem_xg~3 +proc~export_xg~2->proc~get_elem_xg~2 @@ -697,45 +697,45 @@

    Calls

    - + -proc~get_elem_xc~3->interface~elemconn_c0 +proc~get_elem_xc~2->interface~elemconn_c0 - + -proc~get_elem_xg~3->interface~elemconn_c0 +proc~get_elem_xg~2->interface~elemconn_c0 - + -proc~get_nc~3 - +proc~get_nc~2 + forcad_nurbs_volume::nurbs_volume%get_nc - + -proc~set1~2->proc~get_nc~3 +proc~set1~2->proc~get_nc~2 - + -proc~get_order~3 - +proc~get_order~2 + forcad_nurbs_volume::nurbs_volume%get_order - + -proc~set1~2->proc~get_order~3 +proc~set1~2->proc~get_order~2 @@ -754,9 +754,9 @@

    Calls

    - + -proc~set2~2->proc~get_nc~3 +proc~set2~2->proc~get_nc~2 @@ -829,9 +829,9 @@

    Calls

    - + -proc~get_nc~3->proc~compute_multiplicity +proc~get_nc~2->proc~compute_multiplicity @@ -844,9 +844,9 @@

    Calls

    - + -proc~get_order~3->proc~get_multiplicity~2 +proc~get_order~2->proc~get_multiplicity~2 @@ -959,7 +959,7 @@

    Variables

    @@ -1207,7 +1207,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/search.html b/search.html index c81d0fdf3..936bf14ac 100644 --- a/search.html +++ b/search.html @@ -98,7 +98,7 @@

    Search Results

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/bezier_curve.f90.html b/sourcefile/bezier_curve.f90.html index fad82fac7..d10e7c3c7 100644 --- a/sourcefile/bezier_curve.f90.html +++ b/sourcefile/bezier_curve.f90.html @@ -78,7 +78,7 @@

    bezier_curve.f90
  • 32 statements + title=" 1.4% of total for source files.">32 statements
  • @@ -472,7 +472,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/bezier_surface.f90.html b/sourcefile/bezier_surface.f90.html index 8f36da5f2..19f938024 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/bezier_volume.f90.html b/sourcefile/bezier_volume.f90.html index 5d20b507a..4f2dd42c6 100644 --- a/sourcefile/bezier_volume.f90.html +++ b/sourcefile/bezier_volume.f90.html @@ -78,7 +78,7 @@

    bezier_volume.f90
  • 30 statements + title=" 1.3% of total for source files.">30 statements
  • @@ -470,7 +470,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad.f90.html b/sourcefile/forcad.f90.html index b47c1cef5..f79954d4e 100644 --- a/sourcefile/forcad.f90.html +++ b/sourcefile/forcad.f90.html @@ -569,7 +569,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_bezier_curve.f90.html b/sourcefile/forcad_bezier_curve.f90.html index 843b28c11..34fb386a1 100644 --- a/sourcefile/forcad_bezier_curve.f90.html +++ b/sourcefile/forcad_bezier_curve.f90.html @@ -78,7 +78,7 @@

    forcad_bezier_curve.f90
  • 269 statements + title="12.1% of total for source files.">275 statements
  • @@ -478,418 +478,413 @@

    Source Code

    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 - !=============================================================================== + error stop 'Number of weights does not match the number of control points.' + 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' + !=============================================================================== + !> 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 + error stop 'Control points are not set.' + 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 + error stop '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 + error stop '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 + error stop '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 + error stop '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 + error stop 'Control points are not set.' + 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,'(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 + 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 + !> 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 + error stop 'Geometry points are not set.' + end if + + call this%get_elem_Xg(elemConn) + + ng = size(this%Xg, 1) - 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) + 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," ",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 + 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 + error stop '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 + error stop '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 + error stop 'Control points are not set.' + end if + + if (allocated(this%Wc)) then ! Rational Bezier curve + + ! Calculate the new number of control points + nc_new = this%nc + 1 - 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) + 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 - ! 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) - ! 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 - else ! Non-rational Bezier curve + allocate(Xc_new(nc_new, size(this%Xc, 2))) - ! 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 + ! 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 @@ -908,7 +903,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_bezier_surface.f90.html b/sourcefile/forcad_bezier_surface.f90.html index 77e40e8a9..41399f39c 100644 --- a/sourcefile/forcad_bezier_surface.f90.html +++ b/sourcefile/forcad_bezier_surface.f90.html @@ -78,7 +78,7 @@

    forcad_bezier_surface.f90
  • 247 statements + title="11.3% of total for source files.">255 statements
  • @@ -495,348 +495,345 @@

    Source Code

    ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return - end if + error stop 'Control points are not set.' + 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(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 - !=============================================================================== + ! 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_Xc(this) result(Xc) + class(bezier_surface), intent(in) :: this + real(rk), allocatable :: Xc(:,:) + + if (allocated(this%Xc)) then + Xc = this%Xc + else + error stop '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_Xg(this) result(Xg) + class(bezier_surface), intent(in) :: this + real(rk), allocatable :: Xg(:,:) + + if (allocated(this%Xg)) then + Xg = this%Xg + else + error stop '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_Wc(this) result(Wc) + class(bezier_surface), intent(in) :: this + real(rk), allocatable :: Wc(:) + + if (allocated(this%Wc)) then + Wc = this%Wc + else + error stop '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_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 + error stop 'Parameter values are not set.' + end if + elseif (dir == 2) then + if (allocated(this%Xt2)) then + Xt = this%Xt2 + else + error stop 'Parameter values are not set.' + end if + else + error stop '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_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_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 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 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_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 + 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 + !=============================================================================== + !> 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 + error stop 'Control points are not set.' + end if + + call this%get_elem_Xc(elemConn) - call this%get_elem_Xc(elemConn) + nc = size(this%Xc, 1) - 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' + 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 + error stop 'Geometry points are not set.' + 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,'(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 + 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 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 + error stop '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 + !> 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 + error stop 'The Bezier curve is not rational.' + end if + end subroutine + !=============================================================================== + +end module forcad_bezier_surface @@ -855,7 +852,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_bezier_volume.f90.html b/sourcefile/forcad_bezier_volume.f90.html index 4b4ad94a1..876d76caf 100644 --- a/sourcefile/forcad_bezier_volume.f90.html +++ b/sourcefile/forcad_bezier_volume.f90.html @@ -78,7 +78,7 @@

    forcad_bezier_volume.f90
  • 264 statements + title="12.1% of total for source files.">273 statements
  • @@ -495,369 +495,366 @@

    Source Code

    ! 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 - !=============================================================================== + error stop 'Control points are not set.' + 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_Xc(this) result(Xc) + class(bezier_volume), intent(in) :: this + real(rk), allocatable :: Xc(:,:) + + if (allocated(this%Xc)) then + Xc = this%Xc + else + error stop '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_Xg(this) result(Xg) + class(bezier_volume), intent(in) :: this + real(rk), allocatable :: Xg(:,:) + + if (allocated(this%Xg)) then + Xg = this%Xg + else + error stop '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_Wc(this) result(Wc) + class(bezier_volume), intent(in) :: this + real(rk), allocatable :: Wc(:) + + if (allocated(this%Wc)) then + Wc = this%Wc + else + error stop '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_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 + error stop 'Parameter values are not set.' + end if + elseif (dir == 2) then + if (allocated(this%Xt2)) then + Xt = this%Xt2 + else + error stop 'Parameter values are not set.' + end if + elseif (dir == 3) then + if (allocated(this%Xt3)) then + Xt = this%Xt3 + else + error stop 'Parameter values are not set.' + end if + else + error stop '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_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_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 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 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_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 + 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 + !=============================================================================== + !> 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 + error stop 'Control points are not set.' + end if + + call this%get_elem_Xc(elemConn) - call this%get_elem_Xc(elemConn) + nc = size(this%Xc, 1) - 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' + 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 + error stop 'Geometry points are not set.' + 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,'(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 + 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 + error stop '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 + !> 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 + error stop 'The Bezier curve is not rational.' + end if + end subroutine + !=============================================================================== + +end module forcad_bezier_volume @@ -876,7 +873,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_nurbs_curve.f90.html b/sourcefile/forcad_nurbs_curve.f90.html index ce8369965..11a3f8550 100644 --- a/sourcefile/forcad_nurbs_curve.f90.html +++ b/sourcefile/forcad_nurbs_curve.f90.html @@ -78,7 +78,7 @@

    forcad_nurbs_curve.f90
  • 284 statements + title="12.8% of total for source files.">291 statements
  • @@ -487,419 +487,412 @@

    Source Code

    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 - !=============================================================================== + error stop 'Number of weights does not match the number of control points.' + 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 + !=============================================================================== + !> 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 + error stop 'Number of weights does not match the number of control points.' + 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 + error stop 'Control points are not set.' + 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) - 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 + 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) - ! 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 + ! 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_Xc(this) result(Xc) + class(nurbs_curve), intent(in) :: this + real(rk), allocatable :: Xc(:,:) + + if (allocated(this%Xc)) then + Xc = this%Xc + else + error stop '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_Xg(this) result(Xg) + class(nurbs_curve), intent(in) :: this + real(rk), allocatable :: Xg(:,:) + + if (allocated(this%Xg)) then + Xg = this%Xg + else + error stop '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_Wc(this) result(Wc) + class(nurbs_curve), intent(in) :: this + real(rk), allocatable :: Wc(:) + + if (allocated(this%Wc)) then + Wc = this%Wc + else + error stop '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_Xt(this) result(Xt) + class(nurbs_curve), intent(in) :: this + real(rk), allocatable :: Xt(:) + + if (allocated(this%Xt)) then + Xt = this%Xt + else + error stop '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_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_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 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 + error stop '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 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_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 + 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 + !> 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 + error stop 'Control points are not set.' + end if + + call this%get_elem_Xc(elemConn) + + nc = size(this%Xc, 1) - 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) + 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," ",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 - !=============================================================================== - + 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 + error stop 'Geometry points are not set.' + 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 + error stop '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 + error stop '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 + error stop 'Knot vector is not set.' + 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 + error stop 'Knot vector is not set.' + 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 - !=============================================================================== - !> 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 + nc = sum(compute_multiplicity(this%knot)) - this%order - 1 + end function + !=============================================================================== + +end module forcad_nurbs_curve @@ -918,7 +911,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_nurbs_surface.f90.html b/sourcefile/forcad_nurbs_surface.f90.html index 3f4fde6d0..285158f2c 100644 --- a/sourcefile/forcad_nurbs_surface.f90.html +++ b/sourcefile/forcad_nurbs_surface.f90.html @@ -78,7 +78,7 @@

    forcad_nurbs_surface.f90
  • 352 statements + title="16.2% of total for source files.">366 statements
  • @@ -533,477 +533,468 @@

    Source Code

    ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return - end if + error stop 'Control points are not set.' + 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(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 - !=============================================================================== + ! 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_Xc(this) result(Xc) + class(nurbs_surface), intent(in) :: this + real(rk), allocatable :: Xc(:,:) + + if (allocated(this%Xc)) then + Xc = this%Xc + else + error stop '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_Xg(this) result(Xg) + class(nurbs_surface), intent(in) :: this + real(rk), allocatable :: Xg(:,:) + + if (allocated(this%Xg)) then + Xg = this%Xg + else + error stop '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_Wc(this) result(Wc) + class(nurbs_surface), intent(in) :: this + real(rk), allocatable :: Wc(:) + + if (allocated(this%Wc)) then + Wc = this%Wc + else + error stop '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_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 + error stop 'Parameter values are not set.' + end if + elseif (dir == 2) then + if (allocated(this%Xt2)) then + Xt = this%Xt2 + else + error stop 'Parameter values are not set.' + end if + else + error stop '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_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_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 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 + error stop 'Knot vector is not set.' + end if + elseif (dir == 2) then + if (allocated(this%knot2)) then + knot = this%knot2 + else + error stop 'Knot vector is not set.' + end if + else + error stop '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 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_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 + 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 + !=============================================================================== + !> 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 + error stop 'Control points are not set.' + end if + + call this%get_elem_Xc(elemConn) - call this%get_elem_Xc(elemConn) + nc = size(this%Xc, 1) - 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' + 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 + error stop 'Geometry points are not set.' + 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,'(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 + 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_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 + error stop '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 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 + error stop '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 + !> 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 + error stop 'Knot vector is not set.' + else + m = compute_multiplicity(this%knot1) + end if + + elseif (dir == 2) then + + ! check + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + m = compute_multiplicity(this%knot2) + end if + + else + error stop '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 + error stop 'Knot vector is not set.' + else + c = this%order(1) - compute_multiplicity(this%knot1) + end if + + elseif (dir == 2) then + + ! check + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + c = this%order(2) - compute_multiplicity(this%knot2) + end if + + else + error stop 'Invalid direction.' + end if + + end function + !=============================================================================== - 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 + + !=============================================================================== + !> 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 + error stop 'Knot vector is not set.' + else + nc = sum(compute_multiplicity(this%knot1)) - this%order(1) - 1 + end if - ! 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 + elseif (dir == 2) then + + ! check + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + nc = sum(compute_multiplicity(this%knot2)) - this%order(2) - 1 + end if + + else + error stop 'Invalid direction.' + end if + + end function + !=============================================================================== + +end module forcad_nurbs_surface @@ -1022,7 +1013,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_nurbs_volume.f90.html b/sourcefile/forcad_nurbs_volume.f90.html index 8a8fd0711..43b39f5dd 100644 --- a/sourcefile/forcad_nurbs_volume.f90.html +++ b/sourcefile/forcad_nurbs_volume.f90.html @@ -78,7 +78,7 @@

    forcad_nurbs_volume.f90
  • 401 statements + title="18.4% of total for source files.">417 statements
  • @@ -539,538 +539,526 @@

    Source Code

    ! 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 - !=============================================================================== + error stop 'Control points are not set.' + 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_Xc(this) result(Xc) + class(nurbs_volume), intent(in) :: this + real(rk), allocatable :: Xc(:,:) + + if (allocated(this%Xc)) then + Xc = this%Xc + else + error stop '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_Xg(this) result(Xg) + class(nurbs_volume), intent(in) :: this + real(rk), allocatable :: Xg(:,:) + + if (allocated(this%Xg)) then + Xg = this%Xg + else + error stop '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_Wc(this) result(Wc) + class(nurbs_volume), intent(in) :: this + real(rk), allocatable :: Wc(:) + + if (allocated(this%Wc)) then + Wc = this%Wc + else + error stop '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_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 + error stop 'Parameter values are not set.' + end if + elseif (dir == 2) then + if (allocated(this%Xt2)) then + Xt = this%Xt2 + else + error stop 'Parameter values are not set.' + end if + elseif (dir == 3) then + if (allocated(this%Xt3)) then + Xt = this%Xt3 + else + error stop 'Parameter values are not set.' + end if + else + error stop '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_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_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 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 + error stop 'Knot vector is not set.' + end if + elseif (dir == 2) then + if (allocated(this%knot2)) then + knot = this%knot2 + else + error stop 'Knot vector is not set.' + end if + elseif (dir == 3) then + if (allocated(this%knot3)) then + knot = this%knot3 + else + error stop 'Knot vector is not set.' + end if + else + error stop '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 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_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 + 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 + !=============================================================================== + !> 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 + error stop 'Control points are not set.' + end if + + call this%get_elem_Xc(elemConn) - call this%get_elem_Xc(elemConn) + nc = size(this%Xc, 1) - 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' + 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 + error stop 'Geometry points are not set.' + 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,'(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 + 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_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 + error stop '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 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 + error stop '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 + !> 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 + error stop 'Knot vector is not set.' + else + m = compute_multiplicity(this%knot1) + end if + + elseif (dir == 2) then + + ! check + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + m = compute_multiplicity(this%knot2) + end if + + elseif (dir == 3) then + + ! check + if (.not.allocated(this%knot3)) then + error stop 'Knot vector is not set.' + else + m = compute_multiplicity(this%knot3) + end if + + else + error stop '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 + error stop 'Knot vector is not set.' + else + c = this%order(1) - compute_multiplicity(this%knot1) + end if + + elseif (dir == 2) then + + ! check + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + c = this%order(2) - compute_multiplicity(this%knot2) + end if - ! 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 - !=============================================================================== + elseif (dir == 3) then + + ! check + if (.not.allocated(this%knot3)) then + error stop 'Knot vector is not set.' + else + c = this%order(3) - compute_multiplicity(this%knot3) + end if + + else + error stop '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 - - !=============================================================================== - !> 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 + error stop 'Knot vector is not set.' + else + nc = sum(compute_multiplicity(this%knot1)) - this%order(1) - 1 + end if - if (dir == 1) then + elseif (dir == 2) 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 + if (.not.allocated(this%knot2)) then + error stop 'Knot vector is not set.' + else + nc = sum(compute_multiplicity(this%knot2)) - this%order(2) - 1 + end if + + elseif (dir == 3) then + + ! check + if (.not.allocated(this%knot3)) then + error stop 'Knot vector is not set.' + else + nc = sum(compute_multiplicity(this%knot3)) - this%order(3) - 1 + end if + + else + error stop 'Invalid direction.' + end if - ! 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 + end function + !=============================================================================== + +end module forcad_nurbs_volume @@ -1089,7 +1077,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/forcad_utils.f90.html b/sourcefile/forcad_utils.f90.html index 9db247e76..c77620038 100644 --- a/sourcefile/forcad_utils.f90.html +++ b/sourcefile/forcad_utils.f90.html @@ -78,7 +78,7 @@

    forcad_utils.f90
  • 192 statements + title=" 8.5% of total for source files.">192 statements
  • @@ -765,7 +765,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/nurbs_curve.f90.html b/sourcefile/nurbs_curve.f90.html index 3aa3aced5..ee367c017 100644 --- a/sourcefile/nurbs_curve.f90.html +++ b/sourcefile/nurbs_curve.f90.html @@ -78,7 +78,7 @@

    nurbs_curve.f90
  • 19 statements + title=" 0.8% of total for source files.">19 statements
  • @@ -456,7 +456,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/nurbs_surface.f90.html b/sourcefile/nurbs_surface.f90.html index 064525c1c..fd760f7d3 100644 --- a/sourcefile/nurbs_surface.f90.html +++ b/sourcefile/nurbs_surface.f90.html @@ -78,7 +78,7 @@

    nurbs_surface.f90
  • 37 statements + title=" 1.6% of total for source files.">37 statements
  • @@ -481,7 +481,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/sourcefile/nurbs_volume.f90.html b/sourcefile/nurbs_volume.f90.html index 3172ef006..51c5509b9 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/src/forcad_bezier_curve.f90 b/src/forcad_bezier_curve.f90 index 88ee6f9c7..14180cbe8 100644 --- a/src/forcad_bezier_curve.f90 +++ b/src/forcad_bezier_curve.f90 @@ -53,8 +53,7 @@ pure subroutine set(this, Xc, Wc) 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 + error stop 'Number of weights does not match the number of control points.' else this%Wc = Wc end if @@ -76,8 +75,7 @@ pure subroutine create(this, res, Xt) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if ! Set parameter values @@ -130,7 +128,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -146,7 +144,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -162,7 +160,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -178,7 +176,7 @@ pure function get_Xt(this) result(Xt) if (allocated(this%Xt)) then Xt = this%Xt else - ! print*, 'Error: Parameter values are not set.' + error stop 'Parameter values are not set.' end if end function !=============================================================================== @@ -282,8 +280,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -323,8 +320,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -366,7 +362,7 @@ pure subroutine modify_Xc(this,X,num,dir) this%Xc(num,dir) = X call this%set(Xc = this%Xc, Wc = this%Wc) else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -385,7 +381,7 @@ pure subroutine modify_Wc(this,W,num) this%Wc(num) = W call this%set(Xc = this%Xc, Wc = this%Wc) else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end subroutine !=============================================================================== @@ -403,8 +399,7 @@ pure subroutine elevate_degree(this) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if if (allocated(this%Wc)) then ! Rational Bezier curve diff --git a/src/forcad_bezier_surface.f90 b/src/forcad_bezier_surface.f90 index 15dc472a0..0eaa8c956 100644 --- a/src/forcad_bezier_surface.f90 +++ b/src/forcad_bezier_surface.f90 @@ -70,8 +70,7 @@ pure subroutine create(this, res1, res2, Xt1, Xt2) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if @@ -143,7 +142,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -159,7 +158,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -175,7 +174,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -193,16 +192,16 @@ pure function get_Xt(this, dir) result(Xt) if (allocated(this%Xt1)) then Xt = this%Xt1 else - ! print*, 'Error: Parameter values are not set.' + error stop '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.' + error stop 'Parameter values are not set.' end if else - ! print*, 'Error: Invalid direction for parameter values.' + error stop 'Invalid direction for parameter values.' end if end function @@ -304,8 +303,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -344,8 +342,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -387,7 +384,7 @@ pure subroutine modify_Xc(this,X,num,dir) 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.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -406,7 +403,7 @@ pure subroutine modify_Wc(this,W,num) 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.' + error stop 'The Bezier curve is not rational.' end if end subroutine !=============================================================================== diff --git a/src/forcad_bezier_volume.f90 b/src/forcad_bezier_volume.f90 index 4c72e4f1d..8951d3223 100644 --- a/src/forcad_bezier_volume.f90 +++ b/src/forcad_bezier_volume.f90 @@ -70,8 +70,7 @@ pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if ! Set parameter values @@ -156,7 +155,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -172,7 +171,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -188,7 +187,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -206,22 +205,22 @@ pure function get_Xt(this, dir) result(Xt) if (allocated(this%Xt1)) then Xt = this%Xt1 else - ! print*, 'Error: Parameter values are not set.' + error stop '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.' + error stop '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.' + error stop 'Parameter values are not set.' end if else - ! print*, 'Error: Invalid direction for parameter values.' + error stop 'Invalid direction for parameter values.' end if end function @@ -324,8 +323,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -365,8 +363,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -409,7 +406,7 @@ pure subroutine modify_Xc(this,X,num,dir) 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.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -427,7 +424,7 @@ pure subroutine modify_Wc(this,W,num) 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.' + error stop 'The Bezier curve is not rational.' end if end subroutine !=============================================================================== diff --git a/src/forcad_nurbs_curve.f90 b/src/forcad_nurbs_curve.f90 index 3244a220b..11103f856 100644 --- a/src/forcad_nurbs_curve.f90 +++ b/src/forcad_nurbs_curve.f90 @@ -62,8 +62,7 @@ pure subroutine set1(this, knot, Xc, Wc) 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 + error stop 'Number of weights does not match the number of control points.' else this%Wc = Wc end if @@ -90,8 +89,7 @@ pure subroutine set2(this, Xth_dir, order, continuity, Xc, Wc) 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 + error stop 'Number of weights does not match the number of control points.' else this%Wc = Wc end if @@ -112,8 +110,7 @@ pure subroutine create(this, res, Xt) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if ! Set parameter values @@ -165,7 +162,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -181,7 +178,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -197,7 +194,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -213,7 +210,7 @@ pure function get_Xt(this) result(Xt) if (allocated(this%Xt)) then Xt = this%Xt else - ! print*, 'Error: Parameter values are not set.' + error stop 'Parameter values are not set.' end if end function !=============================================================================== @@ -256,7 +253,7 @@ pure function get_knot(this) result(knot) if (allocated(this%knot)) then knot = this%knot else - ! print*, 'Error: Knot vector is not set.' + error stop 'Knot vector is not set.' end if end function !=============================================================================== @@ -321,8 +318,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -361,8 +357,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -403,7 +398,7 @@ pure subroutine modify_Xc(this,X,num,dir) 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.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -421,7 +416,7 @@ pure subroutine modify_Wc(this,W,num) 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.' + error stop 'The Bezier curve is not rational.' end if end subroutine !=============================================================================== @@ -436,8 +431,7 @@ pure function get_multiplicity(this) result(m) ! check if (.not.allocated(this%knot)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot) end if @@ -454,8 +448,7 @@ pure function get_continuity(this) result(c) ! check if (.not.allocated(this%knot)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order - compute_multiplicity(this%knot) end if diff --git a/src/forcad_nurbs_surface.f90 b/src/forcad_nurbs_surface.f90 index 184b25aa6..43cd309c1 100644 --- a/src/forcad_nurbs_surface.f90 +++ b/src/forcad_nurbs_surface.f90 @@ -108,8 +108,7 @@ pure subroutine create(this, res1, res2, Xt1, Xt2) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if @@ -181,7 +180,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -197,7 +196,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -213,7 +212,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -231,16 +230,16 @@ pure function get_Xt(this, dir) result(Xt) if (allocated(this%Xt1)) then Xt = this%Xt1 else - ! print*, 'Error: Parameter values are not set.' + error stop '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.' + error stop 'Parameter values are not set.' end if else - ! print*, 'Error: Invalid direction for parameter values.' + error stop 'Invalid direction for parameter values.' end if end function @@ -288,16 +287,16 @@ pure function get_knot(this, dir) result(knot) if (allocated(this%knot1)) then knot = this%knot1 else - ! print*, 'Error: Knot vector is not set.' + error stop '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.' + error stop 'Knot vector is not set.' end if else - ! print*, 'Error: Invalid direction for knot vector.' + error stop 'Invalid direction for knot vector.' end if end function @@ -365,8 +364,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -405,8 +403,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -447,7 +444,7 @@ pure subroutine modify_Xc(this,X,num,dir) 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.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -465,7 +462,7 @@ pure subroutine modify_Wc(this,W,num) 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.' + error stop 'The NURBS surface is not rational.' end if end subroutine !=============================================================================== @@ -483,8 +480,7 @@ pure function get_multiplicity(this, dir) result(m) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot1) end if @@ -493,14 +489,13 @@ pure function get_multiplicity(this, dir) result(m) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot2) end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function @@ -519,8 +514,7 @@ pure function get_continuity(this, dir) result(c) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order(1) - compute_multiplicity(this%knot1) end if @@ -529,14 +523,13 @@ pure function get_continuity(this, dir) result(c) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order(2) - compute_multiplicity(this%knot2) end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function @@ -555,8 +548,7 @@ pure function get_nc(this, dir) result(nc) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else nc = sum(compute_multiplicity(this%knot1)) - this%order(1) - 1 end if @@ -565,14 +557,13 @@ pure function get_nc(this, dir) result(nc) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else nc = sum(compute_multiplicity(this%knot2)) - this%order(2) - 1 end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function diff --git a/src/forcad_nurbs_volume.f90 b/src/forcad_nurbs_volume.f90 index c73be7422..8c613421d 100644 --- a/src/forcad_nurbs_volume.f90 +++ b/src/forcad_nurbs_volume.f90 @@ -114,8 +114,7 @@ pure subroutine create(this, res1, res2, res3, Xt1, Xt2, Xt3) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if ! Set parameter values @@ -200,7 +199,7 @@ pure function get_Xc(this) result(Xc) if (allocated(this%Xc)) then Xc = this%Xc else - ! print*, 'Error: Control points are not set.' + error stop 'Control points are not set.' end if end function !=============================================================================== @@ -216,7 +215,7 @@ pure function get_Xg(this) result(Xg) if (allocated(this%Xg)) then Xg = this%Xg else - ! print*, 'Error: Geometry points are not set.' + error stop 'Geometry points are not set.' end if end function !=============================================================================== @@ -232,7 +231,7 @@ pure function get_Wc(this) result(Wc) if (allocated(this%Wc)) then Wc = this%Wc else - ! print*, 'Error: The Bezier curve is not rational.' + error stop 'The Bezier curve is not rational.' end if end function !=============================================================================== @@ -250,22 +249,22 @@ pure function get_Xt(this, dir) result(Xt) if (allocated(this%Xt1)) then Xt = this%Xt1 else - ! print*, 'Error: Parameter values are not set.' + error stop '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.' + error stop '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.' + error stop 'Parameter values are not set.' end if else - ! print*, 'Error: Invalid direction for parameter values.' + error stop 'Invalid direction for parameter values.' end if end function @@ -315,22 +314,22 @@ pure function get_knot(this, dir) result(knot) if (allocated(this%knot1)) then knot = this%knot1 else - ! print*, 'Error: Knot vector is not set.' + error stop '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.' + error stop '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.' + error stop 'Knot vector is not set.' end if else - ! print*, 'Error: Invalid direction for knot vector.' + error stop 'Invalid direction for knot vector.' end if end function @@ -400,8 +399,7 @@ impure subroutine export_Xc(this, filename) ! check if (.not.allocated(this%Xc)) then - ! print*, 'Error: Control points are not set.' - return + error stop 'Control points are not set.' end if call this%get_elem_Xc(elemConn) @@ -441,8 +439,7 @@ impure subroutine export_Xg(this, filename) ! check if (.not.allocated(this%Xg)) then - ! print*, 'Error: Geometry points are not set.' - return + error stop 'Geometry points are not set.' end if call this%get_elem_Xg(elemConn) @@ -484,7 +481,7 @@ pure subroutine modify_Xc(this,X,num,dir) 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.' + error stop 'Control points are not set.' end if end subroutine !=============================================================================== @@ -502,7 +499,7 @@ pure subroutine modify_Wc(this,W,num) 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.' + error stop 'The NURBS surface is not rational.' end if end subroutine !=============================================================================== @@ -520,8 +517,7 @@ pure function get_multiplicity(this, dir) result(m) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot1) end if @@ -530,8 +526,7 @@ pure function get_multiplicity(this, dir) result(m) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot2) end if @@ -540,14 +535,13 @@ pure function get_multiplicity(this, dir) result(m) ! check if (.not.allocated(this%knot3)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else m = compute_multiplicity(this%knot3) end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function @@ -566,8 +560,7 @@ pure function get_continuity(this, dir) result(c) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order(1) - compute_multiplicity(this%knot1) end if @@ -576,8 +569,7 @@ pure function get_continuity(this, dir) result(c) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order(2) - compute_multiplicity(this%knot2) end if @@ -586,14 +578,13 @@ pure function get_continuity(this, dir) result(c) ! check if (.not.allocated(this%knot3)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else c = this%order(3) - compute_multiplicity(this%knot3) end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function @@ -612,8 +603,7 @@ pure function get_nc(this, dir) result(nc) ! check if (.not.allocated(this%knot1)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else nc = sum(compute_multiplicity(this%knot1)) - this%order(1) - 1 end if @@ -622,8 +612,7 @@ pure function get_nc(this, dir) result(nc) ! check if (.not.allocated(this%knot2)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else nc = sum(compute_multiplicity(this%knot2)) - this%order(2) - 1 end if @@ -632,14 +621,13 @@ pure function get_nc(this, dir) result(nc) ! check if (.not.allocated(this%knot3)) then - ! print*, 'Error: Knot vector is not set.' - return + error stop 'Knot vector is not set.' else nc = sum(compute_multiplicity(this%knot3)) - this%order(3) - 1 end if else - ! print*, 'Error: Invalid direction.' + error stop 'Invalid direction.' end if end function diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index 1f28979fd..202e3ca66 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":"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 +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_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":"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_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_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_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":"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":"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~~CalledByGraph proc~generate_xc example_bezier_volume::generate_Xc program~example_bezier_volume example_bezier_volume program~example_bezier_volume->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":"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_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~3~~CalledByGraph proc~generate_xc~3 example_bezier_surface::generate_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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":"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_surface::bezier_surface%create proc~create~3->proc~basis_bernstein proc~create~5 forcad_bezier_volume::bezier_volume%create proc~create~5->proc~basis_bernstein proc~create~6 forcad_bezier_curve::bezier_curve%create proc~create~6->proc~basis_bernstein proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~6 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->proc~create~6 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~create~3 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_curve::nurbs_curve%create proc~create->proc~basis_bspline proc~create~2 forcad_nurbs_volume::nurbs_volume%create proc~create~2->proc~basis_bspline proc~create~4 forcad_nurbs_surface::nurbs_surface%create proc~create~4->proc~basis_bspline program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->proc~create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~create~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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/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_curve::nurbs_curve%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_surface::nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set2~2 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set2~3 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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/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_curve::nurbs_curve%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_surface::nurbs_surface%get_continuity proc~get_continuity~3->proc~compute_multiplicity proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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_surface::nurbs_surface%get_multiplicity proc~get_multiplicity~3->proc~compute_multiplicity proc~get_nc forcad_nurbs_curve::nurbs_curve%get_nc proc~get_nc->proc~compute_multiplicity proc~get_nc~2 forcad_nurbs_volume::nurbs_volume%get_nc proc~get_nc~2->proc~compute_multiplicity proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~get_nc~4->proc~compute_multiplicity proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~get_order->proc~get_multiplicity proc~get_order~2 forcad_nurbs_volume::nurbs_volume%get_order proc~get_order~2->proc~get_multiplicity~2 proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~4->proc~get_multiplicity~3 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_nc~2 proc~set1~2->proc~get_order~2 proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~3->proc~get_nc~4 proc~set1~3->proc~get_order~4 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~get_nc~2 proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~3->proc~get_nc~4 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set1~3 none~set~4->proc~set2~3 proc~set1 forcad_nurbs_curve::nurbs_curve%set1 proc~set1->proc~get_order none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set1 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->none~set~2 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_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~2 forcad_nurbs_volume::nurbs_volume%create proc~create~2->proc~kron proc~create~3 forcad_bezier_surface::bezier_surface%create proc~create~3->proc~kron proc~create~4 forcad_nurbs_surface::nurbs_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~3 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~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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/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_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_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~6 program~example_bezier_curve->proc~export_xg~6 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~3 program~example_bezier_surface->proc~export_xg~3 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 program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~4 program~example_nurbs_surface->proc~export_xg~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->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/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_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_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~6 program~example_bezier_curve->proc~export_xg~6 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~3 program~example_bezier_surface->proc~export_xg~3 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 program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~4 program~example_nurbs_surface->proc~export_xg~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->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/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_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_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~6 program~example_bezier_curve->proc~export_xg~6 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~3 program~example_bezier_surface->proc~export_xg~3 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 program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~4 program~example_nurbs_surface->proc~export_xg~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->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/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_curve::nurbs_curve%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_surface::nurbs_surface%set2 proc~set2~3->proc~compute_knot_vector none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set2~2 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set2~3 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->none~set program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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. 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~2 forcad_nurbs_volume::nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 forcad_bezier_surface::bezier_surface%create proc~create~3->interface~ndgrid proc~create~4 forcad_nurbs_surface::nurbs_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~3 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~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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/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~2 forcad_nurbs_volume::nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 forcad_bezier_surface::bezier_surface%create proc~create~3->interface~ndgrid proc~create~4 forcad_nurbs_surface::nurbs_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~3 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~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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/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_curve::nurbs_curve%get_elem_Xc proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xc proc~get_elem_xc~2->interface~elemconn_c0 proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~get_elem_xc~3->interface~elemconn_c0 proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xc proc~get_elem_xc~6->interface~elemconn_c0 proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~get_elem_xg->interface~elemconn_c0 proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%get_elem_Xg proc~get_elem_xg~2->interface~elemconn_c0 proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%get_elem_Xg proc~get_elem_xg~3->interface~elemconn_c0 proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%get_elem_Xg proc~get_elem_xg~6->interface~elemconn_c0 proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~export_xc~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~2->proc~get_elem_xg~2 proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 proc~export_xg~4 forcad_nurbs_surface::nurbs_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_bezier_curve::bezier_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~6 program~example_bezier_curve->proc~export_xg~6 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->proc~export_xc~3 program~example_bezier_surface->proc~export_xg~3 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 program~example_nurbs_curve->proc~export_xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->proc~export_xc~4 program~example_nurbs_surface->proc~export_xg~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->proc~export_xc~2 program~example_nurbs_volume->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. 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~2 forcad_nurbs_volume::nurbs_volume%create proc~create~2->interface~ndgrid proc~create~3 forcad_bezier_surface::bezier_surface%create proc~create~3->interface~ndgrid proc~create~4 forcad_nurbs_surface::nurbs_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~3 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~4 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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. 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 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.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.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.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.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~~CallsGraph proc~get_continuity forcad_nurbs_curve::nurbs_curve%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) 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.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~~CallsGraph proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%get_multiplicity proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~get_order->proc~get_multiplicity proc~set1 forcad_nurbs_curve::nurbs_curve%set1 proc~set1->proc~get_order none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set1 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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) 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~~CallsGraph proc~get_nc forcad_nurbs_curve::nurbs_curve%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.","tags":"","loc":"proc/get_nc.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.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~~CallsGraph proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%get_order proc~set1 forcad_nurbs_curve::nurbs_curve%set1 proc~set1->proc~get_order none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set1 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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, 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~~CallsGraph proc~create forcad_nurbs_curve::nurbs_curve%create proc~basis_bspline forcad_utils::basis_bspline proc~create->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~~CalledByGraph proc~create forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~~CallsGraph proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~get_elem_xc forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%export_Xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~~CallsGraph proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%export_Xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_curve Arguments Type Intent Optional Attributes Name class( nurbs_curve ), intent(inout) :: this Called by proc~~finalize~~CalledByGraph proc~finalize forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_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~~CallsGraph proc~get_elem_xc forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%get_elem_Xc proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc proc~export_xc->proc~get_elem_xc program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_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~~CallsGraph proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%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_curve::nurbs_curve%get_elem_Xg proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg proc~export_xg->proc~get_elem_xg program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_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~~CallsGraph proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc none~set forcad_nurbs_curve::nurbs_curve%set proc~modify_wc->none~set proc~set1 forcad_nurbs_curve::nurbs_curve%set1 none~set->proc~set1 proc~set2 forcad_nurbs_curve::nurbs_curve%set2 none~set->proc~set2 proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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.","tags":"","loc":"proc/modify_wc.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~~CallsGraph proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc none~set forcad_nurbs_curve::nurbs_curve%set proc~modify_xc->none~set proc~set1 forcad_nurbs_curve::nurbs_curve%set1 none~set->proc~set1 proc~set2 forcad_nurbs_curve::nurbs_curve%set2 none~set->proc~set2 proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->proc~compute_knot_vector proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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.","tags":"","loc":"proc/modify_xc.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~~CallsGraph proc~set1 forcad_nurbs_curve::nurbs_curve%set1 proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~set1->proc~get_order proc~get_multiplicity forcad_nurbs_curve::nurbs_curve%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~~set1~~CalledByGraph proc~set1 forcad_nurbs_curve::nurbs_curve%set1 none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set1 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_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~~CallsGraph proc~set2 forcad_nurbs_curve::nurbs_curve%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->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~~CalledByGraph proc~set2 forcad_nurbs_curve::nurbs_curve%set2 none~set forcad_nurbs_curve::nurbs_curve%set none~set->proc~set2 proc~modify_wc forcad_nurbs_curve::nurbs_curve%modify_Wc proc~modify_wc->none~set proc~modify_xc forcad_nurbs_curve::nurbs_curve%modify_Xc proc~modify_xc->none~set program~example_nurbs_curve example_nurbs_curve program~example_nurbs_curve->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), 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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), 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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), 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_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~2.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~2 forcad_nurbs_volume::nurbs_volume%get_order proc~get_order~2->proc~get_multiplicity~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_order~2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this integer, intent(in) :: dir Return Value integer Calls proc~~get_nc~2~~CallsGraph proc~get_nc~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_nc proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_nc~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 proc~set2~2->proc~get_nc~2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set1~2 none~set~2->proc~set2~2 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this Return Value integer, (3)","tags":"","loc":"proc/get_ng~2.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~2~~CallsGraph proc~get_order~2 forcad_nurbs_volume::nurbs_volume%get_order proc~get_multiplicity~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_order proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 proc~set1~2->proc~get_order~2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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, 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~2~~CallsGraph proc~create~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%create program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xc~2~~CallsGraph proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%export_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~2~~CallsGraph proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%export_Xg program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_volume Arguments Type Intent Optional Attributes Name class( nurbs_volume ), intent(inout) :: this Called by proc~~finalize~2~~CalledByGraph proc~finalize~2 forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_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~2~~CallsGraph proc~get_elem_xc~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_elem_Xc proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc proc~export_xc~2->proc~get_elem_xc~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_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~2~~CallsGraph proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_elem_Xg proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg proc~export_xg~2->proc~get_elem_xg~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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_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~2~~CallsGraph proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc none~set~2 forcad_nurbs_volume::nurbs_volume%set proc~modify_wc~2->none~set~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~2->proc~set2~2 proc~get_nc~2 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%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_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~2~~CallsGraph proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc none~set~2 forcad_nurbs_volume::nurbs_volume%set proc~modify_xc~2->none~set~2 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%set2 none~set~2->proc~set2~2 proc~get_nc~2 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%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, 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~2 forcad_nurbs_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%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_volume::nurbs_volume%set1 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set1~2 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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, 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~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%set2 none~set~2 forcad_nurbs_volume::nurbs_volume%set none~set~2->proc~set2~2 proc~modify_wc~2 forcad_nurbs_volume::nurbs_volume%modify_Wc proc~modify_wc~2->none~set~2 proc~modify_xc~2 forcad_nurbs_volume::nurbs_volume%modify_Xc proc~modify_xc~2->none~set~2 program~example_nurbs_volume example_nurbs_volume program~example_nurbs_volume->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":"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 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~3.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~3.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~3.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~3.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~3.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~3.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~3.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~3~~CallsGraph proc~create~3 forcad_bezier_surface::bezier_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~3->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3->proc~basis_bernstein 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_bezier_surface::bezier_surface%create program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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. 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 error stop 'Control points are not set.' 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~3.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~3~~CallsGraph proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%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_surface::bezier_surface%export_Xc program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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 bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~3~~CallsGraph proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%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_surface::bezier_surface%export_Xg program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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 bezier_surface Arguments Type Intent Optional Attributes Name class( bezier_surface ), intent(inout) :: this Called by proc~~finalize~3~~CalledByGraph proc~finalize~3 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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 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~3~~CallsGraph proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%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_surface::bezier_surface%get_elem_Xc proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc proc~export_xc~3->proc~get_elem_xc~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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 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~3~~CallsGraph proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%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_surface::bezier_surface%get_elem_Xg proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg proc~export_xg~3->proc~get_elem_xg~3 program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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_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~3~~CallsGraph proc~modify_wc~3 forcad_bezier_surface::bezier_surface%modify_Wc proc~set forcad_bezier_surface::bezier_surface%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_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~3~~CallsGraph proc~modify_xc~3 forcad_bezier_surface::bezier_surface%modify_Xc proc~set forcad_bezier_surface::bezier_surface%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, 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~~CalledByGraph proc~set forcad_bezier_surface::bezier_surface%set proc~modify_wc~3 forcad_bezier_surface::bezier_surface%modify_Wc proc~modify_wc~3->proc~set proc~modify_xc~3 forcad_bezier_surface::bezier_surface%modify_Xc proc~modify_xc~3->proc~set program~example_bezier_surface example_bezier_surface program~example_bezier_surface->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~4.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~4.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~4.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~4.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~3~~CallsGraph proc~get_continuity~3 forcad_nurbs_surface::nurbs_surface%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, 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~3.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~3~~CallsGraph proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%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_surface::nurbs_surface%get_multiplicity proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~get_order~4->proc~get_multiplicity~3 proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~3->proc~get_order~4 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set1~3 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~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_multiplicity~3.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~4~~CallsGraph proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~4->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~4~~CalledByGraph proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~3->proc~get_nc~4 proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 proc~set2~3->proc~get_nc~4 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set1~3 none~set~4->proc~set2~3 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~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_nc~4.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~4.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~4~~CallsGraph proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~4->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~4~~CalledByGraph proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 proc~set1~3->proc~get_order~4 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set1~3 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~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_order~4.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~4~~CallsGraph proc~create~4 forcad_nurbs_surface::nurbs_surface%create interface~ndgrid forcad_utils::ndgrid proc~create~4->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~4->proc~basis_bspline 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_nurbs_surface::nurbs_surface%create program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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.","tags":"","loc":"proc/create~4.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~4~~CallsGraph proc~export_xc~4 forcad_nurbs_surface::nurbs_surface%export_Xc proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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 nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(in) :: this character(len=*), intent(in) :: filename Calls proc~~export_xg~4~~CallsGraph proc~export_xg~4 forcad_nurbs_surface::nurbs_surface%export_Xg proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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 nurbs_surface Arguments Type Intent Optional Attributes Name class( nurbs_surface ), intent(inout) :: this Called by proc~~finalize~4~~CalledByGraph proc~finalize~4 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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 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~4~~CallsGraph proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_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_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~4 forcad_nurbs_surface::nurbs_surface%export_Xc proc~export_xc~4->proc~get_elem_xc~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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 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~4~~CallsGraph proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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_nurbs_surface::nurbs_surface%get_elem_Xg proc~export_xg~4 forcad_nurbs_surface::nurbs_surface%export_Xg proc~export_xg~4->proc~get_elem_xg~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_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) 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~4~~CallsGraph proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc none~set~4 forcad_nurbs_surface::nurbs_surface%set proc~modify_wc~4->none~set~4 proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 none~set~4->proc~set1~3 proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 none~set~4->proc~set2~3 proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~3->proc~get_nc~4 proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~3->proc~get_order~4 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set2~3->proc~get_nc~4 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~4->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~4->proc~get_multiplicity~3 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~4.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~4~~CallsGraph proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc none~set~4 forcad_nurbs_surface::nurbs_surface%set proc~modify_xc~4->none~set~4 proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 none~set~4->proc~set1~3 proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 none~set~4->proc~set2~3 proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~3->proc~get_nc~4 proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~3->proc~get_order~4 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set2~3->proc~get_nc~4 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~4->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~4->proc~get_multiplicity~3 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~4.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~3~~CallsGraph proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~3->proc~get_nc~4 proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~3->proc~get_order~4 proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~4->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~4->proc~get_multiplicity~3 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_surface::nurbs_surface%set1 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set1~3 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~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/set1~3.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~3~~CallsGraph proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set2~3->proc~get_nc~4 proc~repelem forcad_utils::repelem proc~compute_knot_vector->proc~repelem proc~compute_multiplicity forcad_utils::compute_multiplicity proc~get_nc~4->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~3~~CalledByGraph proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 none~set~4 forcad_nurbs_surface::nurbs_surface%set none~set~4->proc~set2~3 proc~modify_wc~4 forcad_nurbs_surface::nurbs_surface%modify_Wc proc~modify_wc~4->none~set~4 proc~modify_xc~4 forcad_nurbs_surface::nurbs_surface%modify_Xc proc~modify_xc~4->none~set~4 program~example_nurbs_surface example_nurbs_surface program~example_nurbs_surface->none~set~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/set2~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~5~~CalledByGraph proc~generate_xc~5 example_nurbs_volume::generate_Xc program~example_nurbs_volume example_nurbs_volume program~example_nurbs_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 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~2 forcad_bezier_volume::bezier_volume%set proc~modify_wc~5->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~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~2 forcad_bezier_volume::bezier_volume%set proc~modify_xc~5->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~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~2~~CalledByGraph proc~set~2 forcad_bezier_volume::bezier_volume%set proc~modify_wc~5 forcad_bezier_volume::bezier_volume%modify_Wc proc~modify_wc~5->proc~set~2 proc~modify_xc~5 forcad_bezier_volume::bezier_volume%modify_Xc proc~modify_xc~5->proc~set~2 program~example_bezier_volume example_bezier_volume program~example_bezier_volume->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_curve Arguments Type Intent Optional Attributes Name class( bezier_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 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~6.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~6.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~6.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~6.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~6.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~6.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~6~~CallsGraph proc~create~6 forcad_bezier_curve::bezier_curve%create proc~basis_bernstein forcad_utils::basis_bernstein proc~create~6->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~6~~CalledByGraph proc~create~6 forcad_bezier_curve::bezier_curve%create proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~create~6 program~example_bezier_curve example_bezier_curve program~example_bezier_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":"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~6 forcad_bezier_curve::bezier_curve%create proc~elevate_degree->proc~create~6 proc~set~3 forcad_bezier_curve::bezier_curve%set proc~elevate_degree->proc~set~3 proc~basis_bernstein forcad_utils::basis_bernstein proc~create~6->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~6~~CallsGraph proc~export_xc~6 forcad_bezier_curve::bezier_curve%export_Xc proc~get_elem_xc~6 forcad_bezier_curve::bezier_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_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve example_bezier_curve program~example_bezier_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) 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~6~~CallsGraph proc~export_xg~6 forcad_bezier_curve::bezier_curve%export_Xg proc~get_elem_xg~6 forcad_bezier_curve::bezier_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_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve example_bezier_curve program~example_bezier_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) 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~6~~CalledByGraph proc~finalize~6 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve example_bezier_curve program~example_bezier_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) 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~6~~CallsGraph proc~get_elem_xc~6 forcad_bezier_curve::bezier_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_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~6 forcad_bezier_curve::bezier_curve%export_Xc proc~export_xc~6->proc~get_elem_xc~6 program~example_bezier_curve example_bezier_curve program~example_bezier_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) 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~6~~CallsGraph proc~get_elem_xg~6 forcad_bezier_curve::bezier_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_bezier_curve::bezier_curve%get_elem_Xg proc~export_xg~6 forcad_bezier_curve::bezier_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_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) 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~6~~CallsGraph proc~modify_wc~6 forcad_bezier_curve::bezier_curve%modify_Wc proc~set~3 forcad_bezier_curve::bezier_curve%set proc~modify_wc~6->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~6.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~6~~CallsGraph proc~modify_xc~6 forcad_bezier_curve::bezier_curve%modify_Xc proc~set~3 forcad_bezier_curve::bezier_curve%set proc~modify_xc~6->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~6.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~3~~CalledByGraph proc~set~3 forcad_bezier_curve::bezier_curve%set proc~elevate_degree forcad_bezier_curve::bezier_curve%elevate_degree proc~elevate_degree->proc~set~3 proc~modify_wc~6 forcad_bezier_curve::bezier_curve%modify_Wc proc~modify_wc~6->proc~set~3 proc~modify_xc~6 forcad_bezier_curve::bezier_curve%modify_Xc proc~modify_xc~6->proc~set~3 program~example_bezier_curve example_bezier_curve program~example_bezier_curve->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":"forcad – ForCAD","text":"Uses forcad_utils forcad_bezier_volume forcad_bezier_curve forcad_nurbs_surface forcad_nurbs_curve forcad_nurbs_volume forcad_bezier_surface 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_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_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":"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_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_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_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_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":"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 forcad_nurbs_curve::nurbs_curve%set program~example_nurbs_curve->none~set proc~create forcad_nurbs_curve::nurbs_curve%create program~example_nurbs_curve->proc~create proc~export_xc forcad_nurbs_curve::nurbs_curve%export_Xc program~example_nurbs_curve->proc~export_xc proc~export_xg forcad_nurbs_curve::nurbs_curve%export_Xg program~example_nurbs_curve->proc~export_xg proc~finalize forcad_nurbs_curve::nurbs_curve%finalize program~example_nurbs_curve->proc~finalize proc~set1 forcad_nurbs_curve::nurbs_curve%set1 none~set->proc~set1 proc~set2 forcad_nurbs_curve::nurbs_curve%set2 none~set->proc~set2 proc~basis_bspline forcad_utils::basis_bspline proc~create->proc~basis_bspline proc~get_elem_xc forcad_nurbs_curve::nurbs_curve%get_elem_Xc proc~export_xc->proc~get_elem_xc proc~get_elem_xg forcad_nurbs_curve::nurbs_curve%get_elem_Xg proc~export_xg->proc~get_elem_xg interface~elemconn_c0 forcad_utils::elemConn_C0 proc~get_elem_xc->interface~elemconn_c0 proc~get_elem_xg->interface~elemconn_c0 proc~get_order forcad_nurbs_curve::nurbs_curve%get_order proc~set1->proc~get_order proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2->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 forcad_nurbs_curve::nurbs_curve%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. 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_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 example_bezier_volume::generate_Xc program~example_bezier_volume->proc~generate_xc proc~set~2 forcad_bezier_volume::bezier_volume%set program~example_bezier_volume->proc~set~2 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":"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~4 forcad_nurbs_surface::nurbs_surface%set program~example_nurbs_surface->none~set~4 proc~create~4 forcad_nurbs_surface::nurbs_surface%create program~example_nurbs_surface->proc~create~4 proc~export_xc~4 forcad_nurbs_surface::nurbs_surface%export_Xc program~example_nurbs_surface->proc~export_xc~4 proc~export_xg~4 forcad_nurbs_surface::nurbs_surface%export_Xg program~example_nurbs_surface->proc~export_xg~4 proc~finalize~4 forcad_nurbs_surface::nurbs_surface%finalize program~example_nurbs_surface->proc~finalize~4 proc~generate_xc~2 example_nurbs_surface::generate_Xc program~example_nurbs_surface->proc~generate_xc~2 proc~set1~3 forcad_nurbs_surface::nurbs_surface%set1 none~set~4->proc~set1~3 proc~set2~3 forcad_nurbs_surface::nurbs_surface%set2 none~set~4->proc~set2~3 interface~ndgrid forcad_utils::ndgrid proc~create~4->interface~ndgrid proc~basis_bspline forcad_utils::basis_bspline proc~create~4->proc~basis_bspline proc~kron forcad_utils::kron proc~create~4->proc~kron proc~get_elem_xc~4 forcad_nurbs_surface::nurbs_surface%get_elem_Xc proc~export_xc~4->proc~get_elem_xc~4 proc~get_elem_xg~4 forcad_nurbs_surface::nurbs_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~get_nc~4 forcad_nurbs_surface::nurbs_surface%get_nc proc~set1~3->proc~get_nc~4 proc~get_order~4 forcad_nurbs_surface::nurbs_surface%get_order proc~set1~3->proc~get_order~4 proc~compute_knot_vector forcad_utils::compute_knot_vector proc~set2~3->proc~compute_knot_vector proc~set2~3->proc~get_nc~4 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~4->proc~compute_multiplicity proc~get_multiplicity~3 forcad_nurbs_surface::nurbs_surface%get_multiplicity proc~get_order~4->proc~get_multiplicity~3 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) :: 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_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~3 forcad_bezier_surface::bezier_surface%create program~example_bezier_surface->proc~create~3 proc~export_xc~3 forcad_bezier_surface::bezier_surface%export_Xc program~example_bezier_surface->proc~export_xc~3 proc~export_xg~3 forcad_bezier_surface::bezier_surface%export_Xg program~example_bezier_surface->proc~export_xg~3 proc~finalize~3 forcad_bezier_surface::bezier_surface%finalize program~example_bezier_surface->proc~finalize~3 proc~generate_xc~3 example_bezier_surface::generate_Xc program~example_bezier_surface->proc~generate_xc~3 proc~set forcad_bezier_surface::bezier_surface%set program~example_bezier_surface->proc~set interface~ndgrid forcad_utils::ndgrid proc~create~3->interface~ndgrid proc~basis_bernstein forcad_utils::basis_bernstein proc~create~3->proc~basis_bernstein proc~kron forcad_utils::kron proc~create~3->proc~kron proc~get_elem_xc~3 forcad_bezier_surface::bezier_surface%get_elem_Xc proc~export_xc~3->proc~get_elem_xc~3 proc~get_elem_xg~3 forcad_bezier_surface::bezier_surface%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~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_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~6 forcad_bezier_curve::bezier_curve%create program~example_bezier_curve->proc~create~6 proc~export_xc~6 forcad_bezier_curve::bezier_curve%export_Xc program~example_bezier_curve->proc~export_xc~6 proc~export_xg~6 forcad_bezier_curve::bezier_curve%export_Xg program~example_bezier_curve->proc~export_xg~6 proc~finalize~6 forcad_bezier_curve::bezier_curve%finalize program~example_bezier_curve->proc~finalize~6 proc~generate_xc~4 example_bezier_curve::generate_Xc program~example_bezier_curve->proc~generate_xc~4 proc~set~3 forcad_bezier_curve::bezier_curve%set program~example_bezier_curve->proc~set~3 proc~basis_bernstein forcad_utils::basis_bernstein proc~create~6->proc~basis_bernstein proc~get_elem_xc~6 forcad_bezier_curve::bezier_curve%get_elem_Xc proc~export_xc~6->proc~get_elem_xc~6 proc~get_elem_xg~6 forcad_bezier_curve::bezier_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~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~2 forcad_nurbs_volume::nurbs_volume%set program~example_nurbs_volume->none~set~2 proc~create~2 forcad_nurbs_volume::nurbs_volume%create program~example_nurbs_volume->proc~create~2 proc~export_xc~2 forcad_nurbs_volume::nurbs_volume%export_Xc program~example_nurbs_volume->proc~export_xc~2 proc~export_xg~2 forcad_nurbs_volume::nurbs_volume%export_Xg program~example_nurbs_volume->proc~export_xg~2 proc~finalize~2 forcad_nurbs_volume::nurbs_volume%finalize program~example_nurbs_volume->proc~finalize~2 proc~generate_xc~5 example_nurbs_volume::generate_Xc program~example_nurbs_volume->proc~generate_xc~5 proc~set1~2 forcad_nurbs_volume::nurbs_volume%set1 none~set~2->proc~set1~2 proc~set2~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_elem_Xc proc~export_xc~2->proc~get_elem_xc~2 proc~get_elem_xg~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%get_nc proc~set1~2->proc~get_nc~2 proc~get_order~2 forcad_nurbs_volume::nurbs_volume%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_volume::nurbs_volume%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 (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":"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":"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":"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_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":"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 error stop 'Number of weights does not match the number of control points.' 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 error stop 'Number of weights does not match the number of control points.' 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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop '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 error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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 error stop 'Knot vector is not set.' 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 error stop 'Knot vector is not set.' 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":"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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop 'Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else error stop 'Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else error stop 'Parameter values are not set.' end if else error stop '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 error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else error stop 'Knot vector is not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % knot3 )) then knot = this % knot3 else error stop 'Knot vector is not set.' end if else error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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 error stop 'Knot vector is not set.' else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else m = compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else m = compute_multiplicity ( this % knot3 ) end if else error stop '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 error stop 'Knot vector is not set.' else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else c = this % order ( 3 ) - compute_multiplicity ( this % knot3 ) end if else error stop '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 error stop 'Knot vector is not set.' else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if elseif ( dir == 3 ) then ! check if (. not . allocated ( this % knot3 )) then error stop 'Knot vector is not set.' else nc = sum ( compute_multiplicity ( this % knot3 )) - this % order ( 3 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_volume","tags":"","loc":"sourcefile/forcad_nurbs_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_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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop 'Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else error stop 'Parameter values are not set.' end if else error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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_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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop 'Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else error stop 'Parameter values are not set.' end if else error stop '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 error stop 'Knot vector is not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % knot2 )) then knot = this % knot2 else error stop 'Knot vector is not set.' end if else error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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 error stop 'Knot vector is not set.' else m = compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else m = compute_multiplicity ( this % knot2 ) end if else error stop '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 error stop 'Knot vector is not set.' else c = this % order ( 1 ) - compute_multiplicity ( this % knot1 ) end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else c = this % order ( 2 ) - compute_multiplicity ( this % knot2 ) end if else error stop '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 error stop 'Knot vector is not set.' else nc = sum ( compute_multiplicity ( this % knot1 )) - this % order ( 1 ) - 1 end if elseif ( dir == 2 ) then ! check if (. not . allocated ( this % knot2 )) then error stop 'Knot vector is not set.' else nc = sum ( compute_multiplicity ( this % knot2 )) - this % order ( 2 ) - 1 end if else error stop 'Invalid direction.' end if end function !=============================================================================== end module forcad_nurbs_surface","tags":"","loc":"sourcefile/forcad_nurbs_surface.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_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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop 'Parameter values are not set.' end if elseif ( dir == 2 ) then if ( allocated ( this % Xt2 )) then Xt = this % Xt2 else error stop 'Parameter values are not set.' end if elseif ( dir == 3 ) then if ( allocated ( this % Xt3 )) then Xt = this % Xt3 else error stop 'Parameter values are not set.' end if else error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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_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 error stop 'Number of weights does not match the number of control points.' 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 error stop 'Control points are not set.' 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 error stop '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 error stop '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 error stop '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 error stop '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 error stop 'Control points are not set.' 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 error stop 'Geometry points are not set.' 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 error stop '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 error stop '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 error stop 'Control points are not set.' 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"}]} \ No newline at end of file diff --git a/type/bezier_curve.html b/type/bezier_curve.html index e3080e55a..296593c51 100644 --- a/type/bezier_curve.html +++ b/type/bezier_curve.html @@ -79,7 +79,7 @@

    bezier_curve
  • 26 statements + title="

    14.4% of total for derived types.

    Including implementation: 268 statements, 14.8% of total for derived types.">26 statements
  • @@ -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

  • @@ -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
                  @@ -900,7 +900,7 @@

                  - +

                  procedure, public :: get_Xt @@ -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
                  @@ -883,7 +883,7 @@

                  - +

                  procedure, public :: get_Xt @@ -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 @@

                            • - private pure function get_order(this) result(order) + private pure function get_order(this) result(order)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1362,7 +1362,7 @@

                              - +

                              procedure, public :: modify_Wc @@ -1378,7 +1378,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 @@

    @@ -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, res, Xt) + private pure subroutine create(this, res, Xt)

      Author
      Seyed Ali Ghasemi
      @@ -447,7 +447,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -463,7 +463,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -526,7 +526,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -542,7 +542,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -605,7 +605,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -621,7 +621,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -669,7 +669,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -685,7 +685,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -738,7 +738,7 @@

              - +

              procedure, public :: get_Xc @@ -754,7 +754,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -807,7 +807,7 @@

                - +

                procedure, public :: get_Xg @@ -823,7 +823,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -876,7 +876,7 @@

                  - +

                  procedure, public :: get_Xt @@ -892,7 +892,7 @@

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

                    Author
                    Seyed Ali Ghasemi
                    @@ -945,7 +945,7 @@

                    - +

                    procedure, public :: get_continuity @@ -961,7 +961,7 @@

                    • - private pure function get_continuity(this) result(c) + private pure function get_continuity(this) result(c)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1014,7 +1014,7 @@

                      - +

                      procedure, public :: get_elem_Xc @@ -1030,7 +1030,7 @@

                      • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1108,7 +1108,7 @@

                        Arguments

                        - +

                        procedure, public :: get_elem_Xg @@ -1124,7 +1124,7 @@

                        • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1202,7 +1202,7 @@

                          Arguments

                          - +

                          procedure, public :: get_knot @@ -1218,7 +1218,7 @@

                          • - private pure function get_knot(this) result(knot) + private pure function get_knot(this) result(knot)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1271,7 +1271,7 @@

                            - +

                            procedure, public :: get_multiplicity @@ -1287,7 +1287,7 @@

                            • - private pure function get_multiplicity(this) result(m) + private pure function get_multiplicity(this) result(m)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1340,7 +1340,7 @@

                              - +

                              procedure, public :: get_nc @@ -1356,7 +1356,7 @@

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

                                Author
                                Seyed Ali Ghasemi
                                @@ -1409,7 +1409,7 @@

                                - +

                                procedure, public :: get_ng @@ -1425,7 +1425,7 @@

                                • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1478,7 +1478,7 @@

                                  - +

                                  procedure, public :: get_order @@ -1494,7 +1494,7 @@

                                  • - private pure function get_order(this) result(order) + private pure function get_order(this) result(order)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1547,7 +1547,7 @@

                                    - +

                                    procedure, public :: modify_Wc @@ -1563,7 +1563,7 @@

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

    Components

    @@ -242,7 +242,7 @@

    Components

    @@ -259,7 +259,7 @@

    Components

    @@ -276,7 +276,7 @@

    Components

    @@ -293,7 +293,7 @@

    Components

    @@ -310,7 +310,7 @@

    Components

    @@ -327,7 +327,7 @@

    Components

    @@ -344,7 +344,7 @@

    Components

    @@ -361,7 +361,7 @@

    Components

    @@ -389,7 +389,7 @@

    Type-Bound Procedures

    - +

    procedure, public :: create @@ -405,7 +405,7 @@

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

      Author
      Seyed Ali Ghasemi
      @@ -513,7 +513,7 @@

      Arguments

      - +

      procedure, public :: export_Xc @@ -529,7 +529,7 @@

      • - private impure subroutine export_Xc(this, filename) + private impure subroutine export_Xc(this, filename)

        Author
        Seyed Ali Ghasemi
        @@ -592,7 +592,7 @@

        Arguments

        - +

        procedure, public :: export_Xg @@ -608,7 +608,7 @@

        • - private impure subroutine export_Xg(this, filename) + private impure subroutine export_Xg(this, filename)

          Author
          Seyed Ali Ghasemi
          @@ -671,7 +671,7 @@

          Arguments

          - +

          procedure, public :: finalize @@ -687,7 +687,7 @@

          • - private pure subroutine finalize(this) + private pure subroutine finalize(this)

            Author
            Seyed Ali Ghasemi
            @@ -735,7 +735,7 @@

            Arguments

            - +

            procedure, public :: get_Wc @@ -751,7 +751,7 @@

            • - private pure function get_Wc(this) result(Wc) + private pure function get_Wc(this) result(Wc)

              Author
              Seyed Ali Ghasemi
              @@ -804,7 +804,7 @@

              - +

              procedure, public :: get_Xc @@ -820,7 +820,7 @@

              • - private pure function get_Xc(this) result(Xc) + private pure function get_Xc(this) result(Xc)

                Author
                Seyed Ali Ghasemi
                @@ -873,7 +873,7 @@

                - +

                procedure, public :: get_Xg @@ -889,7 +889,7 @@

                • - private pure function get_Xg(this) result(Xg) + private pure function get_Xg(this) result(Xg)

                  Author
                  Seyed Ali Ghasemi
                  @@ -942,7 +942,7 @@

                  - +

                  procedure, public :: get_Xt @@ -958,7 +958,7 @@

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

                    Author
                    Seyed Ali Ghasemi
                    @@ -1026,7 +1026,7 @@

                    - +

                    procedure, public :: get_continuity @@ -1042,7 +1042,7 @@

                    • - private pure function get_continuity(this, dir) result(c) + private pure function get_continuity(this, dir) result(c)

                      Author
                      Seyed Ali Ghasemi
                      @@ -1110,7 +1110,7 @@

                      - +

                      procedure, public :: get_elem_Xc @@ -1126,7 +1126,7 @@

                      • - private pure subroutine get_elem_Xc(this, elemConn, p) + private pure subroutine get_elem_Xc(this, elemConn, p)

                        Author
                        Seyed Ali Ghasemi
                        @@ -1204,7 +1204,7 @@

                        Arguments

                        - +

                        procedure, public :: get_elem_Xg @@ -1220,7 +1220,7 @@

                        • - private pure subroutine get_elem_Xg(this, elemConn, p) + private pure subroutine get_elem_Xg(this, elemConn, p)

                          Author
                          Seyed Ali Ghasemi
                          @@ -1298,7 +1298,7 @@

                          Arguments

                          - +

                          procedure, public :: get_knot @@ -1314,7 +1314,7 @@

                          • - private pure function get_knot(this, dir) result(knot) + private pure function get_knot(this, dir) result(knot)

                            Author
                            Seyed Ali Ghasemi
                            @@ -1382,7 +1382,7 @@

                            - +

                            procedure, public :: get_multiplicity @@ -1398,7 +1398,7 @@

                            • - private pure function get_multiplicity(this, dir) result(m) + private pure function get_multiplicity(this, dir) result(m)

                              Author
                              Seyed Ali Ghasemi
                              @@ -1466,7 +1466,7 @@

                              - +

                              procedure, public :: get_nc @@ -1482,7 +1482,7 @@

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

                                Author
                                Seyed Ali Ghasemi
                                @@ -1550,7 +1550,7 @@

                                - +

                                procedure, public :: get_ng @@ -1566,7 +1566,7 @@

                                • - private pure function get_ng(this) result(ng) + private pure function get_ng(this) result(ng)

                                  Author
                                  Seyed Ali Ghasemi
                                  @@ -1619,7 +1619,7 @@

                                  - +

                                  procedure, public :: get_order @@ -1635,7 +1635,7 @@

                                  • - private pure function get_order(this) result(order) + private pure function get_order(this) result(order)

                                    Author
                                    Seyed Ali Ghasemi
                                    @@ -1688,7 +1688,7 @@

                                    - +

                                    procedure, public :: modify_Wc @@ -1704,7 +1704,7 @@

                                    • - private pure subroutine modify_Wc(this, W, num) + private pure subroutine modify_Wc(this, W, num)

                                      Author
                                      Seyed Ali Ghasemi
                                      @@ -1782,7 +1782,7 @@

                                      Arguments

                                      - +

                                      procedure, public :: modify_Xc @@ -1798,7 +1798,7 @@

                                      • - private pure subroutine modify_Xc(this, X, num, dir) + private pure subroutine modify_Xc(this, X, num, dir)

                                        Author
                                        Seyed Ali Ghasemi
                                        @@ -1891,17 +1891,17 @@

                                        Arguments

                                        - +

                                        generic, public :: - set => set1, set2 + set => set1, set2

                                        • - private pure subroutine set1(this, knot1, knot2, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -2004,7 +2004,7 @@

                                          Arguments

                                        • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc)

                                          Author
                                          Seyed Ali Ghasemi
                                          @@ -2157,7 +2157,7 @@

                                          Arguments

                                          - +

                                          procedure, public :: set1 @@ -2173,7 +2173,7 @@

                                          • - private pure subroutine set1(this, knot1, knot2, Xc, Wc) + private pure subroutine set1(this, knot1, knot2, Xc, Wc)

                                            Author
                                            Seyed Ali Ghasemi
                                            @@ -2281,7 +2281,7 @@

                                            Arguments

                                            - +

                                            procedure, public :: set2 @@ -2297,7 +2297,7 @@

                                            • - private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc) + private pure subroutine set2(this, Xth_dir1, Xth_dir2, order, continuity1, continuity2, Xc, Wc)

                                              Author
                                              Seyed Ali Ghasemi
                                              @@ -2465,7 +2465,7 @@

                                              Arguments

                                              Documentation generated by FORD - on 2024-03-30T01:06:29.265865

                                              + on 2024-03-30T10:49:40.074808


                                            diff --git a/type/nurbs_volume.html b/type/nurbs_volume.html index f5187eb15..e5d42c927 100644 --- a/type/nurbs_volume.html +++ b/type/nurbs_volume.html @@ -79,7 +79,7 @@

                                            nurbs_volume
                                          • 36 statements + title="

                                            20.0% of total for derived types.

                                            Including implementation: 410 statements, 22.7% of total for derived types.">36 statements
                                          • @@ -121,16 +121,16 @@

                                            Variables

                                            Wc Xc - Xg - Xt1 - Xt2 - Xt3 - knot1 - knot2 + Xg + Xt1 + Xt2 + Xt3 + knot1 + knot2 knot3 - nc - ng - order + nc + ng + order

                                          @@ -157,25 +157,25 @@

                                          Type-Bound Procedures

    @@ -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
                  @@ -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
                    @@ -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
                        @@ -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,7 +1957,7 @@

                                  Arguments

                                  - +

                                  generic, public :: set => set1, set2 @@ -2621,7 +2621,7 @@

                                  Arguments

                                  Documentation generated by FORD - on 2024-03-30T01:06:29.265865

                                  + on 2024-03-30T10:49:40.074808


    - - 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),
    - + real(kind=rk), @@ -780,7 +780,7 @@

    Variables

    - + real(kind=rk), @@ -1005,7 +1005,7 @@

    Source Code

    Documentation generated by FORD - on 2024-03-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_bezier_surface.html b/program/example_bezier_surface.html index ba84fc74c..2b271bd95 100644 --- a/program/example_bezier_surface.html +++ b/program/example_bezier_surface.html @@ -116,9 +116,9 @@

    Variables

    - Wc - Xc - bezier + Wc + Xc + bezier
    @@ -139,7 +139,7 @@

    Functions

    @@ -460,93 +460,93 @@

    Calls

    example_bezier_surface - + -proc~create~5 - +proc~create~3 + forcad_bezier_surface::bezier_surface%create - + -program~example_bezier_surface->proc~create~5 +program~example_bezier_surface->proc~create~3 - + -proc~export_xc~5 - +proc~export_xc~3 + forcad_bezier_surface::bezier_surface%export_Xc - + -program~example_bezier_surface->proc~export_xc~5 +program~example_bezier_surface->proc~export_xc~3 - + -proc~export_xg~5 - +proc~export_xg~3 + forcad_bezier_surface::bezier_surface%export_Xg - + -program~example_bezier_surface->proc~export_xg~5 +program~example_bezier_surface->proc~export_xg~3 - + -proc~finalize~5 - +proc~finalize~3 + forcad_bezier_surface::bezier_surface%finalize - + -program~example_bezier_surface->proc~finalize~5 +program~example_bezier_surface->proc~finalize~3 - + -proc~generate_xc - +proc~generate_xc~3 + example_bezier_surface::generate_Xc - + -program~example_bezier_surface->proc~generate_xc +program~example_bezier_surface->proc~generate_xc~3 - + -proc~set~3 - +proc~set + forcad_bezier_surface::bezier_surface%set - + -program~example_bezier_surface->proc~set~3 +program~example_bezier_surface->proc~set @@ -559,9 +559,9 @@

    Calls

    - + -proc~create~5->interface~ndgrid +proc~create~3->interface~ndgrid @@ -574,9 +574,9 @@

    Calls

    - + -proc~create~5->proc~basis_bernstein +proc~create~3->proc~basis_bernstein @@ -589,39 +589,39 @@

    Calls

    - + -proc~create~5->proc~kron +proc~create~3->proc~kron - + -proc~get_elem_xc~5 - +proc~get_elem_xc~3 + forcad_bezier_surface::bezier_surface%get_elem_Xc - + -proc~export_xc~5->proc~get_elem_xc~5 +proc~export_xc~3->proc~get_elem_xc~3 - + -proc~get_elem_xg~5 - +proc~get_elem_xg~3 + forcad_bezier_surface::bezier_surface%get_elem_Xg - + -proc~export_xg~5->proc~get_elem_xg~5 +proc~export_xg~3->proc~get_elem_xg~3 @@ -664,15 +664,15 @@

    Calls

    - + -proc~get_elem_xc~5->interface~elemconn_c0 +proc~get_elem_xc~3->interface~elemconn_c0 - + -proc~get_elem_xg~5->interface~elemconn_c0 +proc~get_elem_xg~3->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_surface) @@ -884,7 +884,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)

    @@ -903,7 +903,7 @@

    Arguments

    - + integer, intent(in)
    - + integer, intent(in)
    - + real(kind=rk), intent(in)
    - + 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)

    @@ -903,7 +903,7 @@

    Arguments

    - + real(kind=rk), intent(in)
    - + 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-30T01:06:29.265865

    + on 2024-03-30T10:49:40.074808


    diff --git a/program/example_nurbs_surface.html b/program/example_nurbs_surface.html index 56083cf13..ecb7d6e23 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

    @@ -462,123 +462,123 @@

    Calls

    example_nurbs_surface - + -none~set~2 - +none~set~4 + forcad_nurbs_surface::nurbs_surface%set - + -program~example_nurbs_surface->none~set~2 +program~example_nurbs_surface->none~set~4 - + -proc~create~2 - +proc~create~4 + forcad_nurbs_surface::nurbs_surface%create - + -program~example_nurbs_surface->proc~create~2 +program~example_nurbs_surface->proc~create~4 - + -proc~export_xc~2 - +proc~export_xc~4 + forcad_nurbs_surface::nurbs_surface%export_Xc - + -program~example_nurbs_surface->proc~export_xc~2 +program~example_nurbs_surface->proc~export_xc~4 - + -proc~export_xg~2 - +proc~export_xg~4 + forcad_nurbs_surface::nurbs_surface%export_Xg - + -program~example_nurbs_surface->proc~export_xg~2 +program~example_nurbs_surface->proc~export_xg~4 - + -proc~finalize~2 - +proc~finalize~4 + forcad_nurbs_surface::nurbs_surface%finalize - + -program~example_nurbs_surface->proc~finalize~2 +program~example_nurbs_surface->proc~finalize~4 - + -proc~generate_xc~5 - +proc~generate_xc~2 + example_nurbs_surface::generate_Xc - + -program~example_nurbs_surface->proc~generate_xc~5 +program~example_nurbs_surface->proc~generate_xc~2 - + -proc~set1 - +proc~set1~3 + forcad_nurbs_surface::nurbs_surface%set1 - + -none~set~2->proc~set1 +none~set~4->proc~set1~3 - + -proc~set2 - +proc~set2~3 + forcad_nurbs_surface::nurbs_surface%set2 - + -none~set~2->proc~set2 +none~set~4->proc~set2~3 @@ -591,9 +591,9 @@

    Calls

    - + -proc~create~2->interface~ndgrid +proc~create~4->interface~ndgrid @@ -606,9 +606,9 @@

    Calls

    - + -proc~create~2->proc~basis_bspline +proc~create~4->proc~basis_bspline @@ -621,39 +621,39 @@

    Calls

    - + -proc~create~2->proc~kron +proc~create~4->proc~kron - + -proc~get_elem_xc~2 - +proc~get_elem_xc~4 + forcad_nurbs_surface::nurbs_surface%get_elem_Xc - + -proc~export_xc~2->proc~get_elem_xc~2 +proc~export_xc~4->proc~get_elem_xc~4 - + -proc~get_elem_xg~2 - +proc~get_elem_xg~4 + forcad_nurbs_surface::nurbs_surface%get_elem_Xg - + -proc~export_xg~2->proc~get_elem_xg~2 +proc~export_xg~4->proc~get_elem_xg~4 @@ -696,45 +696,45 @@

    Calls

    - + -proc~get_elem_xc~2->interface~elemconn_c0 +proc~get_elem_xc~4->interface~elemconn_c0 - + -proc~get_elem_xg~2->interface~elemconn_c0 +proc~get_elem_xg~4->interface~elemconn_c0 - + -proc~get_nc~2 - +proc~get_nc~4 + forcad_nurbs_surface::nurbs_surface%get_nc - + -proc~set1->proc~get_nc~2 +proc~set1~3->proc~get_nc~4 - + -proc~get_order~2 - +proc~get_order~4 + forcad_nurbs_surface::nurbs_surface%get_order - + -proc~set1->proc~get_order~2 +proc~set1~3->proc~get_order~4 @@ -747,15 +747,15 @@

    Calls

    - + -proc~set2->proc~compute_knot_vector +proc~set2~3->proc~compute_knot_vector - + -proc~set2->proc~get_nc~2 +proc~set2~3->proc~get_nc~4 @@ -828,30 +828,30 @@

    Calls

    - + -proc~get_nc~2->proc~compute_multiplicity +proc~get_nc~4->proc~compute_multiplicity - + -proc~get_multiplicity - +proc~get_multiplicity~3 + forcad_nurbs_surface::nurbs_surface%get_multiplicity - + -proc~get_order~2->proc~get_multiplicity +proc~get_order~4->proc~get_multiplicity~3 - + -proc~get_multiplicity->proc~compute_multiplicity +proc~get_multiplicity~3->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)

    @@ -1069,7 +1069,7 @@

    Arguments

    - + integer, intent(in)
    - + integer, intent(in)
    - + real(kind=rk), intent(in)
    - + 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)

    @@ -1086,7 +1086,7 @@

    Arguments

    - + real(kind=rk), intent(in)
    - + 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,
    - + integer, 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,
    - + real(kind=rk), private,
    - + integer, 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
    - + integer, private